套接字 VS WinPcap

5

有没有人知道我为什么要使用Winpcap而不仅仅使用.Net套接字来嗅探本地计算机上的数据包?

TY


这是否意味着在发送数据时使用WinPCap比套接字具有更好的速度性能? - bsobaid
2个回答

12

Sockets(.NET、Winsock等)通常在第7层,也就是应用层进行收集。也就是说,发送方发送的内容就是接收方收到的内容。发送端自动添加的各种标头会在接收方从套接字读取数据时被剥离。

可以配置套接字为原始套接字,这样您就可以看到所有标头,包括网络层(第3层)以下的标头。更进一步,您可以将原始套接字设置为混杂模式,以便查看网络上的所有流量,而不仅仅是针对您的计算机的数据包。但即使如此,也存在限制。例如,当您配置原始套接字时,需要指定要使用的协议类型,例如IP、ICMP等。这限制了套接字“可见”的数据包只能遵循该协议。我无法找到如何让套接字无论协议如何都能看到所有第3层的数据包。

Winpcap作为第2层数据链路层的设备驱动程序运行。在这种情况下,您可以看到网络上的所有数据包,并且可以查看完整的第2层标头。Winpcap还提供过滤功能,因此您可以根据提供的任何条件缩小所报告给您的数据包范围。

至于选择哪个,实际上取决于您所需任务的要求。如果您尝试实现任何实际的网络分析功能,仅使用套接字将会很难完成。在这种情况下,Winpcap更有意义。但是,如果您只对IP数据包感兴趣,那么套接字就足够了。


我可以使用套接字来捕获MSN Messenger和Yahoo Messenger的对话吗? - Itay.B
假设MSN/Yahoo Messenger客户端使用IP,那么原始套接字将能够捕获您本地网络连接的这些信息。 - Matt Davis

1
据我所了解,.Net套接字是用于在两个进程之间进行通信的IPC。而Winpcap是一个库,可以帮助您访问数据链路层,并嗅探通过您计算机上的网络硬件(或虚拟)设备传输的数据包。数据链路层允许获取在系统上创建的任何套接字(无论是.Net还是其他类型)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接