UDP透传程序

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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 标准库,无需额外安装)
  1. import socket
  2. import select
  3. from datetime import datetime
  4. # 设备 A 和 B 的 IP 与端口, A为上游,B为下游,改脚本为中继
  5. # A_IP = "180.101.101.100"  # 设备 A 的 IP
  6. B_IP = "192.168.1.123"  # 设备 B 的 IP
  7. B_PORT = 37260  # 设备 B 监听的端口
  8. # 笔记本监听 A 设备的端口
  9. RELAY_A_PORT = 37260  # 笔记本监听 A 设备的端口
  10. RELAY_B_PORT = 7001  # 电脑用于发送数据到 B 的端口(固定,不用临时端口)
  11. # 创建 UDP 套接字(监听 A 的数据)
  12. sock_a = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  13. sock_a.bind(("0.0.0.0", RELAY_A_PORT))
  14. # 创建 UDP 套接字(用于和 B 通信,固定端口)
  15. sock_b = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  16. sock_b.bind(("0.0.0.0", RELAY_B_PORT))
  17. sock_b.connect((B_IP, B_PORT))  # 连接 B,确保发送时使用固定端口
  18. # 记录 A 设备的地址(用于返回数据)
  19. a_address = None
  20. print(f"UDP 中继服务器启动,监听 {RELAY_A_PORT} 和 {RELAY_B_PORT} ...")
  21. while True:
  22.     readable, _, _ = select.select([sock_a, sock_b], [], [])
  23.     for sock in readable:
  24.         data, addr = sock.recvfrom(1024)
  25.         hex_data = data.hex()  # 转换为 hex 格式
  26.         # if sock == sock_a and addr[0] == A_IP:  # A 发送数据,转发给 B
  27.         if sock == sock_a:
  28.             a_address = addr  # 记录 A 的地址
  29.             print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 从 A ({addr}) 收到数据: {hex_data}")
  30.             sock_b.send(bytes.fromhex(hex_data))  # 直接发送(会用 `RELAY_B_PORT` 作为源端口)
  31.             print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 数据已通过端口 {RELAY_B_PORT} 转发给 B")
  32.         elif sock == sock_b and addr[0] == B_IP:  # B 返回的数据,转发给 A
  33.             print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 从 B ({addr}) 收到数据: {hex_data}")
  34.             if a_address:  # 确保 A 设备地址已记录
  35.                 sock_a.sendto(bytes.fromhex(hex_data), a_address)  # 发送回 A
  36.                 print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 数据已转发给 A*********")
  37.             
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表