sniffer中文翻译过来就是嗅探器,在当前网络技术中使用得非常得广泛。sniffer既可以做为网络故障的诊断工具,也可以作为黑客嗅探和监听的工具。最近两年,网络监听(sniffer)技术出现了新的重要特征。传统的sniffer技术是被动地监听网络通信、用户名和口令。而新的sniffer技术出现了主动地控制通信数据的特点,把sniffer技术扩展到了一个新的领域。Sniffer 技术除了目前在传统的网络侦测管理外,也开始被应用在资讯保全的领域。可以这样说,sniffer技术是一把双刃剑,如何更好的利用它,了解它的一些特性,将能使这项技术更好的为我们带来便利。

   sniffer的编程方法比较通用的有以下几种:

   1.winpcap 这是一个比较通用的库,相信做过抓包的,工具大多数人都不会太陌生

   2.raw socket 在2000以后的版本都支持此项功能,2000 server有个网络监视器就是基于raw socket

   3.tdi,ndis,spi,hook socket技术,这种技术比较大的不同是,可以将包截取而不是仅仅获得包的一份拷贝

    总的说来,一般以前两者居多。
    winpcap 有一个致命的缺陷就是只适用于共享式以太网络,对于交换式网络下的数据则无能为力,我

专门做过测试,在使用交换机连接的局域网下,只能监听到本网段内的数据,而对于来自其他网段

的数据则无法监听,除非你把probe接到交换机之前或者接到交换机的console口上,不过那样的

弊端是显而易见的。所以,winpcap的应用还是很有局限性的!

   一般来说,集线器的所有IP包是向所有的机器发送的(他不知道哪台机器的IP是多少),而交换机因为记住了每台机器的IP地址,因此只向一个端口发送,所以说用交换机,是不可能监听到其他人的信包的。这不是WINPCAP的局限性。而是网络本身就是这样。

   现在交换机便宜了,因此以后你想用sniffer抓密码概率不大了,不过还能多公司仍然是交换机和HUB一起用的,这样小范围内是有效地

    在windows下我觉得spi还是不错,如果用tdi,ndis的话难度太大了。要考虑平台间移植的话还是用winpcap好  

 

    winpcap也是用的NDIS,将自己注册为一个协议处理驱动。(在原代码的driverentry里面能看到)