From 84dabf919853455d93fe76aa4c029724345547a7 Mon Sep 17 00:00:00 2001 From: eric Date: Thu, 4 May 2023 13:14:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/app.cpython-311.pyc | Bin 0 -> 2669 bytes __pycache__/flashSMS.cpython-311.pyc | Bin 0 -> 5003 bytes __pycache__/tgMesaage.cpython-311.pyc | Bin 0 -> 769 bytes app.py | 35 +++++++++ flashSMS.py | 95 ++++++++++++++++++++++++ tgMesaage.py | 16 +++++ viewSMS.py | 100 ++++++++++++++++++++++++++ 7 files changed, 246 insertions(+) create mode 100644 __pycache__/app.cpython-311.pyc create mode 100644 __pycache__/flashSMS.cpython-311.pyc create mode 100644 __pycache__/tgMesaage.cpython-311.pyc create mode 100644 app.py create mode 100644 flashSMS.py create mode 100644 tgMesaage.py create mode 100644 viewSMS.py diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62a8c307ba555c3e89a95a0d18f873fd90de5ce3 GIT binary patch literal 2669 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 b0>pWVL!*}1c@ literal 0 HcmV?d00001 diff --git a/__pycache__/tgMesaage.cpython-311.pyc b/__pycache__/tgMesaage.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a995a9b26a700a01ae1c9ba99a8041b7fd6b36a5 GIT binary patch literal 769 zcmZWn&rcIU6n?YY?QWrf@+0v8iHQ-ckuGBT10tFVjWH+(D;jzsr8`+FZMV!!1)Db6 zgCQO~;6+W)cpz$wCVJC^_&-3xq1l9!2K3eh4-F^ZQfx53H~YQs?aX`c%j~{uYij|t z$+3j-n*e-wlfNb%k^NpI&%pqLWFgszBuNbE5hNvpBp@LFa*s}>u|w0m$Ygx>R}iq8 zRIs8V8FED~L&Z}jYfzTf!0?o1M5XLmgIC^);sbH4%l#%VD{qm1Xyz5K0SPz*1ccI@ z35NIIQv_yEZvvL(8CW6#b*j`mFGPWl>Uye>2@0B}CQIdl7BlrZOOysfp=dZX5*Z#I zjm6?qu}cr4=Hz1Jc4RisS@dowdZRcvn+#vOw>+E}Un;c>M#C3Fkw|!Gq|~Exnm2Ay z&Qm76nx0RI*^Dt(^7ae5EXImGDDvm0FT3mZ?&~*u-=6Mmy!^4TzPGv(kR6TD#UkZ` zJF-cIqZC*sF9NEg<{I4`buPu}G|M`Qu;@bGQIFa?9=Ew87jcU)uHuZ-4LdlePjkw+ zPFW_cPf)%ftb)#SJZ%|N7bfaVq0V68q2qOR-!WMSR=XdKTL?B({paoL)s_)EUiF_s z<~w0eR9ibYwfJfr0oP}>5xA(Y598+xGW8Ca%|O62T3vZL|IC zme#+m^=}?q^?IHAaOSh_3-Iw|3}n0#kI3XG^WfV_-- g{tV!Z literal 0 HcmV?d00001 diff --git a/app.py b/app.py new file mode 100644 index 0000000..ddcc82b --- /dev/null +++ b/app.py @@ -0,0 +1,35 @@ +from typing import Union +from fastapi import FastAPI,Header +from urllib.parse import unquote +from flashSMS import sendFlash +from tgMesaage import sendTg + +app = FastAPI() + + +@app.get("/") +#def read_root(): + # return {"Hello": "World"} +def read_items(appid: Union[str, None] = Header(default=None),bid: Union[str, None] = Header(default=None),requestid: Union[str, None] = Header(default=None),uid: Union[str, None] = Header(default=None)): + print("console :,","appid", appid,"bid", bid,"requestid", requestid,"uid", uid) + return {"appid": appid,"bid": bid,"requestid": requestid,"uid": uid} + +# 微信对话-用户输入 +@app.get("/input") +async def getphonenum(inputArguments: Union[str, None] = None,appid: Union[str, None] = Header(default=None),bid: Union[str, None] = Header(default=None),requestid: Union[str, None] = Header(default=None),uid: Union[str, None] = Header(default=None)): + print('inputArguments',inputArguments) + # 要处理url编码问题decode + try: + inputArguments = unquote(inputArguments, 'utf-8') + except: + inputArguments='' + phonenumber='13243889782' + phonenumber='13243889782' + warntext='[异度世界],加群验证码:3399' + sendTg(f'用户手机号{phonenumber},开始发送验证码') + # 发送闪信 + sendFlash(phonenumber,warntext) + # uid:唯一标识用户的openid + print("appid", appid,"bid",bid,"requestid", requestid,"uid", uid) + # 存储uid和手机号 + return {"appid": appid,"bid": bid,"requestid": requestid,"uid": uid,'inputArguments':inputArguments} \ No newline at end of file diff --git a/flashSMS.py b/flashSMS.py new file mode 100644 index 0000000..77947e2 --- /dev/null +++ b/flashSMS.py @@ -0,0 +1,95 @@ +import serial +import time +from tgMesaage import sendTg + +#手机号 +phonenumber='' +# 短信内容 +warntext='' + +# 在test(US2)模式下需要用16进制转换电话和中文短信 +# 转换为hex16进制 +def Unicode2HexStr(Unicde_Str): + Hex_Str = "" + for i in range(0, len(Unicde_Str)): + Hex_Str += (hex(ord(Unicde_Str[i])).replace('0x','').zfill(4)) + return Hex_Str + +def decode2HexStr(Unicde_Str): + newText=bytes.fromhex(Unicde_Str).decode('utf-16-be') + print(newText) + return newText + + + +def sendSMS(phonenumber,warntext): + modem.write(("AT"+"\r\n").encode()) + print(modem.readline()) + time.sleep(0.5) + + modem.write(("AT+CMGF=1"+"\r\n").encode()) + print(modem.readline()) + time.sleep(0.5) + + modem.write(("AT+CSCS="+'"UCS2"'+"\r\n").encode()) + print(modem.readline()) + time.sleep(0.5) + + + modem.write(("AT+CSCA?"+"\r\n").encode()) + print(modem.readline()) + time.sleep(0.5) + + #尾数如果是24,则短消息不会保存,也不会提示号码,可用来短信轰炸机 + modem.write(("AT+CSMP=17,167,0,24"+"\r\n").encode()) + # modem.write(("AT+CSMP=17,167,0,25"+"\r\n").encode()) + print(modem.readline()) + time.sleep(0.5) + + #modem.write('AT+CMGS="' + convert2Unicode( str(phonenumber) ) + '"\r\n') + newNum=Unicode2HexStr(phonenumber) + print(newNum) + modem.write(("AT+CMGS="+'"%s"'%(newNum)+"\r\n").encode()) + print(modem.readline()) + time.sleep(1) + + + #modem.write(Unicode2HexStr(warntext.decode('utf-8'))) + modem.write((Unicode2HexStr(warntext)).encode()) + print(modem.readline()) + #print(Unicode2HexStr(u"我爱你")) + time.sleep(1) + + # 构造 HEX 1A + modem.write((chr(26)).encode()) + print(modem.readline()) + time.sleep(1) + + line = modem.readline() + print(modem.readline()) + print('end---') + # 触发tg消息提醒 + sendTg('4g模块短信发送成功,succsess') + # if line.startswith("+CMGS"): + # print ("已成功发送") + # return True + # else: + # print ("发送遇到问题,请检查控制模块") + # modem.close() + # return False + + + +def sendFlash(phonenumber,warntext): + try: + modem = serial.Serial(port='/dev/ttyUSB2', baudrate=9600) + print ("短信助手硬件USB接口已连接成功...正在启动") + # phonenumber=input('请输入phonenumber: ') + # warntext=input('warntext: ') + sendSMS(phonenumber,warntext) + modem.close() + except Exception as e: + print(e) + print ("请检查短信模块是否插上usb 或 确定端口号是否正确") + # 触发tg消息提醒 + sendTg('4g模块短信发送失败,请检查错误') \ No newline at end of file diff --git a/tgMesaage.py b/tgMesaage.py new file mode 100644 index 0000000..51375ad --- /dev/null +++ b/tgMesaage.py @@ -0,0 +1,16 @@ +import time +import requests + + +# bot发消息到tg群组 +def sendTg(message): + baseUrl="https://api.telegram.org/bot" + toekn="558659722:AAENA3v8gKq7R7_nsr8V58Iu-_Z6BWx2SCw" + chat_id="-861577609" + text=message + url=f'{baseUrl}{toekn}/sendMessage?chat_id={chat_id}&text={text}' + try: + r = requests.get(url) + except: + print('请检查网络代理') + # https://api.telegram.org/bot558659722:AAENA3v8gKq7R7_nsr8V58Iu-_Z6BWx2SCw/sendMessage?chat_id=-861577609&text=1234 \ No newline at end of file diff --git a/viewSMS.py b/viewSMS.py new file mode 100644 index 0000000..d349deb --- /dev/null +++ b/viewSMS.py @@ -0,0 +1,100 @@ +import serial +import time +import requests + +def Unicode2HexStr(Unicde_Str): + Hex_Str = "" + for i in range(0, len(Unicde_Str)): + Hex_Str += (hex(ord(Unicde_Str[i])).replace('0x', '').zfill(4)) + return Hex_Str + + +def decode2HexStr(Unicde_Str): + strText = (bytes.fromhex(Unicde_Str)).decode('utf-16-be') + # print(strText) + return strText + +# bot发消息到tg群组 +def sendTg(message): + baseUrl="https://api.telegram.org/bot" + toekn="558659722:AAENA3v8gKq7R7_nsr8V58Iu-_Z6BWx2SCw" + chat_id="-861577609" + text=message + url=f'{baseUrl}{toekn}/sendMessage?chat_id={chat_id}&text={text}' + try: + r = requests.get(url) + except: + print('请检查网络代理') + # https://api.telegram.org/bot558659722:AAENA3v8gKq7R7_nsr8V58Iu-_Z6BWx2SCw/sendMessage?chat_id=-861577609&text=1234 + +def deleteALLsms(): + #删除所有短信 + modem.write(("AT+CMGD=1,4"+"\r\n").encode()) + print(modem.readline()) + time.sleep(1) + print(modem.readline()) + print('删除所有短信完成') +def deleteIndexsms(index): + #删除指定短信 + modem.write((f"AT+CMGD={index}\r\n").encode()) + print(modem.readline()) + time.sleep(1) + print(modem.readline()) + print(f'删除{index}完成') + +def viewSMS(): + modem.write(("AT"+"\r\n").encode()) + print(modem.readline()) + time.sleep(1) + print(modem.readline()) + modem.write(("AT+CMGF=1"+"\r\n").encode()) + print(modem.readline()) + time.sleep(1) + print(modem.readline()) + modem.write(("AT+CMGL="+'"ALL"'+"\r\n").encode()) + print(modem.readline()) # 命令显示 + + nowIndex=-1 + while True: + itext = (modem.readline()[:-2]).decode('utf-8') # [:-2]==>先删除\r\n + if itext.startswith("+CMGL"): # spilt解析手机号码 + textArr=itext.split(",") + # 手机号 + phoneNUm=textArr[2] + print(phoneNUm) + # 短信索引 + smsindex=(textArr[0]).split(":")[1] + nowIndex=int(smsindex) + print(smsindex) + + print(itext) + sendTg(itext) + elif itext == "OK": + print('查询短信列表完成') + if nowIndex>0 or nowIndex==0: + deleteIndexsms(str(nowIndex)) + # time.sleep(5) + break + else : + if len(itext)>0: + try: + print(decode2HexStr(((itext)))) + sendTg(decode2HexStr(((itext)))) + except: + # print(itext) + sendTg(itext) + modem.close() #关闭终端 + # time.sleep(1) + + + +while True: + try: + modem = serial.Serial(port='/dev/ttyUSB2', baudrate=9600) + print("短信助手硬件USB接口已连接成功...正在启动") + viewSMS() + # time.sleep(1) + except Exception as e: + print(e) + print("请检查短信模块是否插上usb 或 确定端口号是否正确") + time.sleep(60) #每30s检测1次短信 \ No newline at end of file