2009-10-12 50 views
4

有谁知道为什么我应该使用Winpcap而不是.Net套接字来嗅探本地PC上的数据包?套接字VS WinPcap

TY

+0

这是否意味着使用WinPCap在速度方面性能更好,而不是用于发送数据的套接字? – bsobaid

回答

10

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

可以将套接字配置为原始套接字,在这种情况下,您可以看到第3层即网络层的所有标头。此外,您还可以将原始套接字置于混杂模式,这样您就可以看到网络上的所有流量,而不仅仅是发往机器的数据包。但即使这样也是有限的。例如,在配置原始套接字时,可以指定要使用的协议类型,例如IP,ICMP等。这会将套接字限制为“查看”遵守该协议的数据包。我一直无法弄清楚如何让套接字在层3看到所有的数据包,而不管协议如何。

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

至于他们之间的选择,它真的归结为您的具体任务的要求。如果你正在尝试实现任何一种现实的网络分析能力,那么你就会忍不住用套接字来做到这一点。在这种情况下,Winpcap更有意义。但是,如果您只对IP数据包感兴趣,那么套接字就可以正常工作。

+0

太好了。非常感谢你。 –

+0

我可以使用套接字捕获MSN messanger和Yahoo Messanger对话吗? –

+0

假设MSN/Yahoo messenger客户端使用IP,那么是的,原始套接字将从您的本地网络连接中捕获此信息。 –

1

据我understanf净套接字的IPC到2个的进程之间进行通信。虽然winpcap是一个帮助您访问数据链接层的库,但sniff pacquets会通过您计算机上的网络硬件(或虚拟)设备。数据链路层允许获取系统上创建的任何套接字(.Net或不)的数据。