当前位置: 首页 > news >正文

UDP透传程序

UDP透传程序

本脚本用于在 设备 A 和 设备 B 之间建立 UDP 数据转发桥梁,适用于 A 和 B 设备无法直接通信的情况。

流程:
A --> 电脑 (中继) --> B
B --> 电脑 (中继) --> A

需要修改参数:
B_IP = “192.168.1.123” # 设备 B 的 IP
B_PORT = 37260 # 设备 B 监听的端口
RELAY_A_PORT = 37260 # 笔记本监听 A 设备的端口

  • A 发送数据到 电脑 (UDP 端口 37260 )
  • 电脑收到数据后,转发给 B (UDP 端口 37260 )
  • B 处理后返回数据给 电脑
  • 电脑收到 B 的数据后,转发给 A

系统:

  • Linux / Windows
  • Python 3.x

依赖库:

  • socket (Python 标准库,无需额外安装)
import socket
import select
from datetime import datetime
# 设备 A 和 B 的 IP 与端口, A为上游,B为下游,改脚本为中继
# A_IP = "180.101.101.100"  # 设备 A 的 IP
B_IP = "192.168.1.123"  # 设备 B 的 IP
B_PORT = 37260  # 设备 B 监听的端口
# 笔记本监听 A 设备的端口
RELAY_A_PORT = 37260  # 笔记本监听 A 设备的端口
RELAY_B_PORT = 7001  # 电脑用于发送数据到 B 的端口(固定,不用临时端口)

# 创建 UDP 套接字(监听 A 的数据)
sock_a = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_a.bind(("0.0.0.0", RELAY_A_PORT))

# 创建 UDP 套接字(用于和 B 通信,固定端口)
sock_b = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_b.bind(("0.0.0.0", RELAY_B_PORT))
sock_b.connect((B_IP, B_PORT))  # 连接 B,确保发送时使用固定端口

# 记录 A 设备的地址(用于返回数据)
a_address = None

print(f"UDP 中继服务器启动,监听 {RELAY_A_PORT}{RELAY_B_PORT} ...")

while True:
    readable, _, _ = select.select([sock_a, sock_b], [], [])

    for sock in readable:
        data, addr = sock.recvfrom(1024)
        hex_data = data.hex()  # 转换为 hex 格式

        # if sock == sock_a and addr[0] == A_IP:  # A 发送数据,转发给 B
        if sock == sock_a:
            a_address = addr  # 记录 A 的地址
            print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 从 A ({addr}) 收到数据: {hex_data}")
            sock_b.send(bytes.fromhex(hex_data))  # 直接发送(会用 `RELAY_B_PORT` 作为源端口)
            print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 数据已通过端口 {RELAY_B_PORT} 转发给 B")

        elif sock == sock_b and addr[0] == B_IP:  # B 返回的数据,转发给 A
            print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 从 B ({addr}) 收到数据: {hex_data}")
            if a_address:  # 确保 A 设备地址已记录
                sock_a.sendto(bytes.fromhex(hex_data), a_address)  # 发送回 A
                print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 数据已转发给 A*********")
            

相关文章:

  • 数据结构:哈希表
  • Django 项目模块化开发指南:实现 Vue 风格的组件化
  • 基础工具常用api汇总(机器学习)
  • modbus 协议的学习,谢谢老师
  • 字节跳动系统攻防算法岗-Flow安全内推
  • 从“搜索”到“对话”:AI帮助中心如何重塑用户体验?
  • 如何配置虚拟机IP?
  • MyBatis-Plus 逻辑删除实现
  • leetcode 240. 搜索二维矩阵 II
  • 关于虚拟环境中遇到的bug
  • SFT与RLHF的关系
  • QT5 GPU使用
  • 白帽子讲Web安全资源下载
  • JS禁止web页面调试
  • ⭐算法OJ⭐字符串与数组【动态规划 DP】(C++实现)最长公共子序列 LCS + 最短公共超序列 SCS
  • 洛谷 P11830 省选联考2025 幸运数字 题解
  • 【编程题】7-3 树的同构
  • VS Code(Cursor)远程开发调试教程(超详细)
  • 自己的网页加一个搜索框,调用deepseek的API
  • 深入理解UDP:一种高效但不可靠的传输层协议、揭示其工作原理
  • 盗版软件做的网站会被起诉吗/seo查询网站是什么
  • 免费网站建设哪个好/提高网站搜索排名
  • 建设银行手机银行官方网站/网站统计器
  • 云南网站建设哪个好/杭州seo营销
  • 做58同城网站花了多少钱/海外营销
  • 网站的做公司/网页制作软件哪个好