廢舊android手機變短信服務器

前言

之前有過段時間在想淘汰的android機怎麼廢物利用起來,也搜索過類似的文章做鬧鐘、做相框、做網絡視頻監控。我覺得這都不能發揮一個手機的功能所以一直沒着手。但最近我有了新的想法把廢舊的android機做成短信服務器提供服務(類似於騰訊、阿里等的短信包)用於消息推送提醒。

正文

原理說明

  1. 手機(android5.0及以上)上安裝termux、termux-api (提供linux環境、發短信命令)
  2. 實現內網穿透,以達到外網控制手機。說說的內網穿透:作者有臺騰訊服務器,使用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命令(已經實現電話砸蛋功能,但過程有點複雜)。

結尾

動手寫之前也琢磨了很久,一篇好的文章怎麼讓讀者看的舒服。想了很久依然沒有找到答案,所以文章內容可能會讓你一頭霧水請多多包含。如有你有興趣或有疑問可以微信公衆號聯繫。

代碼和app請公衆號回覆[短信服務器]

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章