Python实战:搭建短信转发器,实现验证码自动接收与处理

简介: 在移动互联网时代,短信验证码是重要的安全手段,但手动输入效率低且易出错。本文介绍如何用Python搭建短信转发器,实现验证码自动接收、识别与转发。通过ADB工具监听短信、正则表达式或ddddocr库提取验证码,并利用Flask框架转发数据。系统支持多设备运行,具备安全性与性能优化功能,适合自动化需求场景。未来可扩展更多功能,提升智能化水平。

引言
在移动互联网时代,短信验证码已成为身份验证、账号注册、登录保护等环节的重要安全手段。然而,手动输入验证码不仅效率低下,还容易出错。本文将介绍如何利用Python搭建一个短信转发器,实现验证码的自动接收、识别与转发,让你的工作生活更加便捷。
浅谈隧道代理的动态IP切换机制与实现原理 (10).png

一、准备工作
1.1 硬件与软件需求
硬件:Android手机(需开启开发者模式)、电脑
软件:

Python环境(推荐Python 3.6+)
ADB工具(Android Debug Bridge)
短信处理库(如py-android-sms)
Web框架(如Flask)
验证码识别库(如ddddocr)
1.2 环境配置
安装ADB工具
ADB是Android开发者工具包的一部分,可通过以下方式安装:

Windows:从https://developer.android.com/studio/releases/platform-tools下载安装包。
Mac/Linux:通过终端命令安装:

Mac

brew install android-platform-tools

Ubuntu

sudo apt install android-tools-adb
安装完成后,运行adb version验证安装是否成功。

启用手机开发者模式
打开手机“设置”。
进入“关于手机”,连续点击“版本号”7次,直到提示“开发者模式已启用”。
返回设置,进入“开发者选项”,打开“USB调试”。
连接手机与电脑
将手机通过USB线连接电脑,运行adb devices,若显示设备ID则说明连接成功。
安装Python依赖库

pip install adb-shell flask ddddocr

二、核心功能实现
2.1 短信监听与获取
使用ADB工具监听手机短信,提取短信内容和发送者信息。

import subprocess
import re

def get_sms():
try:

    # 执行ADB命令获取短信
    result = subprocess.run(
        ["adb", "shell", "content", "query", "--uri", "content://sms/inbox", "--projection", "address,body,date"],
        capture_output=True,
        text=True
    )
    return result.stdout
except Exception as e:
    print(f"获取短信失败: {e}")
    return None

def parse_sms(sms_data):
messages = sms_data.split("\n")
for message in messages:
if "body=" in message:

        # 提取短信内容
        body_start = message.index("body=") + len("body=")
        body_end = message.index(",", body_start)
        body = message[body_start:body_end]
        # 提取发送者号码
        address_start = message.index("address=") + len("address=")
        address_end = message.index(",", address_start)
        address = message[address_start:address_end]
        yield address, body

示例:获取并解析短信

sms_data = get_sms()
if sms_data:
for address, body in parse_sms(sms_data):
print(f"发送者: {address}, 内容: {body}")
2.2 验证码识别
利用正则表达式或ddddocr库识别短信中的验证码。

方法一:正则表达式

def extract_verification_code(sms_body):

# 假设验证码为6位数字
code = re.search(r'\b\d{6}\b', sms_body)
return code.group(0) if code else None

方法二:ddddocr库

import ddddocr

def ocr_verification_code(image_path):
ocr = ddddocr.DdddOcr()
with open(image_path, 'rb') as f:
image = f.read()
return ocr.classification(image)
2.3 数据转发
通过HTTP请求或WebSocket将识别出的验证码转发到指定的接收端(如Web应用、API接口等)。

from flask import Flask, request

app = Flask(name)

@app.route('/forward', methods=['POST'])
def forward():
data = request.json
code = data.get('code')

# 转发验证码到目标地址
# 例如:requests.post(url, json={'code': code})
return {'status': 'success', 'message': f'验证码 {code} 已转发'}

if name == 'main':
app.run(port=5000)
三、高级功能扩展
3.1 多设备支持
通过多线程或异步编程,扩展程序以支持多个Android设备同时工作。

import threading

def monitor_device(device_id):
while True:
sms_data = get_sms(device_id)
if sms_data:
for address, body in parse_sms(sms_data):
code = extract_verification_code(body)
if code:
forward(code)

启动多个设备监控线程

devices = ['device1', 'device2', 'device3']
for device in devices:
thread = threading.Thread(target=monitor_device, args=(device,))
thread.start()

3.2 安全增强
身份验证:在转发接口中添加Token验证,防止未授权访问。
数据加密:使用HTTPS协议传输数据,确保通信安全。
3.3 性能优化
缓存机制:缓存已处理的短信ID,避免重复处理。
异步处理:使用异步框架(如FastAPI)提高并发处理能力。
四、实战案例:搭建完整的短信转发系统
4.1 系统架构
手机(短信接收) -> ADB工具(短信监听) -> Python脚本(解析与识别) -> Web接口(数据转发) -> 目标应用

4.2 完整代码示例
import subprocess
import re
from flask import Flask, request
import threading

app = Flask(name)

def get_sms(device_id=None):

# 根据设备ID获取短信(多设备支持)
command = ["adb", "shell", "content", "query", "--uri", "content://sms/inbox", "--projection", "address,body,date"]
if device_id:
    command.insert(1, f"-s {device_id}")
result = subprocess.run(command, capture_output=True, text=True)
return result.stdout

def parse_sms(sms_data):
messages = sms_data.split("\n")
for message in messages:
if "body=" in message:
body_start = message.index("body=") + len("body=")
body_end = message.index(",", body_start)
body = message[body_start:body_end]
address_start = message.index("address=") + len("address=")
address_end = message.index(",", address_start)
address = message[address_start:address_end]
yield address, body

def extract_verification_code(sms_body):
code = re.search(r'\b\d{6}\b', sms_body)
return code.group(0) if code else None

@app.route('/forward', methods=['POST'])
def forward():
data = request.json
code = data.get('code')

# 实现转发逻辑
print(f"验证码 {code} 已转发")
return {'status': 'success'}

def monitor_device(device_id):
while True:
sms_data = get_sms(device_id)
if sms_data:
for address, body in parse_sms(sms_data):
code = extract_verification_code(body)
if code:

                # 调用转发接口
                app.config['DEBUG'] = False
                app.config['TESTING'] = False
                with app.app_context():
                    forward_result = forward(json={'code': code})
                print(forward_result)

if name == 'main':

# 启动多个设备监控线程
devices = ['device1', 'device2']  # 替换为实际设备ID
for device in devices:
    thread = threading.Thread(target=monitor_device, args=(device,))
    thread.start()
app.run(port=5000)

4.3 运行与测试
将代码保存为sms_forwarder.py。
连接Android设备,确保ADB可识别。
运行脚本:python sms_forwarder.py。
发送测试短信到手机,观察控制台输出和转发结果。
五、总结与展望
本文介绍了如何使用Python搭建短信转发器,实现验证码的自动接收、识别与转发。通过结合ADB工具、短信处理库和Web框架,我们构建了一个高效、稳定的系统。未来,可以进一步扩展功能,如支持更多类型的验证码识别、添加图形界面、实现云端部署等,让短信转发器更加智能、易用。

目录
相关文章
|
3月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
498 7
|
3月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
3月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
395 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
3月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
3月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
3月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
152 12
|
4月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
838 19
|
3月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
422 1
|
3月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
740 1
|
4月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
640 7

推荐镜像

更多