UDP透传程序
- 其他
- 2025-09-12 09:45:02

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 / WindowsPython 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*********")