手机短信里全是推广或者验证码信息?有多的卡或者异国他乡不方便使用以前的卡?那就就用树莓派做一个短信收发平台吧

前情介绍

现在境内随随便便注册个啥都需要验证手机,然后短信就成为了广告推广的重灾区,随随便便拿出手机,短信收件箱99%都是广告推广,今天狗东告诉你啥啥啥促销了,明天爱奇艺告诉你VIP也打折了,后天你之前在天猫之前买的店家告诉你他们又要打折了了,接下来又有银行说现在办信用卡有活动了……然后随着微信等社交软件的发展,手机短信真的就成为了一个天然的广告地。
我手里有两张卡,一张用了多年的移动和一张两年的联通,为什么会开一张联通,因为我使用的是非国行手机,联通的FDD-LTE和WCDMA比移动的TD-LTE体验好很多。两张卡的后果就是手机收到垃圾短信的次数变得更多,于是我想改变这个情况——用树莓派接收短信并通过Telegram Bot发送给我的Telegram。

开始折腾

首先,要将sim卡接到树莓派上就需要买GSM模块,然而我搜了下模块的价格,打扰了,于是我去想到了去购买USB的sim网卡,在 Gammu SMSD数据库里,找了下兼容设备后,我购买了华为的E173
Gammu SMSD是一个用来接收与发送短信的服务,可以运行在树莓派上
我手里的树莓派是树莓派3B+,使用的是Broadcom BCM2837,这是一个64位的SOC,网上一直传着64位系统的性能可以达到32位系统的30倍,然而树莓派官方却没有为他推出64位的操作系统,我在网上找到人社区为3b+维护的64位的Centos和ubuntu都有或多或少的问题,于是这次把系统换回了官方系统其实我这次有尝试Manjro-ARM,但是在配置port时总访问不了,有知道怎么解决的请在下面告诉我
我个人推荐大家使用root账户进行安装配置,我一开始用的普通账户+sudo的方式,但是Gammu SMSD服务起不起来,全程root账户后就一切正常了。

将USB网卡插在树莓派上

1
2
3
4
5
6
7
8
9
10
# 查看USB设备
~ $ lsusb
Bus 001 Device 006: ID 12d1:1436 Huawei Technologies Co., Ltd. Broadband stick
Bus 001 Device 004: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

~ $ ls /dev/ttyU*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2

因为我是WCDMA网卡,会有三个,后面配置时使用ttyUSB0和ttyUSB2都能正常工作,但是我发现重启设备后,有时USB2会变成USB3而,0和1却依旧存在,于是我使用的ttyUSB0进行配置

接下来就是安装与配置软件

安装配置 Gammu

1
~ $ apt install gammu

使用 gammu-config 进行配置,具体的配置参数等请参考设备文档和实际USB段口配置,配置完后使用 gammu --identify 进行验证

1
2
3
4
5
6
7
~ $ gammu --identify
Device : /dev/ttyUSB0
Manufacturer : Huawei
Model : E173
Firmware :
IMEI :
SIM IMSI :

安装配置 Gammu SMSD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
~ $ apt install gammu-smsdrc

~ $ vim /etc/gammu-smsdrc
# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
# 请根据自己的实际情况修改配置
port = /dev/ttyUSB0
connection = at115200
# Debugging
#logformat = textall

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
RunOnReceive=/root/receive-sms.sh
#添加收到短信后的操作
service = null #如果需要保存短信请改为 files,并在下方那该确定文件位置
logfile = syslog
# Increase for debugging information
debuglevel = 0

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

~ $ cat /root/receive-sms.sh
#!/bin/sh
TOKEN="XXX"
CHAT_ID=XXX
URL="https://api.telegram.org/bot$TOKEN/sendMessage"
for i in `seq $SMS_MESSAGES` ; do
eval "curl -s -X POST $URL -d chat_id=$CHAT_ID -d text=\"\${SMS_${i}_TEXT}\""
done

# 这个脚本就是调用Telegram Bot的API发送消息

创建配置Telegram Bot

访问 BotFather,根据提示按步骤创建属于自己的Bot,取得属于自己的Token。
然后用自己访问这个Bot,不是在BotFather,对他随便发句Hello World啥的。然后访问https://api.telegram.org/botTOKEN/getUpdates,把TOKEN替换成自己的Bot的Token,回返回一段JSON,然后找到chat下自己的id,替换上面脚本里的字段。然后执行gammu-smsd进行测试,给手机号发短信,看能不能自动转发到Telegram里,如果成功,就执行systemctl start gammu-smsd 让他开机自启吧