VC中利用原始套接字实现网络监听

2016-02-19 18:42 4 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐VC中利用原始套接字实现网络监听,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

  1、引言

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

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

  2、网络监听工作原理

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

  3、具体实现

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  4、小结

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1618730.html

延伸阅读
工作中经常碰到一些程序,它们在系统启动的过程中,自动打开并运行,以便实现对系统的监控或者病毒的检测等特定的目的,典型的例子就是常用的一些杀毒软件如:KV300及瑞星杀毒软件等。笔者在此,以自己的编程实践为基础,说明这些程序自动启动的原理和方法,同时对一些典型程序代码进行分析,以便读者在今后的编程过程中使用。 一、 ...
首先必须初始化网络,可以在app的InitInstance()中用AfxSocketInit()或者直接用 WSAStartup( MAKEWORD(1,1),&wsaData) WORD wVersionRequested WSADATA 初始化 winsock WSACleanUp 然后是初始化套接字的方法,有tcp和udp两种tcp下: SOCKET(AF_INET,SOCK_STREAM,0) bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//同下面的代...
本文描述套接字类中的通知函数。这些成员函数都是回调函数,框架调用它们将重要事件通知给套接字对象。通知函数有: OnReceive:通过调用 Receive 通知此套接字缓冲区中有需要检索的数据。 !-- frame contents -- !-- /frame contents -- OnSend:通过调用 Send 通知此套接字现在可以发送数据。 OnAccept:通过调用 Accept 通知此...
[文章信息]作者:petery时间:2003-07-29出处:论坛责任编辑:方舟[文章导读]在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式...... 一、客户机/服务器模式 !-- frame contents -- !-- /frame contents -- 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基...
ICMP就是所谓的Internet控制报文协议(Internet Control Message Protocol),在网络中,一般用它来传递差错报文以及其他应注意的信息。ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议(如:TCP或者UDP)使用,ICMP对于互联网以及其他基于IP协议的网络的正常运行起着非常重要的作用。有许多重要的网络程序都是...

经验教程

512

收藏

95
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部