使用原始套接字嗅探 802.3 eth 数据包
Posted
技术标签:
【中文标题】使用原始套接字嗅探 802.3 eth 数据包【英文标题】:Sniffing 802.3 eth packets with socket raw 【发布时间】:2011-06-23 13:52:59 【问题描述】:我需要嗅探接口 BPDU(网桥协议数据单元)数据包,这些数据包封装在带有 LLC 标头的 802.3 类型的 eth 帧中。我试图打开一个原始套接字:
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】:抱歉,我不确定您的问题是关于 ETH_P_ALL
标志还是您的嗅探器根本不起作用。
我建议使用ETH_P_ALL
并自己解码标头。
如果您的嗅探器无法正常工作,请确保您已开启混杂模式?从命令行,您可以使用ifconfig eth0 promisc
,假设您的以太网设备是eth0
。或者您可以使用ioctl
在您的设备上设置IFF_PROMISC
标志。
说了这么多,除非你有充分的理由不这样做,否则不重新发明***并简单地使用 libpcap 可能非常值得。
【讨论】:
感谢 Edward 的回复...是的,使用 ETH_P_ALL 一切正常,我可以看到捕获的 BPDU 数据包,但使用 ETH_P_802_3 没有捕获数据包,可能是因为没有实现。以上是关于使用原始套接字嗅探 802.3 eth 数据包的主要内容,如果未能解决你的问题,请参考以下文章
Windows 主机操作系统似乎忽略了通过 linux sendto 使用原始套接字注入的数据包