import socket


def capture_udp_broadcast(port=6666, timeout=10):
    """
    抓取同一网络下的UDP广播包
    :param port: 监听的端口(常见UDP广播端口如 6666, 8888, 9999)
    :param timeout: 超时时间(秒),None 表示无限监听
    """
    # 创建 UDP Socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 绑定到所有可用接口的指定端口
    sock.bind(('0.0.0.0', port))

    # 设置超时(可选)
    if timeout:
        sock.settimeout(timeout)

    print(f"🎧 正在监听 UDP 广播 (端口: {port})...")

    try:
        while True:
            try:
                # 接收数据(缓冲区大小 1024 字节)
                data, addr = sock.recvfrom(1024)
                print(f"📦 收到来自 {addr} 的 UDP 广播包:")
                print(f"  数据 (原始): {data}")
                print(f"  数据 (解码): {data.decode('utf-8', errors='ignore')}")  # 尝试UTF-8解码
                print("-" * 50)
            except socket.timeout:
                print("⏱️ 超时,停止监听。")
                break
            except KeyboardInterrupt:
                print("🛑 手动停止监听。")
                break
    finally:
        sock.close()
        print("🔌 已关闭 UDP 监听。")


if __name__ == "__main__":
    capture_udp_broadcast(port=7001, timeout=5000)  # 监听30秒 wifi温控网关用的乐鑫端口固定是7001
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐