数据包的捕获与分析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据包的捕获与分析课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据包 捕获 分析 课件
- 资源描述:
-
1、网络安全编程技术n第第3讲:数据包的捕获与分析讲:数据包的捕获与分析1 编程实现一个协议分析器。该协议分析器将包编程实现一个协议分析器。该协议分析器将包含以下几部分功能含以下几部分功能:1.数据采集数据采集捕捉捕捉Ethernet网网络络数据包;数据包;2.解析解析Ethernet网数据帧头部的全部信息;网数据帧头部的全部信息;3.解析解析IP数据包的头部信息;数据包的头部信息;4.解析解析TCP和和UDP包的头部信息;包的头部信息;2主要内容n用原始Socket抓包n进行协议分析n使用开发工具包WinPcap抓包31.用原始Socket抓包流程1.创建原始Socket2.获取一个需要监听网络
2、接口的ip地址,并绑定(必须要显示绑定)3.设置网卡为混杂模式4.开始循环接收数据5.关闭Socket4关键代码1:创建原始SocketSnifferSocket=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(Result=SOCKET_ERROR)printf(socket failed with error%dn,WSAGetLastError();return 0;5原始socket的特点n应用程序可以收到目标是其它主机的包n应用程序会收到ip包n如果设置IP_HDRINCL 选项,可以手动设置发送的ip包的头部n不能拦截数据,因为系统采用的是拷贝的方式n
3、由于安全原因,在xp-sp2,windows 7中原始socket的使用有限制:n不能发送tcp包n不能使用伪造的原ip地址6关键代码2:绑定到一个本地IP地址 Result=gethostname(Name,255);pHostent=(struct hostent*)malloc(sizeof(struct hostent);pHostent=gethostbyname(Name);SOCKADDR_IN sock;sock.sin_family=AF_INET;sock.sin_port=htons(5555);memcpy(&sock.sin_addr.S_un.S_addr,pHos
4、tent-h_addr_list0,pHostent-h_length);Result=bind(SnifferSocket,(PSOCKADDR)&sock,sizeof(sock);想想看这里端口号有没有意义,这个值合不合适一定是第一个接口吗?7获取本地接口的更好方法1.SOCKADDR_INinput;2.charremoteip=8.8.8.8;/可以是任意地址3.shortremoteport=80;4.charbuf1024;5.input.sin_family=AF_INET;6.input.sin_addr.s_addr=inet_addr(remoteip);7.input.
5、sin_port=htons(remoteport);8.9.Result=WSAIoctl(SnifferSocket,SIO_ROUTING_INTERFACE_QUERY,&input,sizeof(input),buf,1024,&dwBytesRet,NULL,NULL);10.SOCKADDR_IN*lpIf=(SOCKADDR_IN*)buf;11.sock.sin_addr=lpIf-sin_addr;8关键代码3:设置为混杂模式u_long InOutParam=1;Result=ioctlsocket(SnifferSocket,SIO_RCVALL,&InOutParam
6、);参数InOutParam表示命令SIO_RCVALL 的输入参数WSAIoctl是相应的Winows扩展函数,更复杂,更强大。9以太网卡的工作模式n网卡的MAC地址(48位)n通过ARP来解析MAC与IP地址的转换n用ipconfig/ifconfig可以查看MAC地址n正常情况下,网卡应该只接收这样的包nMAC地址与自己相匹配的数据帧n广播包n网卡完成收发数据包的工作,两种接收模式n混杂模式:不管数据帧中的目的地址是否与自己的地址匹配,都接收下来n非混杂模式:只接收目的地址相匹配的数据帧,以及广播数据包(和组播数据包)n为了监听网络上的流量,必须设置为混杂模式10共享网络和交换网络n共享
7、式网络n通过网络的所有数据包发往每一个主机n最常见的是通过HUB连接起来的子网n交换式网络n通过交换机连接网络n由交换机构造一个“MAC地址-端口”映射表n发送包的时候,只发到特定的端口上11关键代码4:读取数据 char Packet60000;Result=recv(SnifferSocket,Packet,sizeof(Packet),0);还有没有更好的处理?struct sockaddr_in from;int fromlen;Result=recvfrom(SnifferSocket,Packet,sizeof(Packet),0,(struct sockaddr*)&from,&
8、fromlen);12n阅读p227-229的代码n课后请上机测试,并运行n注意:编译时可能报错,找不到头文件mstcpip.h,请自己上网查找资料来解决。13使用原始socket抓包的缺点n要求管理员权限;n在windows 7之前,该方法只能抓到进来的包;n没有内核级的过滤机制,只能有程序员自己来过滤,既复杂又很慢,在千兆网上很容易丢包;n不能获取链路层信息;n不能获取arp包。142.进行协议分析n目的:对抓获的包进行分析,是不是ip包,ip的头部各个字段是什么,是不是tcp或udp报文等待?n故首先我们需要对ip,tcp和udp等协议有所了解,特别是它们的头部字段。152.1 TCP/
9、IP协议族中的协议协议族中的协议用户进程用户进程用户进程用户进程用户进程用户进程用户进程用户进程TCPTCPUDPUDPICMPICMPIPIPIGMPIGMPARPARP硬件接口硬件接口RARPRARP应用层应用层传输层传输层网络层网络层网络接口层网络接口层媒体媒体那我们发送和接收的数据包的大致格式是什么样的?请以一个网页包为例来说明。162.2 协议分析的难点n在前面抓包程序的基础上,增加简单的协议分析。n协议分析的实质就是识别各个协议头,及其头部各个字段的含义。n故为了程序的处理,必须定义协议头的数据结构。17IP数据报格式版本版本头部长度头部长度服务类型服务类型(TOS)总长度总长度(
10、字节数字节数)标识符标识符3位位标志标志段偏移段偏移生存时间生存时间(TTL)协议协议头部校验和头部校验和源源IP地址地址目的目的IP地址地址选项(如果有)选项(如果有)数据数据18IP头struct IPHeader unsigned char Version_HLen;unsigned char TOS;unsigned short Length;unsigned short Ident;unsigned short Flags_Offset;unsigned char TTL;unsigned char Protocol;unsigned short Checksum;unsigned
11、int SourceAddr;unsigned int DestinationAddr;假设已获取一个ip头部的指针ip,如何获取版本信息呢?ip-Version_HLen 4如何获取头部长度呢?(ip-Version_HLen&0 x0f)*4如何更好的定义版本和头部长度字段?19IP协议分析n获取一个ip包Packetn强制类型转换struct IPHeader*ip=(struct IPHeader*)Packet;n现在就可根据数据结构IPHeader和ip头的标准,来获取ip头部各个字段的值n参见p233-p234的相关代码,应该写成子函数的形式。20如何判断传输层的协议#defin
展开阅读全文