lipcap函数库.docx

上传人:b****8 文档编号:10285912 上传时间:2023-02-09 格式:DOCX 页数:9 大小:18.39KB
下载 相关 举报
lipcap函数库.docx_第1页
第1页 / 共9页
lipcap函数库.docx_第2页
第2页 / 共9页
lipcap函数库.docx_第3页
第3页 / 共9页
lipcap函数库.docx_第4页
第4页 / 共9页
lipcap函数库.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

lipcap函数库.docx

《lipcap函数库.docx》由会员分享,可在线阅读,更多相关《lipcap函数库.docx(9页珍藏版)》请在冰豆网上搜索。

lipcap函数库.docx

lipcap函数库

[1]intpcap_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中存放出错信息。

[2]char*pcap_lookupdev(char*errbuf);

功能获取一个合适的网卡描述,以供pcap_open_liver函数和pcap_lookupnet函数使用。

参数

char*errbuf存放pcap_lookupdev函数的出错信息;

返回值如果函数执行成功,则返回一个用于描述系统上的一个网卡的描述符的指针。

如果

失败,返回null,errbuf中存放出错信息。

[3]pcap_t*pcap_open_live(char*device,intsnaplen,intpromisc,intto_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中。

[4]intpcap_compile(pcap_t*p,structbpf_program*fp,char*str,intoptimize,bpf_u_int32netmask)

功能编译表达式

参数

pcap_t*ppcap_open_live打开的设备接口句柄;

structbpf_program*fp存储被编译的过滤器版本的地址;

char*str表达式本身;

intoptimize是否被优化的整形量(0为false,1为true,标准规定);

bpf_u_int32netmask指定应用此过滤器的网络掩码;

返回值函数返回-1为失败,其他表明成功的

[5]intpcap_setfilter(pcap_t*p,structbpf_program*fp)

功能使用过滤器用于设定一个过滤器程序;

参数

pcap_t*p会话句柄;

structbpf_program*fp被编译表达式版本的引用(与pcap_compile()的第二个参数相同)。

实例:

#include

pcap_t*handle;/*会话的句柄*/

chardev[]="rl0";/*执行嗅探的设备*/

charerrbuf[PCAP_ERRBUF_SIZE];/*存储错误信息的字符串*/

structbpf_programfilter;/*已经编译好的过滤表达式*/

charfilter_app[]="port23";/*过滤表达式*/

bpf_u_int32mask;/*执行嗅探的设备的网络掩码*/

bpf_u_int32net;/*执行嗅探的设备的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和网络掩码,

我们需要知道网络掩码以便应用过滤器。

[6]u_char*pcap_next(pcap_t*p,structpcap_pkthdr*h)

功能获取单包

参数

pcap_t*p会话句柄;

structpcap_pkthdr*h指向一个包括了当前数据包总体信息(被捕获时的时间,包的长度,其被

指定的部分长度)的结构体的指针

返回值返回一个u_char指针给被这个结构体描述的包

实例:

#include

#include

intmain()

{

pcap_t*handle;/*会话句柄*/

char*dev;/*执行嗅探的设备*/

charerrbuf[PCAP_ERRBUF_SIZE];/*存储错误信息的字符串*/

structbpf_programfilter;/*已经编译好的过滤器*/

charfilter_app[]="port23";/*过滤表达式*/

bpf_u_int32mask;/*所在网络的掩码*/

bpf_u_int32net;/*主机的IP地址*/

structpcap_pkthdrheader;/*由pcap.h定义*/

constu_char*packet;/*实际的包*/

/*Definethedevice*/

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("Jackedapacketwithlengthof[%d]",header.len);

/*关闭会话*/

pcap_close(handle);

return(0);

}

实例说明:

该程序嗅探被pcap_lookupdev()返回的设备并将它置为混杂模式,在发现第一个包经过端口23(telnet)并且告诉用户此包的大小(以字节为单位)。

[7]intpcap_loop(pcap_t*p,intcnt,pcap_handlercallback,u_char*user)

功能设置获取到满足过滤规则后,数据包处理的回调函数

参数

pcap_t*p会话句柄

intcnt捕获数据包的个数

pcap_handlercallback回调函数的名称

u_char*user送往回调函数的参数

特殊说明该函数与pcap_dispatch完成相同的功能,但是与pacap_dispatch不同的就是

该函数忽略超时;而pacap_dispatch不忽略超时。

回调函数的原型:

voidgot_packet(u_char*args,conststructpcap_pkthdr*header,constu_char*packet);

回调函数说明:

1.函数返回void类型

2.参数u_char*args对应于pcap_loop()的最后一个参数

3.conststructpcap_pkthdr*header参数类型在pcap.h中包含,该结构体包含数据包被嗅探的时间、大小等信息

具体结构体信息如下所示:

strucpacap_pkthdr

{

structtimevalts;/*时间戳*/

bpf_u_int32caplen;/*已捕获部分的长度*/

bpf_u_int32len;/*该包的脱机长度*/

};

[8]intpcap_dispatch(pcap_t*p,intcnt,pcap_handlercallback,u_char*user);

功能捕捉报文、分发报文到预先指定好的处理函数(回调函数)。

函数说明pcap_dispatch()接收够cnt个报文便返回,如果cnt为-1意味着所有报文集中在一个缓

冲区中。

如果cnt为0,仅当发生错误、读取到EOF或者读超时到了(pcap_open_live中

指定)才停止捕捉报文并返回。

callback指定如下类型的回调函数,用于处理pcap_dispatch()所捕获的报文:

typedefvoid(*pcap_handler)(u_char*,conststructpcap_pkthdr*,constu_char*);

回掉函数参数:

u_char*为pcap_dispatch()的第3个形参;

structpcap_pkthdr*指向pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链

路层支持的差异。

constu_char*最后的形参指向所捕获报文的物理帧。

函数返回值:

返回捕捉到的报文个数,如果在读取静态文件(以前包捕捉过程中存储下来的)时碰

到EOF则返回0。

返回-1表示发生错误,此时可以用pcap_perror()、pcap_geterr()

显示错误信息。

[9]voidpcap_close(pcap_t*p);

功能关闭pcap_open_live()获取的包捕捉句柄,释放相关资源。

关闭相关的文件并释放对应资源。

参数pcap_t*ppcap_open_live()获取的包捕捉句柄

返回值无

[10]voidpcap_perror(pcap_t*p,char*prefix);

功能输出函数调用时产生的错误

参数pcap_t*p来自pcap_open_live()的捕获数据包的句柄char*prefix与perror()

的形参相同,指定错误信息的前缀,与perror()一样,结尾自动输出一个换行。

实例

pcap_perror(p,"pcap_compile")的输出类似这个效果:

pcap_compile:

unknownipproto...

说明

pcap_perror并不自动exit(),与perror()一样,如果需要,应该显式调用exit()。

 

[11]pcap_t*pcap_open_offline(char*fname,char*ebuf)

功能打开以前保存捕获数据包的文件,用于读取。

参数fname参数指定打开的文件名。

该文件中的数据格式与tcpdump和tcpslice兼容。

"-"为标准输入。

ebuf参数则仅在pcap_open_offline()函数出错返回null时用于传递错误消息。

返回值会话句柄

[12]pcap_dumper_t*pcap_dump_open(pcap_t*p,char*fname)

功能打开用于保存捕获数据包的文件,用于写入。

参数p为调用pcap_open_offline()或pcap_open_live()函数后返回的pcap结构指针

fname参数指定打开文件名,如果为"-"时表示标准输出。

返回值出错时返回null。

如果返回null,则可调用pcap_geterr()函数获取错误消息。

[13]voidpcap_dump(u_char*user,structpcap_pkthdr*h,u_char*sp)

功能向调用pcap_dump_open()函数打开的文件输出一个数据包。

该函数可作为

cap_dispatch()函数的回调函数。

[14]intpcap_datalink(pcap_t*p)

功能返回数据链路层类型,例如dlt_en10mb。

[15]intpcap_snapshot(pcap_t*p)

功能返回pcap_open_live被调用后的snapshot参数值。

[16]intpcap_is_swapped(pcap_t*p)

功能返回当前系统主机字节与被打开文件的字节顺序是否不同。

[17]intpcap_major_version(pcap_t*p)

功能返回写入被打开文件所使用的pcap函数的主版本号。

[18]intpcap_minor_version(pcap_t*p)

功能返回写入被打开文件所使用的pcap函数的辅版本号。

[19]pcap_geterr()

功能函数来获取错误消息。

[20]intpcap_stats(pcap_t*p,structpcap_stat*ps)

功能向pcap_stat结构赋值。

成功时返回0。

这些数值包括了从开始

捕获数据以来至今共捕获到的数据包统计。

如果出错或不支持

数据包统计,则返回-1,且可调用pcap_perror()或

pcap_geterr()函数来获取错误消息。

[21]file*pcap_file(pcap_t*p)

功能返回被打开文件的文件名。

[22]intpcap_fileno(pcap_t*p)

功能返回被打开文件的文件描述字号码。

[23]char*pcap_strerror(interror)

功能如果strerror()函数不可用,则可调用pcap_strerror函数替代。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1