使用socket raw嗅探802.3 eth数据包

时间:2011-06-23 13:53:00

标签: linux network-programming sniffing

我需要嗅探接口BPDU(网桥协议数据单元)数据包,这些数据包封装在带有LLC头的802.3类型的eth帧中。我试着打开socket raw:

skd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_802_3))

但是试图嗅闻数据包我无法抓住它们。看看include / linux / if_ether.h似乎ETH_P_802_3是虚拟类型......是否有解决方案或我应该使用ETH_P_ALL并分析以太网头的EtherType字段?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

抱歉,我不确定您的问题是关于ETH_P_ALL标志还是您的嗅探器根本无效。

我建议您使用ETH_P_ALL并自行解码标题。

如果你的嗅探器不工作,请确保你有混杂的模式?假设您的以太网设备为ifconfig eth0 promisc,则可以从命令行使用eth0。或者,您可以使用IFF_PROMISC在设备上设置ioctl标记。

所有这一切,除非你有充分的理由不这样做,否则你可能非常值得重新发明轮子,只需使用libpcap