diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000..62a8c30 Binary files /dev/null and b/__pycache__/app.cpython-311.pyc differ diff --git a/__pycache__/flashSMS.cpython-311.pyc b/__pycache__/flashSMS.cpython-311.pyc new file mode 100644 index 0000000..62f2c80 Binary files /dev/null and b/__pycache__/flashSMS.cpython-311.pyc differ diff --git a/__pycache__/tgMesaage.cpython-311.pyc b/__pycache__/tgMesaage.cpython-311.pyc new file mode 100644 index 0000000..a995a9b Binary files /dev/null and b/__pycache__/tgMesaage.cpython-311.pyc differ 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