数据包的捕获与分析 文档_第1页
数据包的捕获与分析 文档_第2页
数据包的捕获与分析 文档_第3页
数据包的捕获与分析 文档_第4页
数据包的捕获与分析 文档_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、置网卡为混杂模式,4.,开始循环接收数据,5.,关闭,Socket,5,关键代码,1,:,创建原始,Socket,SnifferSocket = socket(AF_INET,SOCK_RAW,IPPROTO_IP,);,if (Result = SOCKET_ERROR),printf(socket failed with error %dn,WSAGetLastError();,return 0;,6,原始,socket,的特点,?,应用程序可以收到目标是其它主机的包,?,应用程序会收到,ip,包,?,如果设置,IP_HDRINCL,选项,可以手动设置,发送的,ip,包的头部,?,不能拦截

3、数据,因为系统采用的是拷贝的方,式,?,由于安全原因,在,xp-sp2,,,windows 7,中原,始,socket,的使用有限制:,?,不能发送,tcp,包,?,不能使用伪造的原,ip,地址,7,关键代码,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_

4、port = htons(5555);,memcpy(,Result = bind(SnifferSocket, (PSOCKADDR),想,想看,这里端,口,号,有,没有,意义,,,这,个,值合不合适,一,定是,第一个,接,口,吗?,8,获取本地接口的更好方法,1.,SOCKADDR_IN,input;,2.,char,remoteip=;/,可以是任意地址,3.,short,remoteport=80;,4.,char,buf1024;,5.,input.sin_family = AF_INET;,6.,input.sin_addr.s_addr = inet_addr(re

5、moteip);,7.,input.sin_port = htons(remoteport);,8.,9.,Result =,WSAIoctl,(SnifferSocket,SIO_ROUTING_INTERFACE_QUERY, ,11.,sock.sin_addr=lpIf-sin_addr;,9,关键代码,3,:设置为混杂模式,u_long,InOutParam=1;,Result =ioctlsocket(SnifferSocket,SIO_RCVALL, ,参数,InOutParam,表示命令,SIO_RCVALL,的输,入参数,WSAIoctl,是相应的,Winows,扩展函数,更

6、复杂,,更强大。,10,以太网卡的工作模式,?,网卡的,MAC,地址,(48,位,),?,通过,ARP,来解析,MAC,与,IP,地址的转换,?,用,ipconfig/ifconfig,可以查看,MAC,地址,?,正常情况下,网卡应该只接收这样的包,?,MAC,地址与自己相匹配的数据帧,?,广播包,?,网卡完成收发数据包的工作,两种接收模式,?,混杂模式:不管数据帧中的目的地址是否与自己的地址匹配,,都接收下来,?,非混杂模式:只接收目的地址相匹配的数据帧,以及广播数,据包,(,和组播数据包,),?,为了监听网络上的流量,必须设置为混杂模式,11,共享网络和交换网络,?,共享式网络,?,通过网

7、络的所有数据包发往每一个主机,?,最常见的是通过,HUB,连接起来的子网,?,交换式网络,?,通过交换机连接网络,?,由交换机构造一个“,MAC,地址,-,端口”映射表,?,发送包的时候,只发到特定的端口上,12,关键代码,4,:读取数据,char Packet60000;,Result =,recv,(SnifferSocket, Packet,sizeof(Packet), 0);,还有没有更好的处理?,struct sockaddr_in from;,int fromlen ;,Result =,recvfrom,(SnifferSocket, Packet,sizeof(Packet)

8、, 0, (struct,sockaddr*),13,?,阅读,p227-229,的代码,?,课后请上机测试,并运行,?,注意:编译时可能报错,找不到头文件,mstcpip.h,,请自己上网查找资料来解决。,14,使用原始,socket,抓包的缺点,?,要求管理员权限;,?,在,windows 7,之前,该方法只能抓到进来的,包;,?,没有内核级的过滤机制,只能有程序员自,己来过滤,既复杂又很慢,在千兆网上很,容易丢包;,?,不能获取链路层信息;,?,不能获取,arp,包。,15,2.,进行协议分析,?,目的:对抓获的包进行分析,是不是,ip,包,,ip,的头部各个字段是什么,是不是,tcp,

9、或,udp,报文等待?,?,故首先我们需要对,ip,,,tcp,和,udp,等协议有所,了解,特别是它们的头部字段。,16,2.1 TCP/IP,协议族中的协议,用户进程,用户进程,用户进程,用户进程,TCP,UDP,ICMP,IP,IGMP,ARP,硬件接口,RARP,应用层,传输层,网络层,网络接口层,媒体,那我们发送和接收,的数据包的大致格式,是什么样的?请以一,个网页包为例来说明。,17,2.2,协议分析的难点,?,在前面抓包程序的基础上,增加简单的协,议分析。,?,协议分析的实质就是识别各个协议头,及,其头部各个字段的含义。,?,故为了程序的处理,必须定义协议头的数,据结构。,18,

10、IP,数据报格式,版本,头部长度,服务类型,(,TOS,),总长度,(,字节数,),标识符,3,位,标志,段偏移,生存时间,(,TTL,),协议,头部校验和,源,IP,地址,目的,IP,地址,选项(如果有),0 3 4 7 8 15 16 31,20,字节,数据,19,IP,头,struct IPHeader,unsigned char Version_HLen;,unsigned char TOS;,unsigned short Length;,unsigned short Ident;,unsigned short Flags_Offset;,unsigned char TTL;,unsi

11、gned char Protocol;,unsigned short Checksum;,unsigned int SourceAddr;,unsigned int DestinationAddr;,;,假设已获取一个,ip,头部的,指针,ip,,如何获取版本信,息呢?,ip-Version_HLen, 4,如何获取头部长度呢?,(ip-Version_HLen,?,现在就可根据数据结构,IPHeader,和,ip,头的标,准,来获取,ip,头部各个字段的值,?,参见,p233-p234,的相关代码,应该写成子函,数的形式。,21,如何判断传输层的协议,#define TCP_PROTOCAL

12、 6,#define UDP_PROTOCAL 17,unsigned char Prot=ip-Protocol;,22,TCP,包首部数据格式,源端口号,(,16,位),目的端口号,(,16,位),序号,(,32,位),确认序号,(,32,位),首部长,度,(4,位,),保留,(,6,位),U,R,G,A,C,K,P,S,H,R,S,T,S,Y,N,F,I,N,窗口大小,(,16,位),校验和,(,16,位),紧急指针,(,16,位),选项(任选,若有),填充,紧急数据,数据,23,TCP,头,struct TcpHeader,unsigned short SrcPort;,unsigne

13、d short DstPort;,unsigned int SequenceNum;,unsigned int Acknowledgment;,unsigned char HdrLen;,unsigned char Flags;,unsigned short AdvertisedWindow;,unsigned short Checksum;,unsigned short UrgPtr;,;,假设已获取一个,tcp,头部,的指针,tcp,,如何获取源,端口?,ntohs(tcp-SrcPort),如何判断是不是,SYN,包?,(tcp-Flags,struct TcpHeader *tcp =

14、 (struct,TcpHeader*)(char *)ip + IpHeaderLength);,?,现在就可根据数据结构,TcpHeader,和,tcp,头的标准,,来获取,tcp,头部各个字段的值,?,参见,p234-p235,的相关代码,应该写成子函数的,形式。,25,UDP,报文格式,?,端口号:表示发送进程和接收进程,?,UDP,长度:包括,UDP,头和,UDP,数据,?,UDP,报文校验和:可选,为,0,表示不做校验,26,UDP,头,struct UdpHeader,unsigned short SrcPort;,unsigned short DstPort;,unsigned

15、 short Length;,unsigned short Checksum;,;,简单得多,27,3 Winpcap,概述,?,Winpcap,是,libpcap,在,Win32,平台上移植,是一个,用于抓包和网络分析的架构,且开源。,?,捕获原始数据包,,包括链路层信息。,?,有内核级的过滤机制,用户设置非常简单,?,独立于主机协议(如,TCP-IP),而发送和接收原始数,据报。也就是说,,winpcap,不能阻塞,过滤或控,制其他应用程序数据报的收,发。,?,很多软件必须安装,WinPcap,才能用的。比如,wireshark,,网络执法管、,P2P,终结者、,QQ,第六感,等嗅探和监控

16、软件,。,28,Winpcap,的安装,?,下载,winpcap,的驱动程序和相应版本的,wpdpack,开发包,?,安装驱动,?,把,wpdpack,开发包解压到自己选定的目录,?,在,vc,中(,tools-option-directories,)设定,include,目录和,library,目录,?,连接,wpcap.lib,29,数据包捕获流程图,pcap_findalldevs(),获取,网络设备列表,pcap_open_live(),打开设备,,设为混杂模式,pcap_compile(),编译过滤器,pcap_setfilter(),设置过滤器,pcap_next_ex(),循环捕

17、获数据包,pcap_freealldevs(),关闭网络设备,PacketHandler(),处理数据包,30,3.1,网络设备的发现,int,pcap_findalldevs( pcap_if_t *alldev,char *errbuf);,返回一个指向网络设备列表的指针。,返回值:,-1,:出错,0,:成功,pcap_freealldevs (pcap_if_t *alldev);,更复杂更强大的函数,int pcap_findalldevs_ex (char *,source,struct,pcap_rmtauth,*,auth,pcap_if_t,*,alldevs,char,*,e

18、rrbuf,),31,接口,struct pcap_if ,struct pcap_if *next;,/,下一个接口,char *name;,/,接口名,char *description;,struct pcap_addr *addresses;,bpf_u_int32 flags;,/,目前只支,PCAP_IF_LOOPBACK,;,32,接口地址,struct pcap_addr ,struct pcap_addr *next;,struct sockaddr *addr;,struct sockaddr *netmask;,struct sockaddr *broadaddr;,st

19、ruct sockaddr *dstaddr;,/ P2P,;,33,3.2,打开接口获取抓包描述符,pcap_t *,pcap_open_live,(,char *device, /,接口名,int snaplen,/,抓取数据包的最大长度,,/,多出部分将被截断,int promisc, /,是否为混杂模式,int to_ms, /,读多少毫秒的包后再返回,char *errorbuf);,用途:,用来获取一个抓包的,descriptor,;,返回值为,NULL,表失败,void pcap_close (,pcap_t,*,p,),34,3.3,设置,filter,?,int,pcap_c

20、ompile,(pcap_t *p, struct,bpf_program *fp, char *str, int optimize,bpf_u_int32 netmask),把用户容易理解的字符串形式的过滤规则,str,翻,译成一个程序可以识别的过滤器规则,fp,?,Netmask,:被抓包的掩码,用于检查,ipv4,的广播包,?,返回值为,-1,时出错,?,int,pcap_setfilter,(pcap_t *p, struct,bpf_program *fp),设置一个过滤器,35,a.,捕获,MAC,地址为,00:d0:f8:00:00:03,网络设备通信的所,有报文,ether h

21、ost 00:d0:f8:00:00:03,b.,捕获,IP,地址为,,网络设备通信的所有报文,host ,c.,捕获网络,web,浏览的所有报文,tcp port 80,d.,捕获,,除了,http,外的所有通信数据报文,host and not tcp port 80,这些过滤规则也是软件,Ethereal,直接使用的规则,过滤规则举例,36,更一般的过滤规则,?,src|dst host ,?,ether src|dst host ,?,gateway host ,?,src|dst net

22、 mask |len ,?,tcp|udp src|dst port ,?,less|greater ,?,ip|ether proto ,?,ether|ip broadcast|multicast,37,3.4,捕获数据,int,pcap_loop,(pcap_t *p,int cnt, /,捕获的最大数目,,-1,表无限,pcap_handler callback, /,用户的处理函数,u_char *user/,回调函数的参数,),返回值:,-1,出错,,0,表,cnt,耗尽,int pcap_next_ex (,pcap_t,*,p,struct,pcap_pkthdr,*,pkt_header,const u_char *,pkt_data,),38,3.5,用户的包处理函数,void CallbackFunc(unsigned char *user,const struct pcap_pkthdr *winpcaphead,const unsigned cha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论