【问题标题】:Receiving Ethernet frames from an UDP port从 UDP 端口接收以太网帧
【发布时间】:2013-05-10 09:45:53
【问题描述】:

我需要监听多个 UDP 端口并将接收到的数据报作为以太网帧处理。除了创建 SOCK_RAW 套接字来接收以太网帧,检查我收到的是否是 UDP 数据报,然后提取数据报以识别 UDP 端口之外,我想不出任何其他解决方案。

有没有更好的方法?是否有某种套接字可以让我在特定端口上接收 UDP 数据报并仍然访问整个以太网帧?

【问题讨论】:

    标签: c linux udp ethernet


    【解决方案1】:

    我建议你使用pcap 库。这并不难,并且可以在广泛的系统之间移植。您可以简单地过滤和捕获您想要的内容。

    libpcap 和 WinPcap 提供数据包捕获和过滤引擎 许多开源和商业网络工具,包括协议 分析器(数据包嗅探器)、网络监视器、网络入侵 检测系统、流量生成器和网络测试器。

    另一个建议是libcrafter,它是一个高级数据包创建器和解码器。虽然它只是 C++。

    【讨论】:

    • 这是您正在寻找的答案。如果不编写设备驱动程序,您将无法访问帧,因为 NIC 处理所有标头信息,然后将数据包传递给内核(即内核甚至从未看到我不认为的标头!)。但是您实际上并不需要标头来获取 UDP 端口,因为它位于 UDP 数据包中,因为端口实际上区分了数据包应该发送到哪个程序。
    【解决方案2】:

    不确定您的平台是否支持此功能,但请尝试:

        int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));
    

    http://www.tldp.org/HOWTO/Ethernet-HOWTO-2.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多