电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

手把手教你捕获数据包VIP免费

手把手教你捕获数据包_第1页
1/8
手把手教你捕获数据包_第2页
2/8
手把手教你捕获数据包_第3页
3/8
手把手教你捕获数据包【导读】在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的的数据包。一.捕获数据包的实现原理:在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的的数据包。所以我们要想实现截获流经网络设备的所有数据包,就要采取一点特别的手段了:将网卡设置为混杂模式。这样一来,该主机的网卡就可以捕获到所有流经其网卡的数据包和帧。但是要注意一点,这种截获仅仅是数据包的一份拷贝,而不能对其进行截断,要想截断网络流量就要采用一些更底层的办法了,不在本文的讨论范围之内。二.捕获数据包的编程实现:1.rawsocket的实现方法不同于我们常用的数据流套接字和数据报套接字,在创建了原始套接字后,需要用WSAIoctl()函数来设置一下,它的定义是这样的intWSAIoctl(SOCKETs,DWORDdwIoControlCode,LPVOIDlpvInBuffer,DWORDcbInBuffer,LPVOIDlpvOutBuffer,DWORDcbOutBuffer,LPDWORDlpcbBytesReturned,LPWSAOVERLAPPEDlpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine);虽然咋一看参数比较多,但是其实我们最关心的只是其中的第二项而已,我们需要做的就是把第二项设置为SIO_RCVALL,讲了这么多其实要做的就是这么一行代码,很简单吧?^_^当然我们还可以指定是否亲自处理IP头,但是这并不是必须的。完整的代码类似与如下这样,加粗的代码是与平常不同的需要注意的地方:(为了让代码一目了然,我把错误处理去掉了,下同)#include“WinSock2.h”#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)SOCKETSnifferSocketWSADATAwsaData;iFlag=WSAStartup(MAKEWORD(2,2),&wsaData);//开启winsock.dllSnifferSocket=WSASocket(AF_INET,//创建rawsocketSOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);charFARname[128];//获取本机IP地址gethostname(name,sizeof(name));structhostentFAR*pHostent;pHostent=gethostbyname(name);SOCKADDR_INsa;//填充SOCKADDR_IN结构的内容sa.sin_family=AF_INET;sa.sin_port=htons(6000);//端口号可以随便改,当然与当然系统不能冲突memcpy(&(sa.sin_addr),pHostent->h_addr,pHostent->h_length);bind(SnifferSocket,(LPSOCKADDR)&sa,sizeof(sa));//绑定//置ioctl来接收所有网络数据,关键步骤DWORDdwBufferLen[10];DWORDdwBufferInLen=1;DWORDdwBytesReturned=0;WSAIoctl(SnifferSocket,IO_RCVALL,&dwBufferInLen,izeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);至此,实际就可以开始对网络数据包进行嗅探了,而对于数据包的接收还是和普通的socket一样,通过recv()函数来完成,因为这里涉及到不同的socket模型,接收方法差别很大,所以在此就不提供接收的代码了。2.winpcap的实现方法:-----------------------------------------------------------------------winpcap驱动包,是我们玩转数据包不可或缺的好东东,winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报,主要为我们提供了四大功能:功能:1>捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;2>在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3>在网络上发送原始的数据报;4>收集网络通信过程中的统计信息如果环境允许的话(比如你做的不是木马程序),我还是推荐大家用winpcap来截获数据包,因为它的功能更强大,工作效率更高,唯一的缺点就是在运行用winpcap开发的程序以前,都要在主机上先安装winpcap的driver。而且一会我们就会发现它比rawsocket功能强大的多,而且工作得更为底层,最明显的理由就是rawsocket捕获的数...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

手把手教你捕获数据包

您可能关注的文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部