【Python】搭建socket 服务器同步手机验证码到电脑

下面是一个关于如何使用您提供的 Python 代码创建并运行一个验证码提取服务器的简单教程。这个教程面向初学者,逐步解释代码的功能并指导如何部署它。


教程:创建并运行一个验证码提取服务器

这个教程将指导您如何使用 Python 创建一个简单的 socket 服务器,用于接收文本数据,提取其中的验证码(4-8位数字),并将其复制到剪贴板,同时显示桌面通知。我们还将介绍如何安装依赖、运行代码并发布使用。

功能概述

该程序是一个基于 socket 的服务器,可以:

  1. 监听指定端口(默认5000)的传入连接。

  2. 接收客户端发送的文本数据。

  3. 从文本中提取第一个4-8位数字(验证码)。

  4. 将提取的验证码复制到剪贴板。

  5. 显示一个桌面通知,告知用户结果。

前置条件

在运行代码之前,您需要准备以下内容:

  • 操作系统: Windows、Linux 或 macOS。

  • Python 版本: Python 3.6 或更高版本。

  • 依赖库: 需要安装 pyperclip 和 plyer 库。

步骤 1:安装依赖

打开终端或命令行,运行以下命令来安装所需的库:

pip install pyperclip plyer
  • pyperclip: 用于操作剪贴板。

  • plyer: 用于显示桌面通知。

步骤 2:理解代码

以下是代码的主要组成部分:

  1. 导入库:

    import socket, re, pyperclip, threading
    • socket: 用于创建网络服务器。

    • re: 用于正则表达式匹配数字。

    • pyperclip: 用于复制文本到剪贴板。

    • threading: 用于异步显示通知。

  2. SocketServer 类:

    • __init__: 初始化服务器,绑定到指定端口(例如 5000)。

    • start: 启动服务器,接受客户端连接并处理数据。

    • extract_first_long_number: 使用正则表达式提取4-8位数字。

    • show_toast_notification: 异步显示桌面通知。

    • copy_verification_code: 提取验证码并复制到剪贴板。

  3. 主函数:

    def main():
        SocketServer(5000).start()

    创建并启动一个监听在端口 5000 的服务器。

步骤 3:保存代码

将代码保存为一个 .py 文件,例如 socket_server.py。

完整代码如下:

import socket, re, pyperclip, threading

class SocketServer:
    def __init__(self, port):
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.s.bind(('0.0.0.0', port))
        self.s.listen(5)
        print(f"Server on port {port}...")

    def start(self):
        while True:
            c, addr = self.s.accept()
            print(f"设备地址 {addr}")
            data = c.recv(1024)
            text = data.decode('utf-8') if data else ""
            print(f"接收数据: {text}")
            result = self.copy_verification_code(text)
            c.send(str(result).encode('utf-8'))
            c.close()

    def extract_first_long_number(self, text):
        """提取字符串中的第一个符合条件的数字"""
        pattern = r'(?<!\d)\d{4,8}(?!\d)'
        match = re.search(pattern, text)
        if match:
            return match.group(0)
        return None

    def show_toast_notification(self, title, message):
        """显示桌面通知(异步)"""
        from plyer import notification
        def _show():
            try:
                notification.notify(title=title, message=message, timeout=2)
            except Exception as e:
                print(f"Failed to show notification: {e}")

        threading.Thread(target=_show).start()

    def copy_verification_code(self, text):
        """提取并复制验证码到剪贴板,并显示通知"""
        number = self.extract_first_long_number(text)
        if number:
            pyperclip.copy(number)
            print(f"已复制到剪贴板: {number}")
            self.show_toast_notification("已复制验证码", number)
            return number
        else:
            print("未找到符合条件的数字字符串")
            self.show_toast_notification("复制失败", "请检查短信验证码")
            return None

def main():
    SocketServer(5000).start()

if __name__ == "__main__":
    main()

步骤 4:运行服务器

  1. 打开终端,进入代码文件所在目录。

  2. 运行以下命令:

    python socket_server.py
  3. 您将看到输出:

    Server on port 5000...

    这表示服务器已启动并监听在端口 5000。

步骤 5:测试服务器

您需要一个客户端来发送数据给服务器进行测试。以下是一个简单的客户端代码示例:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5000))  # 本地测试使用 127.0.0.1
client.send("Your code is 123456".encode('utf-8'))
response = client.recv(1024).decode('utf-8')
print(f"Server response: {response}")
client.close()
  1. 将此代码保存为 client.py。

  2. 在另一个终端运行:

    python client.py
  3. 服务器将输出:

    设备地址 ('127.0.0.1', xxxx)
    接收数据: Your code is 123456
    已复制到剪贴板: 123456

    同时,您的剪贴板将包含 123456,并显示一个桌面通知。

步骤 6:发布和使用

  1. 本地使用: 如果只在本地使用,直接运行服务器即可。

  2. 远程部署:

    • 将代码部署到一台具有公网 IP 的服务器上。

    • 修改 client.connect(('127.0.0.1', 5000)) 中的 IP 为服务器的公网 IP。

    • 确保防火墙允许 5000 端口的传入连接(例如,在 Linux 上运行 sudo ufw allow 5000)。

  3. 安全性建议:

    • 当前代码未加密通信,建议添加 SSL/TLS。

    • 可添加身份验证,防止未经授权的访问。

示例场景

假设您有一个设备(如手机)接收验证码短信,您可以通过脚本将短信内容发送到此服务器,服务器会自动提取验证码并复制到剪贴板,方便您粘贴使用。

故障排查

  • 依赖未安装: 确保运行 pip install pyperclip plyer。

  • 端口被占用: 更改 SocketServer(5000) 中的端口号,例如 SocketServer(5001)。

  • 通知不显示: 检查 plyer 是否正确安装,且操作系统支持通知。


希望这个教程对您有帮助!如果您需要进一步优化代码(例如添加加密)或有其他问题,请告诉我。祝您的项目成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值