欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)自動(dòng)化接收與處理手機(jī)驗(yàn)證碼

 更新時(shí)間:2025年03月27日 15:26:11   作者:傻啦嘿喲  
在移動(dòng)互聯(lián)網(wǎng)時(shí)代,短信驗(yàn)證碼已成為身份驗(yàn)證、賬號(hào)注冊(cè)等環(huán)節(jié)的重要安全手段,本文將介紹如何利用Python實(shí)現(xiàn)驗(yàn)證碼的自動(dòng)接收,識(shí)別與轉(zhuǎn)發(fā),需要的可以參考下

引言

在移動(dòng)互聯(lián)網(wǎng)時(shí)代,短信驗(yàn)證碼已成為身份驗(yàn)證、賬號(hào)注冊(cè)、登錄保護(hù)等環(huán)節(jié)的重要安全手段。然而,手動(dòng)輸入驗(yàn)證碼不僅效率低下,還容易出錯(cuò)。本文將介紹如何利用Python搭建一個(gè)短信轉(zhuǎn)發(fā)器,實(shí)現(xiàn)驗(yàn)證碼的自動(dòng)接收、識(shí)別與轉(zhuǎn)發(fā),讓你的工作生活更加便捷。

一、準(zhǔn)備工作

1.1 硬件與軟件需求

硬件:Android手機(jī)(需開啟開發(fā)者模式)、電腦

軟件:

  • Python環(huán)境(推薦Python 3.6+)
  • ADB工具(Android Debug Bridge)
  • 短信處理庫(kù)(如py-android-sms)
  • Web框架(如Flask)
  • 驗(yàn)證碼識(shí)別庫(kù)(如ddddocr)

1.2 環(huán)境配置

安裝ADB工具

ADB是Android開發(fā)者工具包的一部分,可通過以下方式安裝:

Windows:從developer.android.com/studio/releases/platform-tools

Mac/Linux:通過終端命令安裝:

# Mac
brew install android-platform-tools
# Ubuntu
sudo apt install android-tools-adb

安裝完成后,運(yùn)行adb version驗(yàn)證安裝是否成功。

  • 啟用手機(jī)開發(fā)者模式
  • 打開手機(jī)“設(shè)置”。
  • 進(jìn)入“關(guān)于手機(jī)”,連續(xù)點(diǎn)擊“版本號(hào)”7次,直到提示“開發(fā)者模式已啟用”。
  • 返回設(shè)置,進(jìn)入“開發(fā)者選項(xiàng)”,打開“USB調(diào)試”。
  • 連接手機(jī)與電腦
  • 將手機(jī)通過USB線連接電腦,運(yùn)行adb devices,若顯示設(shè)備ID則說明連接成功。

安裝Python依賴庫(kù)

pip install adb-shell flask ddddocr

二、核心功能實(shí)現(xiàn)

2.1 短信監(jiān)聽與獲取

使用ADB工具監(jiān)聽手機(jī)短信,提取短信內(nèi)容和發(fā)送者信息。

import subprocess
import re
 
def get_sms():
    try:
        # 執(zhí)行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:
            # 提取短信內(nèi)容
            body_start = message.index("body=") + len("body=")
            body_end = message.index(",", body_start)
            body = message[body_start:body_end]
            # 提取發(fā)送者號(hào)碼
            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"發(fā)送者: {address}, 內(nèi)容: {body}")

2.2 驗(yàn)證碼識(shí)別

利用正則表達(dá)式或ddddocr庫(kù)識(shí)別短信中的驗(yàn)證碼。

方法一:正則表達(dá)式

def extract_verification_code(sms_body):
    # 假設(shè)驗(yàn)證碼為6位數(shù)字
    code = re.search(r'\b\d{6}\b', sms_body)
    return code.group(0) if code else None

方法二:ddddocr庫(kù)

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 數(shù)據(jù)轉(zhuǎn)發(fā)

通過HTTP請(qǐng)求或WebSocket將識(shí)別出的驗(yàn)證碼轉(zhuǎn)發(fā)到指定的接收端(如Web應(yīng)用、API接口等)。

from flask import Flask, request
 
app = Flask(__name__)
 
@app.route('/forward', methods=['POST'])
def forward():
    data = request.json
    code = data.get('code')
    # 轉(zhuǎn)發(fā)驗(yàn)證碼到目標(biāo)地址
    # 例如:requests.post(url, json={'code': code})
    return {'status': 'success', 'message': f'驗(yàn)證碼 [code] 已轉(zhuǎn)發(fā)'}
 
if __name__ == '__main__':
    app.run(port=5000)

三、高級(jí)功能擴(kuò)展

3.1 多設(shè)備支持

通過多線程或異步編程,擴(kuò)展程序以支持多個(gè)Android設(shè)備同時(shí)工作。

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)
 
# 啟動(dòng)多個(gè)設(shè)備監(jiān)控線程
devices = ['device1', 'device2', 'device3']
for device in devices:
    thread = threading.Thread(target=monitor_device, args=(device,))
    thread.start()

3.2 安全增強(qiáng)

  • 身份驗(yàn)證:在轉(zhuǎn)發(fā)接口中添加Token驗(yàn)證,防止未授權(quán)訪問。
  • 數(shù)據(jù)加密:使用HTTPS協(xié)議傳輸數(shù)據(jù),確保通信安全。

3.3 性能優(yōu)化

  • 緩存機(jī)制:緩存已處理的短信ID,避免重復(fù)處理。
  • 異步處理:使用異步框架(如FastAPI)提高并發(fā)處理能力。

四、實(shí)戰(zhàn)案例:搭建完整的短信轉(zhuǎn)發(fā)系統(tǒng)

4.1 系統(tǒng)架構(gòu)

手機(jī)(短信接收) -> ADB工具(短信監(jiān)聽) -> Python腳本(解析與識(shí)別) -> Web接口(數(shù)據(jù)轉(zhuǎn)發(fā)) -> 目標(biāo)應(yīng)用

4.2 完整代碼示例

import subprocess
import re
from flask import Flask, request
import threading
 
app = Flask(__name__)
 
def get_sms(device_id=None):
    # 根據(jù)設(shè)備ID獲取短信(多設(shè)備支持)
    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')
    # 實(shí)現(xiàn)轉(zhuǎn)發(fā)邏輯
    print(f"驗(yàn)證碼 [code] 已轉(zhuǎn)發(fā)")
    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:
                    # 調(diào)用轉(zhuǎn)發(fā)接口
                    app.config['DEBUG'] = False
                    app.config['TESTING'] = False
                    with app.app_context():
                        forward_result = forward(json={'code': code})
                    print(forward_result)
 
if __name__ == '__main__':
    # 啟動(dòng)多個(gè)設(shè)備監(jiān)控線程
    devices = ['device1', 'device2']  # 替換為實(shí)際設(shè)備ID
    for device in devices:
        thread = threading.Thread(target=monitor_device, args=(device,))
        thread.start()
    app.run(port=5000)

4.3 運(yùn)行與測(cè)試

  • 將代碼保存為sms_forwarder.py。
  • 連接Android設(shè)備,確保ADB可識(shí)別。
  • 運(yùn)行腳本:python sms_forwarder.py。
  • 發(fā)送測(cè)試短信到手機(jī),觀察控制臺(tái)輸出和轉(zhuǎn)發(fā)結(jié)果。

五、總結(jié)與展望

本文介紹了如何使用Python搭建短信轉(zhuǎn)發(fā)器,實(shí)現(xiàn)驗(yàn)證碼的自動(dòng)接收、識(shí)別與轉(zhuǎn)發(fā)。通過結(jié)合ADB工具、短信處理庫(kù)和Web框架,我們構(gòu)建了一個(gè)高效、穩(wěn)定的系統(tǒng)。未來,可以進(jìn)一步擴(kuò)展功能,如支持更多類型的驗(yàn)證碼識(shí)別、添加圖形界面、實(shí)現(xiàn)云端部署等,讓短信轉(zhuǎn)發(fā)器更加智能、易用。

到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)化接收與處理手機(jī)驗(yàn)證碼的文章就介紹到這了,更多相關(guān)Python驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3爬取英雄聯(lián)盟英雄皮膚大圖實(shí)例代碼

    Python3爬取英雄聯(lián)盟英雄皮膚大圖實(shí)例代碼

    這篇文章主要介紹了Python3爬取英雄聯(lián)盟英雄皮膚大圖的實(shí)例代碼,文中較詳細(xì)的給大家介紹了爬蟲思路及完整代碼,需要的朋友可以參考下
    2018-11-11
  • Python??處理?Pandas?DataFrame?中的行和列

    Python??處理?Pandas?DataFrame?中的行和列

    這篇文章主要介紹了Python處理Pandas?DataFrame中的行和列,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • python讀取xlsx的方法

    python讀取xlsx的方法

    今天小編就為大家分享一篇python讀取xlsx的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Python檢查CPU型號(hào)并彈出警告信息

    使用Python檢查CPU型號(hào)并彈出警告信息

    本教程將指導(dǎo)你如何編寫一個(gè)Python程序,該程序能夠在啟動(dòng)時(shí)檢查計(jì)算機(jī)的CPU型號(hào),如果檢測(cè)到CPU型號(hào)包含“I3”,則會(huì)彈出一個(gè)警告窗口,感興趣的小伙伴跟著小編一起來看看吧
    2024-12-12
  • 介紹Python的Django框架中的QuerySets

    介紹Python的Django框架中的QuerySets

    這篇文章主要介紹了Python的Django框架中的QuerySets,QuerySet是Django中的一個(gè)內(nèi)置對(duì)象列表,經(jīng)常被用于數(shù)據(jù)庫(kù)操作,需要的朋友可以參考下
    2015-04-04
  • Pandas使用query()優(yōu)雅的查詢實(shí)例

    Pandas使用query()優(yōu)雅的查詢實(shí)例

    本文主要介紹了Pandas使用query()優(yōu)雅的查詢實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python+OpenCV實(shí)現(xiàn)基本的圖像處理操作

    Python+OpenCV實(shí)現(xiàn)基本的圖像處理操作

    說到圖像處理,那必然要提到opencv模塊了。本文將從最基本的opencv模塊在圖像的基本操作上說起,利用Python+OpenCV實(shí)現(xiàn)圖像的讀取保存等,感興趣的可以了解一下
    2022-07-07
  • Numpy中矩陣matrix讀取一列的方法及數(shù)組和矩陣的相互轉(zhuǎn)換實(shí)例

    Numpy中矩陣matrix讀取一列的方法及數(shù)組和矩陣的相互轉(zhuǎn)換實(shí)例

    今天小編就為大家分享一篇Numpy中矩陣matrix讀取一列的方法及數(shù)組和矩陣的相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中的map()、apply()、applymap()的區(qū)別小結(jié)

    Python中的map()、apply()、applymap()的區(qū)別小結(jié)

    map()、apply()和applymap()方法是Python中常用的轉(zhuǎn)換方法,,輸出的結(jié)果及類型完全取決于作為給定方法的參數(shù)的函數(shù),本文就來介紹一下這三種方法的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Python實(shí)現(xiàn)Excel數(shù)據(jù)同步到飛書文檔

    Python實(shí)現(xiàn)Excel數(shù)據(jù)同步到飛書文檔

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)自動(dòng)將Excel數(shù)據(jù)同步到飛書文檔的末尾,并添加時(shí)間戳,感興趣的小伙伴可以參考一下
    2025-02-02

最新評(píng)論