ULONG ulLen = 6, pulMac[2];
if(dwRet == NO_ERROR) //判断是否找到了目标IP相应的MAC
return 0;
2 网络监听的原理运行网络监听程序的主机要实现网络监听必须满足两个条件:其一,是该主机的网卡必须工作在混杂模式下;其二,是传输的数据包可能到达该主机.根据连接的网络设备不同,以太网分为共享式以太网和交换式以太网.
2.1 共享式以太网在共享式以太网中,由于是基于广播的方式来发送数据的,所以数包会被发送到连在一起的所有的主机(图1所示).因而,只有运行了网络监听程序的主机的网卡处在混淆模式下就能够实行网络监听了.所以,在共享式以太网中实施网络监听还是很容易的.2.2 交换式以太网在交换式以太网中使用交换机,交换机工作在数据链路层,工作时保护着一张MAC地址与交换机端口的映射表.当有数据报发送到交换机上时,交换机会将数据报的目标MAC地址与自己维护的表内的端口对照,而后将数据报发送到相应端口上.所以,即使监听主机的网卡设置成混杂模式,也不能接受到传给其他主机的数据帧.因此,在交流式网络中实施网络监听的关键论文,就是要使发送给其余主机的数据帧可以达到运行了网络监听程序的主机.在交换式以太网中最常见的方式是利用ARP欺骗的中间人攻打的方式实施网络监听.2.2.1 ARP欺骗原理 局域网内部的主机依据MAC地址进行通讯.ARP(地址解析)协议是将32位IP到以太网的48位物理地址(MAC地址),以便将报文封装成帧发送.如果源主机的ARP表不目标IP和目的MAC的映射,则通过播送的方法发送ARP请求.只有存在此目的IP的主机才会对这个广ARP恳求作出反应,向源主机发送一个包含其MAC地址的ARP应答报文.ARP协议是一个无状态的协定.一旦收到ARP应答就会对其高速缓存中存放的IP地址到物理地址映射记录进行更新,而不会关心之前是否发出过ARP请求.ARP欺骗的核心就是向目标主机发送一个含假造的IP-MAC映射信息的ARP应答报文.当目的主机收到此应答报文后就会更新其ARP高速缓存,从而使目标主机将报文发送给弊病的对象.2.2.2 利用旁边人攻击进行监听的原理 利用ARP欺骗进行监听切实就是要实现中间人攻击,它是应用ARP诱骗进行袭击的重要方式之一.其原理是使进行监听的主机插入到被监听主机与其它网络主机之间,使进行监听的主机成为被监听主机与其它网络主机通信的中继.在这种情况下,其他网络主机发往被监听主机的信息和被监听主机发往其他网络主机的信息都必需经过进行网络监听的主机.这样,进行网络监听的主机就很轻易对被监听主机进行网络监听了.如图2所示,C为进行网络监听的主机,A为被监听主机,B为网络中的任一其他(1) C向A发送ARP应答报文,A修改ARP高速缓冲,使B的IP地址与C的MAC地址相对应,即形成IP 192.168.0.2~MAC 03:03:03:03的映射;2)同理,C向B发送ARP应答报文代写毕业论文,使A的IP地址与C的MAC地址绝对应,即IP 192.168.0.1~MAC 03:03:03:03;(3)这时,假如A向B发送信息,根据A高速缓冲中的IP-MAC映射,信息实际上是被发送到了C,再由C转发到B;同理,从B发送到A的信息也将会被C转发一次.此时,A与B之间的通信已经被C完全监控.如果运行了网络监听程序的主机C的网卡又工作在混杂模式下,那么,主机C就满足了前面所提到的实现网络监听的两个前提,可能对A与B间的通信进行监听了.
3 运用ARP诈骗的网络监听实现的程序设计
3.1 程序总体设计程序的总体设计思维就是:首先要实现旁边人攻打,使履行监听主机成为被监听主机之间的中继,而后分析吸收到的数据包,根据自行约定的标志断定监听的开始,再根据用户的须要对监听到的数据包作出相应的操作.因此,该程序需要实现的主要功能有两个:(1)根据中间人袭击原理实现ARP欺骗;(2)处理接收到的数据包,根据用户的输入,实现相应的功效.辨别建破函数ArpCheatApplication和使用带参数的main函数作为主函数.主函数的功能主要是初始化网卡以及一些全局变量,并使用函数CreateThread来建立新线程,实现对ArpCheatApplication等子函数的调用,实现相应的功能.main的算法如下:int main(int argc, char **argv) //带参数的main函数{
dwRet = SendARP(DestIP, 0, pulMac, &ulLen); //调用SDK函数来获取目的IP的MAC地址
i=2;
else return FALSE; //如果不找到目的IP相应的MAC,则返回FALSE
return TRUE;
使用InitAdapter函数初始化网卡;
CreateThread(0, 0, CustomerApplication, NULL, 0, 0);
CreateThread(NULL, 0, ArpCheatApplication, &i, 0毕业论文, 0); //实现对Client端的ARP欺骗
}
,其代码如下:
//使用CreateThread函数天生处置接收到的数据包的新线程
BOOL GetMACAddr(DWORD DestIP, char *pMAC)
利用PacketFreePacket跟PacketCloseAdapter函数释放资源;
ClientSidEIP<--inet_addr(argv[2]); //第三个命令行参数代表Client端的IP
上面算法中应用到的GetMACAddr函数是一个自定义的用来根据目标IP获得相应MAC地址的函
ServerSidEiP<--inet_addr(argv[1]); //第二个命令行参数代表Server端的IP
}
CreateThread(0, 0代写职称论文, AnalysePacketsApplication, NULL, 0, 0);
if (argc! =3) return 0; //参数输入错误,返回0
{
//使用CreateThread函数生成处理用户输入的新线程
.......//其余所需的操作
//使用CreateThread函数生成实现ARP欺骗的新线程
声名部分职称论文,定义变量;
CreateThread(NULL, 0, ArpCheatApplication, &i, 0, 0); //实现对Server端的ARP欺骗
i=1;
DWORD dwRet;
//取得参数
使用自定义函数GetMACAddr函数取得Server端跟Client真个MAC地址;
memcpy(pMAC, pulMac, 6);
}
{
“基于ARP欺骗的网络监听原理及实现”版权归作者所有,转载请著名出处。