版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、- | SMTP | DNS | HTTP | FTP | TELNET| 应用层应用层 - | TCP | UDP | 传输层传输层 - | IP | ICMP | ARP RARP | 网络层网络层 - | IEEE 802 以太网以太网 SLIP/PPP PDN etc| 数据链路层数据链路层 - 以太网最初是由以太网最初是由XEROX公司研制公司研制,并且在并且在1980年由数据年由数据设备公司设备公司DEC(DIGIAL EQUIPMENT CORPOR ATION)、INTEL公司和公司和XEROX公司共同使之规范成形。后来它被作公司共同使之规范成形。后来它被作为为802.3标准为
2、电气与电子工程师协会(标准为电气与电子工程师协会(IEEE)所采纳。)所采纳。 以太网是最为流行的网络传输系统之一以太网是最为流行的网络传输系统之一。以太网的基本。以太网的基本特征是采用一种称为特征是采用一种称为载波监听多路访问载波监听多路访问/冲突检测冲突检测CSMA/CD (Carrier Sense Multiple Access/ Collision Detection)的的共享访问方案。共享访问方案。 载波监听载波监听指在以太网中的每个站点都具有同等的权利,在传输自己指在以太网中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲,如果空闲,就传输自的数据时,首先监听
3、信道是否空闲,如果空闲,就传输自己的数据,如果信道被占用,就等待信道空闲。己的数据,如果信道被占用,就等待信道空闲。 冲突检测冲突检测为了防止发生两个站点同时监测到网络没有被使用时而产为了防止发生两个站点同时监测到网络没有被使用时而产生冲突。以太网采用生冲突。以太网采用广播机制广播机制,所有与网络连接的工作站,所有与网络连接的工作站都可以看到网络上传递的数据。都可以看到网络上传递的数据。CSMA/CD过程网卡的网卡的MAC地址地址每一个网络接口都有一个每一个网络接口都有一个唯一的硬件地址唯一的硬件地址,这个硬件地,这个硬件地址也就是网卡的址也就是网卡的MAC地址地址 。大多数系统使用大多数系统
4、使用48比特的地址,这个地址用来表示网络比特的地址,这个地址用来表示网络中的每一个设备中的每一个设备一般来说每一块网卡上的一般来说每一块网卡上的MAC地址都是不同的地址都是不同的每个网卡厂家得到一段地址,然后用这段地址分配给其每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。生产的每个网卡一个地址。 数据的收发是由网卡来完成的数据的收发是由网卡来完成的网卡接收到传输来的数据,网卡内的单片程序接收数据网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的帧的目的MAC地址,根据计算机上的网卡驱动程序设置地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收。的接收模
5、式判断该不该接收。认为该接收就接收后产生认为该接收就接收后产生中断信号中断信号通知通知CPU认为不该接收就丢掉不管,所以不该接收的数据网卡就认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道截断了,计算机根本就不知道.CPU得到中断信号产生中断,操作系统就根据网卡的驱得到中断信号产生中断,操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用动程序设置的网卡中断程序地址调用驱动程序接收数据驱动程序接收数据驱动程序接收数据后放入信号堆栈让操作系统处理。驱动程序接收数据后放入信号堆栈让操作系统处理。 总结一下总结一下首先,我们知道了在以太网中是基于首先,我们知道了在以太网中
6、是基于广播方式广播方式传送数据的,传送数据的,也就是说,所有的物理信号都要经过我的机器,也就是说,所有的物理信号都要经过我的机器,其次,广播模式下,网卡的一种模式叫其次,广播模式下,网卡的一种模式叫混杂模式混杂模式 (promiscuous),在这种模式下工作的网卡能够接收到一),在这种模式下工作的网卡能够接收到一切通过它的数据,而不管实际上数据的目的地址是不是它。切通过它的数据,而不管实际上数据的目的地址是不是它。再次,再次, 通过设置交换机监听端口。监听端口带宽要通过设置交换机监听端口。监听端口带宽要大于大于所监所监听的端口带宽,防止丢包。听的端口带宽,防止丢包。 不同的操作系统实现的底层
7、包捕获机制可能是不一不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路样的,但从形式上看大同小异。数据包常规的传输路径依次为径依次为网卡接口网卡接口、设备驱动层设备驱动层、数据链路层数据链路层、IP层层、传输层传输层、最后到达、最后到达应用程序应用程序。而包捕获机制是在。而包捕获机制是在数据数据链路层链路层增加一个增加一个旁路处理旁路处理,对发送和接收到的数据包,对发送和接收到的数据包做做过滤过滤/缓冲缓冲等相关处理,最后直接传递到应用程序。等相关处理,最后直接传递到应用程序。 旁路处理机制旁路处理机制数据包捕获流程数据包捕获流程struct pcap_
8、addr:网卡地址描述网卡地址描述 pcap_addr * next; sockaddr * addr; sockaddr * netmask; sockaddr *broadaddr; sockaddr *dstaddr;pcap_addr * next; 如果非空,指向链表中一个元素的指针;空表示链表中的最后一个元素。如果非空,指向链表中一个元素的指针;空表示链表中的最后一个元素。sockaddr * addr; 指向包含一个地址的指向包含一个地址的sockaddr的结构的指针。的结构的指针。sockaddr * netmask; 如果非空,指向包含相对于如果非空,指向包含相对于addr指
9、向的地址的一个网络掩码的结构。指向的地址的一个网络掩码的结构。sockaddr * broadaddr; 如果非空,指向包含相对于如果非空,指向包含相对于addr指向的地址的一个广播地址,如果网络不支指向的地址的一个广播地址,如果网络不支持广播可能为空。持广播可能为空。sockaddr * dstaddr; 如果非空,指向一个相对于如果非空,指向一个相对于addr指向的源地址的目的地址,如果网络不支持指向的源地址的目的地址,如果网络不支持点对点通讯,则为空。点对点通讯,则为空。struct pcap_file_header bpf_u_int32 magic; u_short version_
10、major; u_short version_minor; bpf_int32 thiszone; /* gmt to local correction */ bpf_u_int32 sigfigs; /* accuracy of timestamps */ bpf_u_int32 snaplen; /* max length saved portion of each pkt */ bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */;u_short version_major; Libpcap的主版本号。的主版本号。u_shart
11、version_minor; Libpcap的从版本号。的从版本号。bpf_u_int32 sigfigs; 时间戳描述。时间戳描述。bpf_u_int32 snaplen; 保存的每个保存的每个pkt的分片号的最大值。的分片号的最大值。bpf_u_int32 linktype; 数据链的类型。数据链的类型。细节说明:细节说明: libpcap dump文件头;文件头; libpcap dump文件中的第一个记录包含了一些标志的保存值,这些标志在打文件中的第一个记录包含了一些标志的保存值,这些标志在打印阶段用到。这儿的很多域都是印阶段用到。这儿的很多域都是32位的位的int,所以,所以comp
12、ilers不用进行转化;这不用进行转化;这些文件需要具有跨层次的可交换性。些文件需要具有跨层次的可交换性。 无论如何不要改变结构的层次(包括仅仅改变这个结构中域的长度);无论如何不要改变结构的层次(包括仅仅改变这个结构中域的长度);struct pcap_if /*网卡数据链的一个元素网卡数据链的一个元素*/ struct pcap_if *next; char *name; /* name to hand to pcap_open_live() */ char *description; /* textual description of interface, or NULL */ stru
13、ct pcap_addr *addresses; u_int flags; /* PCAP_IF_ interface flags */;pcap_if *next; 如果非空,指向链的下一个元素。如果为空是链的最后一个元素。如果非空,指向链的下一个元素。如果为空是链的最后一个元素。char * name; 指向一个字符串,该字符串是传给指向一个字符串,该字符串是传给pcap_open_live()函数的设备名;函数的设备名;char * description; 如果非空,指向一个对设备的人性化的描述字符串。如果非空,指向一个对设备的人性化的描述字符串。pcap_addr *addresse
14、s; 指向网卡地址链中的第一个元素。指向网卡地址链中的第一个元素。u_int flags; PCAP_IF_ 网卡的标志。现在唯一可用的标识是网卡的标志。现在唯一可用的标识是PCAP_IF_LOOKBACK,它被它被用来标识网卡是不是用来标识网卡是不是lookback网卡。网卡。struct pcap_pkthdr /*dump 文件中的数据包头文件中的数据包头*/ struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length
15、this packet (off wire) */;timeval ts; 数据报时间戳;数据报时间戳;bpf_u_int32 caplen; 当前分片的长度;当前分片的长度;dpf_u_int32 len; 这个数据报的长度;这个数据报的长度;细节描述:细节描述: 在在dump文件中的每个数据报都有这样一个报头。它用来处理不同数文件中的每个数据报都有这样一个报头。它用来处理不同数据报网卡的不同报头问题。据报网卡的不同报头问题。struct pcap_stat /*用来保存网卡静态变量的结构用来保存网卡静态变量的结构*/ u_int ps_recv; /* number of packets
16、received */ u_int ps_drop; /* number of packets dropped */ u_int ps_ifdrop; /* drops by interface XXX not yet supported */;u_int ps_recv; 接受数据报的数目;接受数据报的数目;u_int ps_drop; 被驱动程序丢弃的数据报的数目;被驱动程序丢弃的数据报的数目;u_int ps_ifdrop; 被网卡丢弃的数据报的数目;被网卡丢弃的数据报的数目;struct pcap_sf /pacap的的savefile结构结构 定义定义 FILE *rfile; /该
17、指针指向该指针指向savefile文件文件 int swapped; /? int hdrsize; /头大小吗?头大小吗? int version_major;/主版本号主版本号 int version_minor;/从版本号从版本号 u_char *base;/?; 过滤规则是一个包含过滤表达式的过滤规则是一个包含过滤表达式的ASCII码字符串,此码字符串,此规则表达式在程序中作为规则表达式在程序中作为pcap_compile()函数的参数被编函数的参数被编译,并用于内核级的包过滤机制使用译,并用于内核级的包过滤机制使用. 表达式决定哪种包将被捕获,如果表达式为空,所有表达式决定哪种包将被
18、捕获,如果表达式为空,所有网卡捕获到的数据包都会提交给内核过滤引擎,否则,只网卡捕获到的数据包都会提交给内核过滤引擎,否则,只有满足表达式中关键字的数据包才会被捕获有满足表达式中关键字的数据包才会被捕获. 表达式是由表达式是由一个或者多个原语组成一个或者多个原语组成,而关键字通常是,而关键字通常是被一个或多个修饰词修饰的标识符(名称或序号)下面是被一个或多个修饰词修饰的标识符(名称或序号)下面是三种不同类型的修饰词:三种不同类型的修饰词:此类修饰词决定哪种类型的标识符被引用,常用的修此类修饰词决定哪种类型的标识符被引用,常用的修饰词有饰词有host, net and port. 例如例如, h
19、ost foo, net 128.3, port 20.在没有此类修饰符的情况下,默认使用在没有此类修饰符的情况下,默认使用host.此修饰符类型从标识符指定了一个详尽的数据传输方向此修饰符类型从标识符指定了一个详尽的数据传输方向(使用使用and和和or),常用的方向指示修饰符有,常用的方向指示修饰符有src, dst, src or dst and src and dst.等等.例如,例如, src foo, dst net 128.3, src or dst port ftp-data.在没有指定此类修饰符时,默认在没有指定此类修饰符时,默认使用使用src or dst.此类修饰符的作用是
20、过滤指定协议数据包,常见的此类修饰符的作用是过滤指定协议数据包,常见的协议有:协议有:ether, ip,ip6,arp,rarp, tcp and udp,例如,例如, ether src foo, arp net 128.3, tcp port 21.1、函数名称:函数名称:char *pcap_lookupdev(char *errbuf) 参数说明:如果函数执行成功,则返回一个用于描述系统参数说明:如果函数执行成功,则返回一个用于描述系统上的一个网卡的描述符的指针。如果失败,返回上的一个网卡的描述符的指针。如果失败,返回null,errbuf中存放出错信息。中存放出错信息。2、函数名称
21、:、函数名称:int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf) 参数说明:参数说明:char *devic:网卡的描述符指针,由网卡的描述符指针,由pcap_looupdev函数获取函数获取;netp参数和参数和maskp参数都是参数都是bpf_u_int32指针。如果函数出错,则返回指针。如果函数出错,则返回-1,同时,同时errbuf中存放相关的错误消息。中存放相关的错误消息。3、函数名称:、函数名称:pcap_t *pcap_open_live(char *device
22、, int snaplen, int promisc, int to_ms, char *ebuf) 参数说明:参数说明: char *device:网卡的描述符指针,由网卡的描述符指针,由pcap_looupdev函函数获取;数获取; int snaplen:规定捕获的每个数据报的最大字节数;规定捕获的每个数据报的最大字节数; int promisc:1为混杂模式为混杂模式;0为非混杂模式;为非混杂模式; int to_ms:规定读超时的微秒(规定读超时的微秒(milliseconds)数;)数; char *ebuf:存放错误信息,只有在存放错误信息,只有在pcap_open_live失败
23、失败时才被设置;时才被设置; 返回值:如果函数成功执行,则返回一个指向数据报捕获返回值:如果函数成功执行,则返回一个指向数据报捕获的指针;如果错误,返回的指针;如果错误,返回null,ebuf存放出错信息。存放出错信息。 4、函数名称:、函数名称:pcap_t *pcap_open_offline(char *fname, char *ebuf)参数说明:参数说明: fname参数指定打开的文件名。该文件中的数据格式与参数指定打开的文件名。该文件中的数据格式与tcpdump和和tcpslice兼容。兼容。 -为标准输入。为标准输入。 ebuf参数则仅在参数则仅在pcap_open_offlin
24、e()函数出错返回函数出错返回NULL时用于传递错误消息。时用于传递错误消息。5、函数名称:、函数名称:pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)参数说明:参数说明: p参数为调用参数为调用pcap_open_offline()或或pcap_open_live()函数后返回的函数后返回的pcap结构指针。结构指针。 fname参数指定打开的文件名。如果返回参数指定打开的文件名。如果返回NULL,则可调,则可调用用pcap_geterr()函数获取错误消息。函数获取错误消息。1、函数名称:函数名称:int pcap_setfilte
25、r(pcap_t *p, struct bpf_program *fp) 参数说明:参数说明: 参数参数p表示表示Libpcap句柄;句柄; fp参数是参数是bpf_program结构指针结构指针,表示,表示BPF过滤规则;过滤规则;通常取自通常取自pcap_compile()函数调用。出错时返回函数调用。出错时返回-1;成功时返回;成功时返回0。2、函数名称:、函数名称:int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str, int optimize, bpf_u_int32 netmask) 参数说明:参数说明: pcap
26、_t *p:pcap_open_live返回的数据报捕获的指针;返回的数据报捕获的指针; struct bpf_program *fp:指向一个子函数用于过滤,在指向一个子函数用于过滤,在pcap_compile()函数中被赋值;函数中被赋值; char *str:该字符串规定过滤规则;该字符串规定过滤规则; int optimize:规定了在结果代码上的选择是否被执行;规定了在结果代码上的选择是否被执行; bpf_u_int32 netmask:该网卡的子网掩码,可以通过该网卡的子网掩码,可以通过pcap_lookupnet()获取;获取; 返回值:返回值: 如果成功执行,返回如果成功执行,
27、返回0,否则返回否则返回-1;1、函数名称:函数名称:int pcap_dispatch(pcap_t *p, int cnt,pcap_handler callback, u_char *user) 参数说明:参数说明:cnt参数指定函数返回前所处理数据包的最大值。参数指定函数返回前所处理数据包的最大值。 cnt=-1表示在一个缓冲区中处理所有的数据包。表示在一个缓冲区中处理所有的数据包。cnt=0表示表示处理所有数据包,直到产生以下错误之一:读取到处理所有数据包,直到产生以下错误之一:读取到EOF;超时读取。超时读取。callback参数指定一个带有三个参数的回调函数,这三个参数指定一个带
28、有三个参数的回调函数,这三个参数为:一个从参数为:一个从pcap_dispatch()函数传递过来的函数传递过来的u_char指针,一个指针,一个pcap_pkthdr结构的指针,和一个数据包大小结构的指针,和一个数据包大小的的u_char指针。如果成功则返回读取到的字节数。指针。如果成功则返回读取到的字节数。2、函数名称:函数名称:int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user) 参数说明:参数参数说明:参数p表示表示Libpcap句柄;参数句柄;参数cnt表示捕获数表示捕获数据包的个数;参数据包的个数
29、;参数callback表示回调函数;参数表示回调函数;参数user表示表示向回调函数中传输的参数向回调函数中传输的参数2、函数名称:函数名称:int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user) 参数说明:参数说明:这个函数类似于这个函数类似于pcap_dispatch函数,除了它继续读取数据报直函数,除了它继续读取数据报直至完成至完成cnt个报的处理,或者文件处理完(在个报的处理,或者文件处理完(在offline情况下),情况下),或者有错误或者有错误 发生为止。它不会在实时读超时时返回(而如果为发生为止。它不会在实时读超时时返回(而如果为pcap_open_live()函数指定了一个非零值的超时设置,然后调用函数指定了一个非零值的超时设置,然后调用pcap_dispatch()函数,则当超时发生时函数,则当超时发生时pcap_dispatch()函数会函数会返回。)返回。) 2、函数名称:函数名称:int pcap_loop(pcap
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年证券分析师之发布证券研究报告业务考试题库300道含答案(轻巧夺冠)
- 七年级地理期末复习试卷
- 网上教学课程设计与实施策略
- 高空坠落防护专项安全检查方案
- 企业人才梯队培养计划制定与实施
- 中小学劳动教育活动方案及案例分享
- 林草种苗工岗前操作能力考核试卷含答案
- 公司年度财务预算编制及控制流程
- 工程项目招标文件编制流程详解
- 2025航空航天材料的阻燃特种涂料技术协议化学残留限量市场规范分析研究报告
- 签字版离婚协议书范本
- rohs的环保协议书
- 卫勤课件教学课件
- 海尔智家应收账款管理优化研究
- 十五五特殊教育发展提升行动计划
- 原料采购定价管理办法
- 不合格食品管理制度
- QGDW10384-2023输电线路钢管塔加工技术规程
- 咖啡店5s管理制度
- 供电营业规则(2024版)
- T/SSBME 1-2024医疗器械上市后研究和风险管控计划编写指南
评论
0/150
提交评论