《Visual-C++网络编程技术-10.ppt》由会员分享,可在线阅读,更多相关《Visual-C++网络编程技术-10.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络编程技术网络编程技术导入导入v网络嗅探是指监听网络的数据信息。目前有很多网络嗅探是指监听网络的数据信息。目前有很多商业的或者免费的嗅探工具,也称嗅探器商业的或者免费的嗅探工具,也称嗅探器(Sniffer)。v网络嗅探是网络监测和数据分析等管理活动常用网络嗅探是网络监测和数据分析等管理活动常用的的方法。网络嗅探器一般是通过网络传输介质的的方法。网络嗅探器一般是通过网络传输介质的共享特性实现抓包,获得当前网络的使用状况,的共享特性实现抓包,获得当前网络的使用状况,为网络管理员对网络中的信息进行实时的监测并为网络管理员对网络中的信息进行实时的监测并分析提供的一个合适的工具。分析提供的一个合适的工
2、具。v本章就介绍了简单的网络嗅探器设计与开发,并本章就介绍了简单的网络嗅探器设计与开发,并给出了嗅探器的一个具体应用给出了嗅探器的一个具体应用截获截获FTP登陆登陆用户名和密码。用户名和密码。 网络编程技术网络编程技术本章要点本章要点v嗅探器原理分析嗅探器原理分析v简单嗅探器的设计实现简单嗅探器的设计实现v应用嗅探器截获应用嗅探器截获FTP登陆名和密码登陆名和密码网络编程技术网络编程技术网络嗅探器原理网络嗅探器原理v网络嗅探器最基本的功能就是数据包的捕获,我网络嗅探器最基本的功能就是数据包的捕获,我们主要讨论在共享网络中捕获数据包。们主要讨论在共享网络中捕获数据包。v当有数据包到达网络后,数据
3、被发给所有端口,当有数据包到达网络后,数据被发给所有端口,任何端口上的主机都可以接收数据包。任何端口上的主机都可以接收数据包。v一般情况下,主机在接收到目的地址是本地的数一般情况下,主机在接收到目的地址是本地的数据包的时候才会接受,其他的数据包会丢弃,这据包的时候才会接受,其他的数据包会丢弃,这个工作是网卡来完成的。个工作是网卡来完成的。网络编程技术网络编程技术网络嗅探器原理网络嗅探器原理网卡的工作模式网卡的工作模式v网卡通常有两种工作模式,即混杂模式和非混杂网卡通常有两种工作模式,即混杂模式和非混杂模式。模式。v一般情况下,网卡是处于非混杂模式的,在这种一般情况下,网卡是处于非混杂模式的,在
4、这种模式下,网卡只接收目的地址等于自己地址的数模式下,网卡只接收目的地址等于自己地址的数据包。据包。v如果把网卡设为混杂模式,就可以接收所有的网如果把网卡设为混杂模式,就可以接收所有的网络数据包,无论其目的地址是否等于自已的地址,络数据包,无论其目的地址是否等于自已的地址,都一并接收。都一并接收。 v为了捕获网络中的所有数据包,需要将网卡设置为了捕获网络中的所有数据包,需要将网卡设置成混杂模式。成混杂模式。 网络编程技术网络编程技术嗅探器的原理嗅探器的原理 v1. 把网卡置于混杂模式把网卡置于混杂模式v2. 捕获数据包捕获数据包v3. 分析数据包分析数据包 v详细代码见教材详细代码见教材网络编
5、程技术网络编程技术代码详解代码详解设置网卡为混杂模式设置网卡为混杂模式v在正常的情况下,一个网络接口应该只响应两种在正常的情况下,一个网络接口应该只响应两种数据帧:一种是与自己硬件地址相匹配的数据帧;数据帧:一种是与自己硬件地址相匹配的数据帧;一种是发向所有机器的广播数据帧。如果要网卡一种是发向所有机器的广播数据帧。如果要网卡接收所有通过它的数据接收所有通过它的数据, 而不管是不是发给它的而不管是不是发给它的, 那么必须把网卡置于混杂模式那么必须把网卡置于混杂模式v创建原始套接字之后,将它绑定到一个明确的本创建原始套接字之后,将它绑定到一个明确的本地地址,然后向套接字发送地地址,然后向套接字发
6、送SIO_RCVALL控制控制命令,让它接收所有的命令,让它接收所有的IP包,这样网卡便进入了包,这样网卡便进入了混杂模式。混杂模式。网络编程技术网络编程技术代码详解代码详解ioctlsocket()函数函数v 此函数功能是控制套接字的模式,可以用来设置网卡的工作此函数功能是控制套接字的模式,可以用来设置网卡的工作模式为混杂模式模式为混杂模式v int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);v 参数参数s:一个标识套接字的描述字。:一个标识套接字的描述字。v 参数参数cmd:对套接字:对套接字s的操作命令。的
7、操作命令。v 参数参数argp:指向:指向cmd命令所带参数的指针。命令所带参数的指针。v 本例中调用本例中调用ioctlsocket()函数时,代码是:函数时,代码是:ioctlsocket(sRaw, SIO_RCVALL, &dwValue);其中第一个参数是用于接收其中第一个参数是用于接收IP包包socket,第二个参数是第二个参数是SIO_RCVALL,表示接收所有的,表示接收所有的IP包,第三个参数包,第三个参数dwValue值为值为1。 网络编程技术网络编程技术截获局域网内登陆截获局域网内登陆FTP的用户名和密码的用户名和密码 v密码失窃的主要原因是,密码和用户名是通过明密码失窃
8、的主要原因是,密码和用户名是通过明文传输的。文传输的。v互联网上大量使用的互联网上大量使用的HTTP、FTP、SMTP (虽虽然经过了编码,但是解码方法是公开的然经过了编码,但是解码方法是公开的)等都是不等都是不加密的。加密的。v本例就实现了获取局域网内所有登陆本例就实现了获取局域网内所有登陆FTP的用户的用户名和密码的功能。名和密码的功能。 网络编程技术网络编程技术原理解析原理解析 v上面的实例中实现了一个简单的上面的实例中实现了一个简单的Sniffer程序,程序,该程序可以截获局域网内的所有数据包,并根据该程序可以截获局域网内的所有数据包,并根据数据包的内容进行初步的解析,判断哪些数据包数
9、据包的内容进行初步的解析,判断哪些数据包是是TCP包包v本例是在上个实例的基础上,进一步解析本例是在上个实例的基础上,进一步解析TCP包,包,检查封包的目的端口号,如果是检查封包的目的端口号,如果是21端口,就说明端口,就说明使用的是使用的是FTP协议,从而分析出哪些是协议,从而分析出哪些是FTP数据数据包,并从包,并从FTP包中取出登陆的用户名和密码,显包中取出登陆的用户名和密码,显示出来。示出来。 网络编程技术网络编程技术解析解析TCP数据包,取出登陆数据包,取出登陆FTP的用户名和密码的用户名和密码 void GetFtp(char *pData, DWORD dwDestIp)char
10、 szBuf256;static char szUserName21;static char szPassword21;if(strnicmp(pData, USER , 5) = 0) sscanf(pData + 4, %* %s, szUserName);else if(strnicmp(pData, PASS , 5) = 0) sscanf(pData + 4, %* %s, szPassword); wsprintf(szBuf, Server Address: %s; User Name: %s; Password: %s; nn, :inet_ntoa(*(in_addr*)&
11、dwDestIp), szUserName, szPassword); printf(szBuf);/ 这里您可以将它保存到文件中这里您可以将它保存到文件中 网络编程技术网络编程技术课堂练习题课堂练习题v 网卡通常有两种工作模式,即网卡通常有两种工作模式,即 和和 。v 主机在接收到目的地址是本地的数据包的时候才主机在接收到目的地址是本地的数据包的时候才会接受,其他的数据包会丢弃,这个工作是会接受,其他的数据包会丢弃,这个工作是 来完成的。来完成的。v 为了捕获网络中的所有数据包,我们需要将网卡为了捕获网络中的所有数据包,我们需要将网卡设置成设置成 模式。模式。v 解析解析TCP包,检查封包的目的端口号,如果是包,检查封包的目的端口号,如果是端口号是端口号是 ,则说明使用的是,则说明使用的是FTP协议。协议。