VC中实现网络监听



  网络监听工具(sinff)是提供给网络管理员类管理工具在以太网中(Ethernet)当网络上连接多台计算机时某瞬间只能有台计算机可以传送数据以太网中数据是以被称为帧数据结构为单位进行交换通常在计算机网络上交换数据结构体单位是数据包而在以太网中则称为帧这种数据包是由记录着数据包发送给对方所必需信息报头部分和记录着发送信息报文部分构成报头部分包含接收端地址、发送端地址、数据校验码等信息

  在以太网上帧(数据包)是被称为带碰撞检测载波侦听多址访问(CAMA/CD)发送在这种思路方法中发送到指定地址帧实际上是发送到所有计算机只是如果网卡检测到经过数据不是发往自身简单忽略过去而已

  2、网络监听工作原理

  工作在普通模式下网卡只能接收发往本地地址和广播数据包其余数据包将简单转发并不把数据提交给主机处理工作在混杂模式下网卡将接收所有经过本网卡数据所以网络监听只能工作在混杂模式下对于不能工作在网卡将无法监听所有在网络上传输数据网络监听核心就是设置网卡为混杂模式通常套接字只能相应和自己硬件地址相匹配或以广播方式发送数据帧对于其他数据帧网络接口验证投递地址并非自身地址后将不做响应也就是说网络无法接收到达网卡数据包

  3、具体实现

  对网卡设置混杂模式是通过原始套接字(row )实现这有别于通常是使用数据流和数据报套接字在创建了原始套接字后需要通过sockopt来设置IP头操作选项然后再通过bind将原始套接字绑定到本地网卡为了让原始套接字能接受所有数据还需要通过ioctl来进行设置而且还可以指定是否亲自处理IP头至此实际就可以开始对网络数据包进行监听了对数据包获取仍象流式套接字或数据报套接字那样通过recv来完成但是和其他两种套接字区别原始套接字此时捕获到数据包并不仅仅是单纯数据信息而是包含有 IP头、 TCP头等信息头最原始数据信息这些信息保留了它在网络传输时原貌通过对这些在低层传输原始信息分析可以得到有关网络些信息由于这些数据经过了网络层和传输层打包因此需要根据其附加帧头对数据包进行分析

  例子运行画面如图所示:

\" border=0>
如图



  4、小结

  本文介绍以原始套接字实现网络侦听思路方法实现起来比较简单尤其是不需要编写驱动就能实现网络侦听但由于接收到数据报头不含帧信息因此不能接收网络层其他数据包如ARP、RARP等原始套接字只能监听但不能实现拦截另外最致命缺点就是只能在Winsock层次上进行而对于网络协议栈中底层协议数据包例如TDI无法进行处理对于些木 马和病毒来说很容易避开这个层次监听
Tags: 

延伸阅读

最新评论

发表评论