云计算百科
云计算领域专业知识百科平台

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

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


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

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

功能概述

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

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

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

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

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

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

  • 前置条件

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

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

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

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

    步骤 1:安装依赖

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

    pip install pyperclip plyer

    • pyperclip: 用于操作剪贴板。

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

    步骤 2:理解代码

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

  • 导入库:

    import socket, re, pyperclip, threading

    • socket: 用于创建网络服务器。

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

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

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

  • SocketServer 类:

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

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

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

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

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

  • 主函数:

    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:运行服务器

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

  • 运行以下命令:

    python socket_server.py

  • 您将看到输出:

    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()

  • 将此代码保存为 client.py。

  • 在另一个终端运行:

    python client.py

  • 服务器将输出:

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

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

  • 步骤 6:发布和使用

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

  • 远程部署:

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

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

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

  • 安全性建议:

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

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

  • 示例场景

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

    故障排查

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

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

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


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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【Python】搭建socket 服务器同步手机验证码到电脑
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!