树莓派上的转发脚本 smsForward.py 代码全览 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 40 41 42 43 import sysimport requestsfrom pyDes import des, PAD_PKCS5, ECBdef encrypt (text ): key = '19960621' b_text = text.encode() des_obj = des(key, ECB, key, padmode=PAD_PKCS5) secret_bytes = des_obj.encrypt(b_text) return secret_bytes.hex () def send_message (name, content ): datas = {"name" : name, "content" : content} requests.post("http://119.23.211.66:8080/putmessage" , data=datas) def read_file (path ): data = '' with open (path, 'r' , encoding='utf-8' ) as f: for line in f.readlines(): line = line.strip() data += line return data if __name__ == '__main__' : file_name = sys.argv[1 ] content = read_file("/var/spool/gammu/inbox/" + file_name) file_name = file_name + "_0805" send_message(encrypt(file_name), encrypt(content))
主要代码分析
gammu-smsd模块收到短信后触发smsForward.Pytorch脚本,其参数就是短信文件名,故可以通过文件名拿到短信内容,同时文件名中包含了时间及发信人等信息。
DES加密 客户端与服务端皆采用了DES对称加密,防止内容被曝光,客户端Python脚本使用pyDes
进行加密,加密结束后返回16进制的字符串内容。
post请求 通过requests
包发起post请求,有两个参数,name
穿文件名,content
穿短信内容
过滤错误请求 因为此接口未做权限校验,为了防止其他人随意发送乱码攻击接口,对文件名加上_0805
后再加密,后端解密的内容如果没有这个校验值就不存进数据库。