前言
之前有過段時間在想淘汰的android機怎麼廢物利用起來,也搜索過類似的文章做鬧鐘、做相框、做網絡視頻監控。我覺得這都不能發揮一個手機的功能所以一直沒着手。但最近我有了新的想法把廢舊的android機做成短信服務器提供服務(類似於騰訊、阿里等的短信包)用於消息推送提醒。
正文
原理說明
- 手機(android5.0及以上)上安裝termux、termux-api (提供linux環境、發短信命令)
- 實現內網穿透,以達到外網控制手機。說說的內網穿透:作者有臺騰訊服務器,使用rabbitmq實現。後來想想可以簡單點是不是直接ssh代理就可以。
實現過程
開發環境
- 手機上安裝termux 、termux-api(請使用 com.termux.api_0.31.apk版本由於google協議要求之後的版本去除發短信功能)。安裝參考Termux 高級終端安裝使用配置教程
安裝完成之後可以測試發短信命令
termux-sms-send -n 10010 helloworld
- python 環境安裝
pkg install python
pip install pika #rabbitmq python庫
到此開發環境基本完成
代碼開發
- 手機端開發完成連接雲服務器,監聽命令
coding:utf-8
import pika
import os
credentials=pika.PlainCredentials('用戶名', '密碼')
parameters = pika.ConnectionParameters(host='遠端服務地址',
port=5672, virtual_host='/', credentials=credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
'''消息的回調方法'''
print(" [x] Received %r" % body)
cmds = body.decode().split('|') #協議報文
if len(cmds)>0 and cmds[0]=='sms':
os.system('termux-sms-send -n %s %s >/dev/null 2>&1' % (cmds[1], cmds[2])) # 發短信
elif len(cmds)>0 and cmds[0]=='call':
os.system('termux-telephony-call %s >/dev/null 2>&1' % (cmds[1])) # 打電話
print(" [x] over")
channel.basic_consume('hello', callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
- 消息發送端開發
# -*- coding: utf-8 -*-
import pika
import random
class smsServer:
'''雲端發送消息報文'''
def __init__(self):
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
self.channel = self.connection.channel()
self.channel.queue_declare(queue='hello')
def sms(self, tel, body):
msg='sms|'+str(tel)+'|'+body
self.channel.basic_publish(exchange='', routing_key='hello', body=msg)
print(" [x] Sent: %s" % msg)
self.connection.close()
def call(self, tel):
msg='call|'+str(tel)
self.channel.basic_publish(exchange='', routing_key='hello', body=msg)
print(" [x] Sent: %s" % msg)
self.connection.close()
if __name__=='__main__':
send = smsServer()
# send.sms('18679033731', '你好')
send.call('18679033731')
到此功能都以完成。
其它
撥打電話接口termux-telephony-call只能撥打電話,但我並沒有發現掛斷電話的方法。比如發送keyevent或模擬觸屏等。所以如果想實現電話炸彈那種接通自動掛,可以root手機後使用input命令(已經實現電話砸蛋功能,但過程有點複雜)。
結尾
動手寫之前也琢磨了很久,一篇好的文章怎麼讓讀者看的舒服。想了很久依然沒有找到答案,所以文章內容可能會讓你一頭霧水請多多包含。如有你有興趣或有疑問可以微信公衆號聯繫。