数据包的捕获与分析

数据包的捕获与分析

ID:6138347

大小:353.50 KB

页数:41页

时间:2017-11-16

数据包的捕获与分析_第1页
数据包的捕获与分析_第2页
数据包的捕获与分析_第3页
数据包的捕获与分析_第4页
数据包的捕获与分析_第5页
资源描述:

《数据包的捕获与分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、网络安全编程技术第3讲:数据包的捕获与分析任德斌本讲编程训练目标编程实现一个协议分析器。该协议分析器将包含以下几部分功能:数据采集——捕捉Ethernet网络数据包;解析Ethernet网数据帧头部的全部信息;解析IP数据包的头部信息;解析TCP和UDP包的头部信息;2主要内容用原始Socket抓包进行协议分析使用开发工具包WinPcap抓包31.用原始Socket抓包流程创建原始Socket获取一个需要监听网络接口的ip地址,并绑定(必须要显示绑定)设置网卡为混杂模式开始循环接收数据关闭Socket4关键代码1:创建原始SocketSnifferSocket=socket(AF_INET,

2、SOCK_RAW,IPPROTO_IP);if(Result==SOCKET_ERROR){printf("socketfailedwitherror%d",WSAGetLastError());return0;}5原始socket的特点应用程序可以收到目标是其它主机的包应用程序会收到ip包如果设置IP_HDRINCL选项,可以手动设置发送的ip包的头部不能拦截数据,因为系统采用的是拷贝的方式由于安全原因,在xp-sp2,windows7中原始socket的使用有限制:不能发送tcp包不能使用伪造的原ip地址6关键代码2:绑定到一个本地IP地址Result=gethostname(Nam

3、e,255);pHostent=(structhostent*)malloc(sizeof(structhostent));pHostent=gethostbyname(Name);SOCKADDR_INsock;sock.sin_family=AF_INET;sock.sin_port=htons(5555);memcpy(&sock.sin_addr.S_un.S_addr,pHostent->h_addr_list[0],pHostent->h_length);Result=bind(SnifferSocket,(PSOCKADDR)&sock,sizeof(sock));想想看这里端

4、口号有没有意义,这个值合不合适一定是第一个接口吗?7获取本地接口的更好方法SOCKADDR_INinput;charremoteip[]="8.8.8.8";//可以是任意地址shortremoteport=80;charbuf[1024];input.sin_family=AF_INET;input.sin_addr.s_addr=inet_addr(remoteip);input.sin_port=htons(remoteport);Result=WSAIoctl(SnifferSocket,SIO_ROUTING_INTERFACE_QUERY,&input,sizeof(input)

5、,buf,1024,&dwBytesRet,NULL,NULL);SOCKADDR_IN*lpIf=(SOCKADDR_IN*)buf;sock.sin_addr=lpIf->sin_addr;8关键代码3:设置为混杂模式u_longInOutParam=1;Result=ioctlsocket(SnifferSocket,SIO_RCVALL,&InOutParam);参数InOutParam表示命令SIO_RCVALL的输入参数WSAIoctl是相应的Winows扩展函数,更复杂,更强大。9以太网卡的工作模式网卡的MAC地址(48位)通过ARP来解析MAC与IP地址的转换用ipconfi

6、g/ifconfig可以查看MAC地址正常情况下,网卡应该只接收这样的包MAC地址与自己相匹配的数据帧广播包网卡完成收发数据包的工作,两种接收模式混杂模式:不管数据帧中的目的地址是否与自己的地址匹配,都接收下来非混杂模式:只接收目的地址相匹配的数据帧,以及广播数据包(和组播数据包)为了监听网络上的流量,必须设置为混杂模式10共享网络和交换网络共享式网络通过网络的所有数据包发往每一个主机最常见的是通过HUB连接起来的子网交换式网络通过交换机连接网络由交换机构造一个“MAC地址-端口”映射表发送包的时候,只发到特定的端口上11关键代码4:读取数据charPacket[60000];Result=

7、recv(SnifferSocket,Packet,sizeof(Packet),0);还有没有更好的处理?structsockaddr_infrom;intfromlen;Result=recvfrom(SnifferSocket,Packet,sizeof(Packet),0,(structsockaddr*)&from,&fromlen);12阅读p227-229的代码课后请上机测试,并运行注意:编译时

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。