【发布时间】:2013-05-10 09:45:53
【问题描述】:
我需要监听多个 UDP 端口并将接收到的数据报作为以太网帧处理。除了创建 SOCK_RAW 套接字来接收以太网帧,检查我收到的是否是 UDP 数据报,然后提取数据报以识别 UDP 端口之外,我想不出任何其他解决方案。
有没有更好的方法?是否有某种套接字可以让我在特定端口上接收 UDP 数据报并仍然访问整个以太网帧?
【问题讨论】:
我需要监听多个 UDP 端口并将接收到的数据报作为以太网帧处理。除了创建 SOCK_RAW 套接字来接收以太网帧,检查我收到的是否是 UDP 数据报,然后提取数据报以识别 UDP 端口之外,我想不出任何其他解决方案。
有没有更好的方法?是否有某种套接字可以让我在特定端口上接收 UDP 数据报并仍然访问整个以太网帧?
【问题讨论】:
我建议你使用pcap 库。这并不难,并且可以在广泛的系统之间移植。您可以简单地过滤和捕获您想要的内容。
libpcap 和 WinPcap 提供数据包捕获和过滤引擎 许多开源和商业网络工具,包括协议 分析器(数据包嗅探器)、网络监视器、网络入侵 检测系统、流量生成器和网络测试器。
另一个建议是libcrafter,它是一个高级数据包创建器和解码器。虽然它只是 C++。
【讨论】:
不确定您的平台是否支持此功能,但请尝试:
int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));
【讨论】: