当前位置: 首页 > 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 = Noneprint(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 发送数据,转发给 Bif 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 返回的数据,转发给 Aprint(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)  # 发送回 Aprint(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 数据已转发给 A*********")
http://www.lryc.cn/news/546404.html

相关文章:

  • 深度学习pytorch之简单方法自定义9种卷积即插即用
  • TMS320F28P550SJ9学习笔记2:Sysconfig 配置与点亮LED
  • zRAM内存压缩技术:原理与实践初探
  • Hive 3.1 在 metastore 运行的 remote threads
  • 大语言模型揭秘:从诞生到智能
  • 基于模糊PID控制的供热控制系统设计Simulink仿真
  • 宝塔找不到php扩展swoole,服务器编译安装
  • LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)
  • C++发展
  • Python:函数,return返回值与形参实参
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序
  • pandas 文本数据处理
  • GCC RISCV 后端 -- GCC 后端框架的一些理解
  • FastGPT 源码:如何实现 “问题优化“
  • CSS—flex布局、过渡transition属性、2D转换transform属性、3D转换transform属性
  • Spring Boot Gradle 项目中使用 @Slf4j 注解
  • FreeRTOS系列---程序正常,但任务无法创建
  • linux应用:errno、perror、open、fopen
  • 物联网中的气象监测设备具备顶级功能
  • 15-YOLOV8OBB损失函数详解
  • WHAT - 前端异步事件流处理场景梳理
  • 计算机网络软考
  • 安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
  • 做小程序开发的安全防护全方案
  • 在Spring Boot项目中导出复杂对象到Excel文件
  • 从JDBC到数据库连接池:构建高性能Java应用的基石(中篇)
  • JavaWeb后端基础(6)
  • nio多线程版本
  • Electron、Tauri及其它跨平台方案终极对比
  • 蓝桥杯试题:二分查找