基于ARP欺骗的嗅探原理

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

嗅探器(sniffer)是一种刺探网络中传输数据的工具。为达到这一目的,一般的做法是设置网卡为混杂模式,这样就可以嗅探到所有经过本机网卡的数据(这种一般的sniffer原理不在此阐述)。但是这种sniffer有一个缺点,就是它只适用于共享式局域网,对于交换式局域网无效。因为在交换式局域网中,网络中的数据并不会经过每一台主机的网卡,所以对于交换式局域网,就要用另外一种更为主动的方法去嗅探,那就是基于ARP欺骗的嗅探。

我们假设有三台主机A,B,C位于同一个交换式局域网中,攻击者处于主机A,而主机B,C正在通信。现在A希望能嗅探到B->C的数据,于是A就可以伪装成C对B做ARP欺骗——向B发送伪造的ARP应答包,应答包中IP地址为C的IP地址而MAC地址为A的MAC地址。这个应答包会刷新B的ARP缓存,让B认为A就是C,说详细点,就是让B认为C的IP地址映射到的MAC地址为主机A的MAC地址。这样,B想要发送给C的数据实际上却发送给了A,就达到了嗅探的目的。另外,由于ARP缓存是动态更新的,因此,我们要不断的向B发送伪造的ARP应答包,以防止B的ARP缓存中的IP-MAC映射关系被C改回来。(这里涉及到ARP欺骗的知识,如果对此有疑惑,请查阅相关资料。)当然,这样嗅探之后,本应接收到数据的C就不能接收到B发送过来的数据了,也就是说,B和C的通信相当于被中断了。因此,我们在嗅探到数据后,还必须将此数据转发给C,这样才能保证B,C的通信不被中断。

以上就是基于ARP欺骗的嗅探基本原理,在这种嗅探方法中,嗅探者A实际上是插入到了B->C中,B的数据先发送给了A,然后再由A转发给C,其数据传输关系如下所示:

B----->A----->C

B<------------C

当然,如果你还想嗅探到C->B的数据,还可以将A插入到C->B中,这样,就能嗅探到B,C间通信的全部数据了。

下面,还是用具体的代码来说明问题。在这个代码中,涉及到了IPHLPAPI和winpcap的编程,请查阅相关资料:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航