libpcap rpm抓的一个数据包长度为什么为0

网络数据包的获取与libpcap应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
9页¥2.0037页免费19页免费3页¥2.005页¥2.00 27页免费35页免费3页免费14页免费3页免费
喜欢此文档的还喜欢19页免费3页免费37页免费27页免费29页2下载券
网络数据包的获取与libpcap应用|主​要​介​绍​了​网​络​数​据​包​的​捕​获​方​法​,​以​及​对​捕​获​工​具​l​i​b​p​c​a​p​库​进​行​了​一​些​介​绍​,​是​初​学​的​好​资​料
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:1.19MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢libpcap获取数据包函数库说明
--[[ libpcap ]]------------------------------------------
原地址:/logs/.html
------------------------------------------------------------------------------------
libpcap的英文意思是 Packet Capture library,即数据包捕获函数库。该库提供的C函数接口可用于需要捕获经过网络接口(只要经过该接口,目标地址不一定为本机)数据包的系统开发上。由 Berkeley大学Lawrence Berkeley National Laboratory研究院的Van Jacobson、Craig Leres和Steven McCanne编写,目前的最新版本为0.4。该函数库支持Linux、Solaris和*BSD系统平台。
主要接口函数说明如下:
pcap_t *pcap_open_live(char *device, int snaplen,
int promisc, int to_ms, char *ebuf)
获得用于捕获网络数据包的数据包捕获描述字。device参数为指定打开
的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定
是否将网络接口置于混杂模式。to_ms参数指定超时时间(毫秒)。
ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消
pcap_t *pcap_open_offline(char *fname, char *ebuf)
打开以前保存捕获数据包的文件,用于读取。fname参数指定打开的文
件名。该文件中的数据格式与tcpdump和tcpslice兼容。&-&为标准输
入。ebuf参数则仅在pcap_open_offline()函数出错返回NULL时用于传
递错误消息。
pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
打开用于保存捕获数据包的文件,用于写入。fname参数为&-&时表示
标准输出。出错时返回NULL。p参数为调用pcap_open_offline()或
pcap_open_live()函数后返回的pcap结构指针。fname参数指定打开
的文件名。如果返回NULL,则可调用pcap_geterr()函数获取错误消
char *pcap_lookupdev(char *errbuf)
用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络
设备名指针。如果函数出错,则返回NULL,同时errbuf中存放相关的
错误消息。
int pcap_lookupnet(char *device, bpf_u_int32 *netp,
bpf_u_int32 *maskp, char *errbuf)
获得指定网络设备的网络号和掩码。netp参数和maskp参数都是
bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相
关的错误消息。
int pcap_dispatch(pcap_t *p, int cnt,
pcap_handler callback, u_char *user)
捕获并处理数据包。cnt参数指定函数返回前所处理数据包的最大值。
cnt=-1表示在一个缓冲区中处理所有的数据包。cnt=0表示处理所有
数据包,直到产生以下错误之一:读取到EOF;超时读取。callback
参数指定一个带有三个参数的回调函数,这三个参数为:一个从
pcap_dispatch()函数传递过来的u_char指针,一个pcap_pkthdr结构
的指针,和一个数据包大小的u_char指针。如果成功则返回读取到的
字节数。读取到EOF时则返回零值。出错时则返回-1,此时可调用
pcap_perror()或pcap_geterr()函数获取错误消息。
int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user)
功能基本与pcap_dispatch()函数相同,只不过此函数在cnt个数据包
被处理或出现错误时才返回,但读取超时不会返回。而如果为
pcap_open_live()函数指定了一个非零值的超时设置,然后调用
pcap_dispatch()函数,则当超时发生时pcap_dispatch()函数会返回。
cnt参数为负值时pcap_loop()函数将始终循环运行,除非出现错误。
void pcap_dump(u_char *user, struct pcap_pkthdr *h,
u_char *sp)
向调用pcap_dump_open()函数打开的文件输出一个数据包。该函数可
作为pcap_dispatch()函数的回调函数。
int pcap_compile(pcap_t *p, struct bpf_program *fp,
char *str, int optimize, bpf_u_int32 netmask)
将str参数指定的字符串编译到过滤程序中。fp是一个bpf_program结
构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果
代码的优化。netmask参数指定本地网络的网络掩码。
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
指定一个过滤程序。fp参数是bpf_program结构指针,通常取自
pcap_compile()函数调用。出错时返回-1;成功时返回0。
u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)
返回指向下一个数据包的u_char指针。
int pcap_datalink(pcap_t *p)
返回数据链路层类型,例如DLT_EN10MB。
int pcap_snapshot(pcap_t *p)
返回pcap_open_live被调用后的snapshot参数值。
int pcap_is_swapped(pcap_t *p)
返回当前系统主机字节与被打开文件的字节顺序是否不同。
int pcap_major_version(pcap_t *p)
返回写入被打开文件所使用的pcap函数的主版本号。
int pcap_minor_version(pcap_t *p)
返回写入被打开文件所使用的pcap函数的辅版本号。
int pcap_stats(pcap_t *p, struct pcap_stat *ps)
向pcap_stat结构赋值。成功时返回0。这些数值包括了从开始
捕获数据以来至今共捕获到的数据包统计。如果出错或不支持
数据包统计,则返回-1,且可调用pcap_perror()或
pcap_geterr()函数来获取错误消息。
FILE *pcap_file(pcap_t *p)
返回被打开文件的文件名。
int pcap_fileno(pcap_t *p)
返回被打开文件的文件描述字号码。
void pcap_perror(pcap_t *p, char *prefix)
在标准输出设备上显示最后一个pcap库错误消息。以prefix参
数指定的字符串为消息头。
char *pcap_geterr(pcap_t *p)
返回最后一个pcap库错误消息。
char *pcap_strerror(int error)
如果strerror()函数不可用,则可调用pcap_strerror函数替代。
void pcap_close(pcap_t *p)
关闭p参数相应的文件,并释放资源。
void pcap_dump_close(pcap_dumper_t *p)
---------------------------------------------------------------------
#define CAP_LEN 2048
#define FILENAME &rh&
#define _DEBUG_
int main()
bpf_u_int32 localnet,
struct bpf_
pcap_dumper_t*p;
char ebuf[PCAP_ERRBUF_SIZE];
u_char * pcap_
int dev_flag=1;
int cap_len=CAP_LEN;
device=pcap_lookupdev(ebuf);
if (device == NULL)
exit(printf(&%s n&, ebuf));
#ifdef _DEBUG_
printf(&device is %s \n&,device);
pd=pcap_open_live(device,cap_len,dev_flag,1000,ebuf);
if(pd == NULL)
exit(printf(&%s\n&,ebuf));
i=pcap_snapshot(pd);
if(cap_len & i) {
printf(&snaplen raised from %d to %d \n&, cap_len, i);
cap_len=i;
if(pcap_lookupnet(device, &localnet, &netmask, ebuf) & 0) {
localnet=0;
netmask=0;
printf(&%s\n&, ebuf);
if (pcap_compile(pd, &fcode, &&, 1, netmask) & 0)
exit(printf(&Error %s\n&,&pcap_compile&));
if (pcap_setfilter(pd,&fcode) & 0)
exit(printf(&Error %s\n&,&pcap_setfilter&));
p=pcap_dump_open(pd,FILENAME);
if(p == NULL)
exit(printf(&Error:%s\n&,&pcap_dump_open&));
printer=pcap_
pcap_userdata=(u_char *)p;
if(pcap_loop(pd, -1, printer, pcap_userdata) & 0)
exit(printf(&Error, %s\n&,&pcap_loop&));
pcap_close(pd);
-----------------------------------------------------------------------
关闭相应的被打开文件。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:304738次
积分:4164
积分:4164
排名:第2490名
原创:108篇
转载:83篇
评论:87条
(3)(3)(9)(3)(6)(3)(4)(5)(4)(3)(7)(2)(3)(4)(15)(6)(11)(9)(19)(7)(6)(7)(8)(3)(6)(7)(7)(6)(6)(9)sf 一个用C语言和网络数据包和分析开发工具libpcap及win 实现的简易 Sniffer Package capture 截获/
182万源代码下载-
&文件名称: sf
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 16 KB
&&上传时间:
&&下载次数: 11
&&提 供 者:
&详细说明:一个用C语言和网络数据包和分析开发工具libpcap及winpcap实现的简易网络Sniffer-sniffer
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&一个简单嗅探软件的实现\sniff.cpp&&......................\sniff.exe&&一个简单嗅探软件的实现
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 一个简单的TCP/IP协议分析程序,适合初学者学习。注:从网上收集的
&[] - 抓包工具分析,对从网卡上截获的数据包进行分析
&[] - 本人参考winpcap的教程实现了一个Winpcap抓包工具,它可以抓到所有经过本机的数据包,并按一定的格式存入一个out.txt文件。
&[] - 监控本地网络IP包流量小程序,可选择网卡,设定监控时间,查看清空日志文件等
&[] - 实现一种在VC++下用原始套接字来捕获并分析在网络上传输的数据包的简单方法。
&[] - 包括文件操作、图形系统、并口串口编程、鼠标编程、小型cad系统、编译器、病毒防火墙、海底大战等多个实例。
&[] - 《网络安全开发包详解》
第3章 网络数据包捕获开发包Libpcap
3.1 Libpcap概述
3.1.1 Libpcap简介
3.1.2 Libpcap的作用
3.1.3 Libpcap的安装
3.2 Libpcap的组成
3.2.1 BPF捕获机制
3.2.2 过滤
&[] - 利用WipCap捕获网络数据包并分析数据包,含源代码和工程文件,学习网络数据包捕获分析以及WinPcap的好程序

我要回帖

更多关于 ip数据包地址长度 的文章

 

随机推荐