有人知道为什么我应该使用Winpcap而不仅仅是.Net套接字来嗅探本地pc上的数据包吗?
TY
发布于 2009-10-14 19:55:53
套接字(.NET、Winsock等)通常收集在第7层,即应用层。也就是说,发送者发送的内容就是接收者接收的内容。当接收方从套接字读取数据时,在发送端自动添加的所有各种标头都会被剥离。
可以将套接字配置为原始套接字,在这种情况下,您可以看到第3层(网络层)下的所有报头。此外,您还可以将原始套接字置于混杂模式,这样您就可以看到网络上的所有流量,而不仅仅是发往您机器的数据包。但即使是这样也是有限的。例如,当您配置原始套接字时,您指定要使用的协议类型,例如IP、ICMP等。这将套接字限制为“看到”符合该协议的数据包。我一直无法弄清楚如何使套接字在第3层看到所有数据包,而不管协议是什么。
Winpcap在第2层(数据链路层)作为设备驱动程序运行。在这种情况下,您可以看到网络上的所有数据包,其完整的报头一直延伸到第二层。Winpcap还提供了过滤功能,因此您可以根据您提供的任何标准来缩小报告给您的数据包的范围。
至于在它们之间进行选择,这实际上归结为您的特定任务的要求。如果您正在尝试实现任何一种现实的网络分析功能,那么您将很难仅使用套接字来实现。Winpcap在这种情况下更有意义。但是,例如,如果您只对IP数据包感兴趣,那么套接字就可以很好地实现这一点。
发布于 2009-10-12 20:44:55
据我所知,.Net套接字是一个在两个进程之间进行通信的进程间通信接口。虽然winpcap是一个帮助您访问数据链路层的库,但它会嗅探通过您机器上的网络硬件(或虚拟)设备的数据包。数据链路层允许获取在系统上创建的任何套接字(无论是否为.Net)上的数据。
https://stackoverflow.com/questions/1556772
复制相似问题