




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1int pcap_lookupnet(char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp,char *errbuf);功能该函数用于监测网卡所在网络的网络地址和子网掩码参数char *devic网卡的描述符指针,由pcap_looupdev函数获取;bpf_u_int32 *netp存放网络地址;bpf_u_int32 *maskp存放子网掩码;char * errbuf 存放出错信息;返回值如果函数执行成功,则返回值为0,否则返回值为-1,并在errbuf中存放出错信息。2char *pcap_lookupdev(char * errbuf);功能获取一个合适的网卡描述,以供pcap_open_liver函数和pcap_lookupnet函数使用。参数char * errbuf 存放pcap_lookupdev函数的出错信息;返回值 如果函数执行成功,则返回一个用于描述系统上的一个网卡的描述符的指针。如果失败,返回null,errbuf中存放出错信息。3pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)功能打开网卡用来获得一个数据截获描述符,该描述符用于查看在网络上传输的数据包;参数char *device 指定的嗅探设备;snaplenpcap捕获的最大字节数;promisc 是否将指定接口设为为混杂模式;to_ms读取时的超时值,单位是毫秒,如果为0则一直嗅探直到错误发生,为-1则不确定;。ebuf存入任何错误信息的字符串返回值返回会话句柄。实例:#include .pcap_t *handle;handle = pcap_open_live(somedev, BUFSIZ, 1, 0, errbuf);实例说明该代码打开字符串somedev的设备,读取被BUFSIZ指定的字节数(BUFSIZ在pcap.h里定义);设备被设置为混杂模式;一直嗅探到错误发生;如果有了错误,把它存放在字符串errbuf中。4int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)功能编译表达式参数pcap_t *p pcap_open_live打开的设备接口句柄;struct bpf_program *fp存储被编译的过滤器版本的地址;char *str表达式本身;int optimize是否被优化的整形量(0为false,1为true,标准规定);bpf_u_int32 netmask指定应用此过滤器的网络掩码;返回值函数返回-1为失败,其他表明成功的5int pcap_setfilter(pcap_t *p, struct bpf_program *fp)功能使用过滤器用于设定一个过滤器程序;参数pcap_t *p会话句柄;struct bpf_program *fp被编译表达式版本的引用(与pcap_compile()的第二个参数相同)。实例:#include pcap_t *handle; /* 会话的句柄 */char dev = rl0; /* 执行嗅探的设备 */char errbufPCAP_ERRBUF_SIZE; /* 存储错误 信息的字符串 */struct bpf_program filter; /*已经编译好的过滤表达式*/char filter_app = port 23; /* 过滤表达式*/bpf_u_int32 mask; /* 执行嗅探的设备的网络掩码 */bpf_u_int32 net; /* 执行嗅探的设备的IP地址 */pcap_lookupnet(dev, &net, &mask, errbuf);handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);pcap_compile(handle, &filter, filter_app, 0, net);pcap_setfilter(handle, &filter);实例说明该程序使用混杂模式嗅探嗅探设备为r10,经由端口23的所有通信。pcap_lookupnet(),向这个函数提供设备接口名,它将返回其IP和网络掩码, 我们需要知道网络掩码以便应用过滤器。6u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)功能获取单包参数pcap_t *p会话句柄;struct pcap_pkthdr *h指向一个包括了当前数据包总体信息(被捕获时的时间,包的长度,其被指定的部分长度)的结构体的指针返回值返回一个u_char指针给被这个结构体描述的包实例:#include #include int main()pcap_t *handle; /* 会话句柄 */char *dev; /* 执行嗅探的设备 */char errbufPCAP_ERRBUF_SIZE; /* 存储错误信息的字符串 */struct bpf_program filter; /* 已经编译好的过滤器 */char filter_app = port 23; /* 过滤表达式 */bpf_u_int32 mask; /* 所在网络的掩码 */bpf_u_int32 net; /* 主机的IP地址 */struct pcap_pkthdr header; /* 由pcap.h定义 */const u_char *packet; /* 实际的包 */* Define the device */dev = pcap_lookupdev(errbuf);/* 探查设备属性 */pcap_lookupnet(dev, &net, &mask, errbuf);/* 以混杂模式打开会话 */handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);/* 编译并应用过滤器 */pcap_compile(handle, &filter, filter_app, 0, net);pcap_setfilter(handle, &filter);/* 截获一个包 */packet = pcap_next(handle, &header);/* 打印它的长度 */printf(Jacked a packet with length of %d, header.len);/* 关闭会话 */pcap_close(handle);return(0);实例说明:该程序嗅探被pcap_lookupdev()返回的设备并将它置为混杂模式,在发现第一个包经过端口23(telnet)并且告诉用户此包的大小(以字节为单位)。7int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)功能设置获取到满足过滤规则后,数据包处理的回调函数参数pcap_t *p会话句柄int cnt捕获数据包的个数pcap_handler callback回调函数的名称u_char *user送往回调函数的参数特殊说明该函数与pcap_dispatch完成相同的功能,但是与pacap_dispatch不同的就是该函数忽略超时;而pacap_dispatch不忽略超时。回调函数的原型:void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);回调函数说明: 1.函数返回void类型 2.参数u_char *args对应于pcap_loop()的最后一个参数3.const struct pcap_pkthdr *header参数类型在pcap.h中包含,该结构体包含数据包被嗅探的时间、大小等信息 具体结构体信息如下所示: struc pacap_pkthdr struct timeval ts; /* 时间戳 */ bpf_u_int32 caplen; /* 已捕获部分的长度 */bpf_u_int32 len; /* 该包的脱机长度 */;8int pcap_dispatch ( pcap_t * p, int cnt, pcap_handler callback, u_char * user );功能捕捉报文、分发报文到预先指定好的处理函数(回调函数)。函数说明pcap_dispatch()接收够cnt个报文便返回,如果cnt为-1意味着所有报文集中在一个缓冲区中。如果cnt为0,仅当发生错误、读取到EOF或者读超时到了(pcap_open_live中指定)才停止捕捉报文并返回。callback指定如下类型的回调函数,用于处理pcap_dispatch()所捕获的报文:typedef void ( *pcap_handler ) ( u_char *, const struct pcap_pkthdr *, const u_char * );回掉函数参数: u_char * 为pcap_dispatch()的第3个形参;struct pcap_pkthdr *指向pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链路层支持的差异。const u_char * 最后的形参指向所捕获报文的物理帧。函数返回值: 返回捕捉到的报文个数,如果在读取静态文件(以前包捕捉过程中存储下来的)时碰到EOF则返回0。返回-1表示发生错误,此时可以用pcap_perror()、pcap_geterr()显示错误信息。9void pcap_close ( pcap_t * p );功能关闭pcap_open_live()获取的包捕捉句柄,释放相关资源。关闭相关的文件并释放对应资源。参数pcap_t * p pcap_open_live()获取的包捕捉句柄返回值无10void pcap_perror ( pcap_t * p, char * prefix );功能输出函数调用时产生的错误参数pcap_t * p来自pcap_open_live()的捕获数据包的句柄char * prefix 与perror()的形参相同,指定错误信息的前缀,与perror()一样,结尾自动输出一个换行。实例pcap_perror( p, pcap_compile )的输出类似这个效果:pcap_compile: unknown ip proto .说明pcap_perror并不自动exit(),与perror()一样,如果需要,应该显式调用exit()。11pcap_t *pcap_open_offline(char *fname, char *ebuf) 功能打开以前保存捕获数据包的文件,用于读取。参数fname参数指定打开的文件名。该文件中的数据格式与tcpdump和tcpslice兼容。-为标准输入。ebuf参数则仅在pcap_open_offline()函数出错返回null时用于传递错误消息。 返回值会话句柄12pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname) 功能打开用于保存捕获数据包的文件,用于写入。参数p为调用pcap_open_offline()或 pcap_open_live()函数后返回的pcap结构指针fname参数指定打开文件名,如果为-时表示标准输出。返回值出错时返回null。如果返回null,则可调用pcap_geterr()函数获取错误消息。13void pcap_dump(u_char *user, struct pcap_pkthdr *h, u_char *sp) 功能向调用pcap_dump_open()函数打开的文件输出一个数据包。该函数可作为cap_dispatch()函数的回调函数。14int pcap_datalink(pcap_t *p) 功能返回数据链路层类型,例如dlt_en10mb。15int pcap_snapshot(pcap_t *p) 功能返回pcap_open_live被调用后的snapshot参数值。16int pcap_is_swapped(pcap_t *p) 功能返回当前系统主机字节与被打开文件的字节顺序是否不同。17int pcap_major_version(pcap_t *p) 功能返回写入被打开文件所使用的pcap函数的主版本号。18int pcap_minor_version(pcap_t *p) 功能返回写入被打开文件所使用的pcap函数的辅版本号。19pcap_geterr()功能函数来获取错误消息。20int pcap_stats(pcap_t *p, struct pcap_stat *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水管所业务大讲堂课件
- 水稻第三期课件
- 农副产品加工设备维护与保养方案
- 水痘相关知识
- 造型基础色彩构成设计83课件
- 2025版猎聘服务专项合作协议(初创企业)
- 二零二五年度房产物业管理服务协议书
- 2025版影视公司离婚协议与版权及收益分配合同
- 2025版宾馆房间租赁合同及商务会议服务协议
- 2025版金融科技公司法律风险评估顾问协议
- 窗口服务礼仪培训大纲
- 餐饮店品牌授权使用合同范本
- 学堂在线 走进医学 章节测试答案
- 蔬菜温室大棚项目可行性研究报告书书
- 闵行区2024-2025学年下学期七年级数学期末考试试卷及答案(上海新教材沪教版)
- 八大特殊作业管理培训
- 费用报销合规培训
- 义务教育科学课程标准(2022年版)
- Q-GDW11628-2016新能源消纳能力计算导则
- 十五五文物规划思路
- 2025年修订版《雇佣合同》全文
评论
0/150
提交评论