首页
会员中心
到顶部
到尾部
VC毕业设计

DNS欺骗技术研究与实现

时间:2020/10/27 9:05:22  作者:  来源:  查看:0  评论:0
内容摘要:         本文分析了在以太网中利用对网络数据监听,来截获DNS报文,进而伪造DNS报文进行DNS欺骗的技术,并给出基于WinPcap的实现。    &n...

         本文分析了在以太网中利用对网络数据监听,来截获DNS报文,进而伪造DNS报文进行DNS欺骗的技术,并给出基于WinPcap的实现。
          DNS欺骗的基础是捕获DNS请求的数据包。首先我们就介绍如何捕获数据包。打开网卡的功能是通过pcap_open_live()来实现的它有三个参数snaplen promisc to_ms。
         snaplen用于指定所捕获包的特定部分,在一些系统上(象xBSD and Win32等)驱动只给出所捕获数据包的一部分而不是全部,这样就减少了拷贝数据的数量从而提高了包捕获的效率。
promisc指明网卡处于混杂模式,在正常情况下网卡只接受去往它的包而去往其他主机的数据包则被忽略。相反当网卡处于混杂 模式时他将接收所有的流经它的数据包:这就意味着在共享介质的情况下我门可以捕获到其它主机的数据包。大部分的包捕获程序都将混杂模式设为默认,所有我们在下面的例子里也将网卡设为混杂模式。
          to_ms 参数指定读数据的超时控制,超时以毫秒计算。当在超时时间内网卡上没有数据到来时对网卡的读操作将返回(如pcap_dispatch() or pcap_next_ex()等函数)。还有,如果网卡处于统计模式下to_ms还定义了统计的时间间隔。如果该参数为0那么意味着没有超时控制,对网卡的读操作在没有数据到来是将永远堵塞。如果为-1那么对网卡的读操作将立即返回不管有没有数据可读。
         一旦网卡被打开,就可以调用pcap_dispatch() 或pcap_loop()进行数据的捕获,这两个函数的功能十分相似不同的是pcap_ dispatch()可以不被阻塞,而pcap_loop()在没有数据流到达时将阻塞。在简单的例子里用pcap_loop()就足够了,而在一些复杂的程序里往往用pcap_dispatch()。
        这两个函数都有返回的参数,一个指向某个函数(该函数用来接受数据如该程序中的packet_handler)的指针,libpcap调用该函数对每个从网上到来的数据包进行处理和接收数据包。另一个参数是带有时间戳和包长等信息的头部,最后一个是含有所有协议头部数据报的实际数据。注意MAC的冗余校验码一般不出现,因为当一个桢到达并被确认后网卡就把它删除了,同样需要注意的是大多数网卡会丢掉冗余码出错的数据包,所以WinPcap一般不能够捕获这些出错的数据报。
        基于回调包捕获机制的pcap_loop()在某些情况下是不错的选择。但是在一些情况下处理回调并不特别好:这会使程序变的复杂并且在象多线程或C++类,这些情况下它看起来到象一块绊脚石。
        在这些情况下pcap_next_ex()允许直接调用来接收包,它的参数和pcap_loop()相同:有一个网卡描述和两个指针,这两个指针会被初始化并返回给用户,一个是pcap_pkthdr结构,另一个是接收数据的缓冲区。
 



相关评论
广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号