树莓派+A6搭建短信网关自动转发短信

树莓派+A6模块实现短信自动转发功能(短信网关)

借鉴:
https://xmsg.org/wordpress/2017/02/%E5%88%A9%E7%94%A8%E7%9F%AD%E4%BF%A1%E6%A8%A1%E5%9D%97%E9%85%8D%E5%90%88gammu%E5%AE%9E%E7%8E%B0%E7%94%A8%E7%9F%AD%E4%BF%A1%E7%AE%A1%E7%90%86linux%E6%9C%8D%E5%8A%A1%E5%99%A8/ 前人的足迹
https://blog.csdn.net/ki1381/article/details/79690060 前人的足迹
https://wammu.eu/docs/manual/ gammu官方手册

0x00 目的

有一个手机但是有两张卡,一张老卡,一张新卡,老卡随身带着或者再买个手机插上太麻烦,但是有些用老卡绑定的账户操作需要短信验证码,所以想将短信自动转发到新卡上
还有一位群内大佬说怕被定位,这样的话还要实现voip功能,不在此文范围内
此文只是抛砖引玉,如果转发短信贵的话,其实还可以配置自动发送到微信,或者用手机远控/监听之类的功能,也不在此文范围内,请根据文档自由发挥

0x01 材料

树莓派+A6模块+手机卡(关闭开机PIN码)(+usb-tty)

A6模块天线一定要买好的,这里A6使用单独数据线5V供电,是因为树莓派5V供电不稳定

线的接法应该是Tx1-Rx2 Tx2-Rx1但是这里用了usb转tty,所以应该是T-T R-R的接法(A6模块接U开头的,U_Rx U_Tx)

树莓派安装minicom(调试用)gammu(调试用)gammu-smsd(实战用)gammu-doc(应该包含数据库文件和文档,这里我们没有用到)

apt-get install minicom gammu gammu-smsd mysql-server

这里注意一下所下载的gammu-smsd版本,树莓派基于debian所以版本为1.38.1,如果使用数据库的话需要对应版本的数据库文件,可以去github上下载

0x02 调试模块

树莓派3如果使用串口的话需要进行复杂的设置,具体看这:
https://blog.csdn.net/ki1381/article/details/79690060
我们这里直接使用usb转tty

树莓派执行命令:

ls /dev/ttyUSB*
service gammu-smsd stop
minicom -s

显示minicom配置界面,
选择serial port setup,想修改哪个就按前面对应的键(A-Z)
修改串口设备为刚才找到的串口文件,这里假设是/dev/ttyUSB0
** 修改Hardware Flow Control为No,这里如果是YES将会出现无法写入问题 **
然后执行

minicom -D /dev/ttyUSB0

热插拔一下A6电源,会有初始化输入显示,输入AT回车,回显OK表示正常,输入AT+COPS?
** 如果无法输入或卡死,很可能是gammu-smsd正在运行占用了设备,执行service gammu-smsd status查看状况 **
如果类似+COPS:0,0,”UNICOM”说明卡片注册成功,失败的话请检查手机卡是否插反了(A6手机卡缺口朝外),是否是信号太弱,或者卡片自身问题
调试成功后关闭minicom(CTRL+A X)
执行gammu-config
依然是设置所选设备,串口通信率为at115200,保存。这样当前目录下会生成一个.gammurc配置文件
执行gammu –identify,如果回显芯片的具体信息说明成功

然后发条短信测试一下:

gammu sendsms TEXT 要接收短信的手机号码 -text "123"

收到123表示成功,接下来配置gammu-smsd

0x03 gammu-smsd的配置

首先我们运行mysql,根据官方文档内容建立数据库和用户

GRANT USAGE ON *.* TO 'smsd'@'localhost' IDENTIFIED BY '要设置的密码';

GRANT SELECT, INSERT, UPDATE, DELETE ON `smsd`.* TO 'smsd'@'localhost';

CREATE DATABASE smsd;

然后导入所下载的mysql.sql文件,版本一定要对应

mysql -u root smsd < mysql.sql

这里不加密码是因为安装mysql后自动使用unix_socket进行连接(mysql.user表中的plugin属性)
导入后编辑gammu-smsd配置文件/etc/gammu-smsdrc

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0
model =
connection = at115200
# Debugging
#logformat = textall

# SMSD configuration, see gammu-smsdrc(5)
[smsd
ReceiveFrequency = 5 #5秒接收一次短信
#PIN = 1234 有PIN码的写在这
service = sql
driver = native_mysql
# Increase for debugging information
User = smsd
Password = 你建立的用户的密码
PC = localhost
Database = smsd

# 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/

保存后启动

service gammu-smsd start

给A6上的卡号发送短信,5秒后进入mysql查看

use smsd;
select * from inbox;

如果有记录说明成功,现在开始配置自动转发。

0x04 自动转发的配置

这里主要借鉴https://xmsg.org/wordpress/2017/02/%E5%88%A9%E7%94%A8%E7%9F%AD%E4%BF%A1%E6%A8%A1%E5%9D%97%E9%85%8D%E5%90%88gammu%E5%AE%9E%E7%8E%B0%E7%94%A8%E7%9F%AD%E4%BF%A1%E7%AE%A1%E7%90%86linux%E6%9C%8D%E5%8A%A1%E5%99%A8/ 前人的足迹

通过官方文档,可以找到一条配置为RunOnReceive,此配置决定了当收到短信时执行的命令,这里我们建立一个有执行权限的sh文件

touch /home/pi/smsrecv.sh
chmod 755 /home/pi/smsrecv.sh

然后在配置文件中[smsd]下写入

RunOnReceive = /home/pi/smsrecv.sh

这样每次收到短信自动执行此脚本
脚本文件可以自己写,可以使用前人的写好的

利用短信模块配合gammu实现用短信管理树莓派

#!/bin/sh
#code xmsg.org
#20151015
#20151018
#20151019 1.0 正式版
#20170204 从现在开始它将被修改成一个短信控制系统
############################################################
#在本次SHELL中我还是学到了不少东西
#一 在if条件中各项内容之间的空格必不可少,不然执行就会出错。
#二 在一个逻辑块中(比如if块)中只有存在错误(比如我在执行脚
#   本时最后少写一个反引号)会引起整个块不被执行。
#三 初始化变量时变量名前一定不能加美元符号,在知道的情况下还
#   是会犯这种错误。
#四 虽然在脚本中使用空格分隔内容可以让内容更清晰,但初始化变
#   量的情况下[变量 等于 数据]这个过程中等于号前号一定不能
#   有空格。
#五 需要eval要小心使用,它在强大的同时可能引起安全问题。
############################################################
# !ip 获取本机的出口IP
# !pt 获取本机开放的端口
# !tcp 获取本机开放的TCP端口
# !ssh 启动SSH
# !sshoff 关闭SSH
# !rt 重启系统
# !so 清除转发
# !so localport localnetip localnetport 设置内网对外转发

#FULLMSG=$SMS_1_NUMBER
#FULLMSG="$FULLMSG"#
#手机号需要带国家代码,中国是+86
NUMBER=$SMS_1_NUMBER
#UNKNOWN ERROR
NOTFOUND="Unknown Error"
MASTERPHONE="你的手机号11位别搞错,别不写!"
#############短信白名单###########################################
#正式版需要有一个白名单这可以减少大量恶意攻击
#
########################################################

#echo FULLMSG >>;/tmp/all.log
for i in `seq $SMS_MESSAGES` ; do
#echo ---- >>/tmp/all.log
    varname="SMS_"$i"_TEXT"
    #echo $varname >>/tmp/all.log
    smspart=`eval echo '$'$varname`
    #echo $smspart >>/tmp/all.log
    FULLMSG="$FULLMSG$smspart"
done
#echo $FULLMSG >>/tmp/all.log

# $NUMBER中存放了手机号码
# $FULLMSG中存了完整短信内容

#echo resend a sms from "$NUMBER" >>/tmp/debug.log
#手机号中包含国家代码
if [ "$NUMBER" != "+86$MASTERPHONE" ]; then
#一般短信就转发给我自己吧。
        echo resend a sms "$FULLMSG".from."$NUMBER" >>/tmp/gate.log
        `eval "gammu-smsd-inject EMS $MASTERPHONE -unicode -text \"$FULLMSG.from.$NUMBER\""`
        exit 0
fi

if [ "$FULLMSG" = "!ip" ]; then
#获取外网IP
        EVALRET=`curl -k https://xmsg.org/tool/ip.php`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "$EVALRET"`
        exit 0
elif [ "$FULLMSG" = "!pt" ]; then
#获取本机端口
        EVALRET=`netstat -an|grep "^[tu].p .*0:\*.*"`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "$EVALRET"`
        exit 0
elif [ "$FULLMSG" = "!tcp" ]; then
#获取本机端口
        EVALRET=`netstat -an|grep "^tcp .*0:\*.*"`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "$EVALRET"`
        exit 0
elif [ "$FULLMSG" = "!ssh" ]; then
#启动SSH
        EVALRET=`sudo service ssh start`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "ssh start"`
        exit 0
elif [ "$FULLMSG" = "!sshoff" ]; then
#关闭SSH
        EVALRET=`sudo service ssh stop`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "ssh stop"`
        exit 0
elif [ "$FULLMSG" = "!rt" ]; then
#重启本机
        sudo reboot
        exit 0
elif [ "$FULLMSG" = "!so" ]; then
#清除转发
        sudo killall socat
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "socat killed"`
        exit 0;
elif [ "`expr substr \"$FULLMSG\" 1 3`" = "so " ]; then
#设置转发
        EVALRET=`eval "sudo /home/pi/bin/$FULLMSG"`
        #echo "sudo /home/pi/bin/$FULLMSG">>/tmp/a.log
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "$EVALRET"`
        exit 0;
else
        #echo `expr substr "$FULLMSG" 1 3` >>/tmp/a.log
        #echo "sudo /home/pi/bin/$FULLMSG">>/tmp/a.log
        EVALRET=`eval "$FULLMSG"`
        `gammu-smsd-inject EMS $MASTERPHONE -unicode -text "$EVALRET"`
        echo "$FULLMSG" >> /tmp/gate.log
        echo "$EVALRET" >> /tmp/gate.log
        exit 0
fi
exit 0

安装socat创建文件so

#!/bin/sh
if [ $# -eq 3 ]; then
        RET=`/usr/bin/socat TCP4-LISTEN:$1,reuseaddr,fork TCP4:$2:$3 >/dev/null 2>&1 &`
        echo "$2:$3->$1"
elif [ $# -eq 2 ]; then
        RET=`/usr/bin/socat TCP4-LISTEN:$1,reuseaddr,fork TCP4:$2:$1 >/dev/null 2>&1 &`
        echo "$2:$1->$1"
else
        echo args error
fi

然后修改完配置文件需要重启服务

service gammu-smsd restart

重启后随便找个验证码注册或找回的网站,或者使用其他手机发送上面脚本文件定义的的指令到这张卡上” alt=”” width=”750″ height=”1334″ class=”alignnone size-full wp-image-246″ />
至此短信网关搭建成功