一、主要作用
1、捕获各种数据包
eg:网络流量统计
2、过滤网络数据包
eg:过滤掉本地的一些数据,类似防火墙
3、分析网络数据包
eg:分析网络协议,数据的采集
4、存储网络数据包
eg:保存捕获的数据以为将来进行分析
二、ubuntu安装指令
sudo apt-get install libpcap-dev
三、使用libcap库的开发步骤
①打开网络设备
②设备过滤规则(可选)
③捕获数据
④关闭网络设备
头文件:#include <pcap.h>
编译时需要加上: -lpcap
四、 捕获网络数据常用函数
①查看设备名称
pcap_lookupdev( )
原型:
char *pcap_lookupdev(char *errbuf)
功能:得到可用的网络设备名指针
参数:errbuf:存放相关的错误信息
返回值:成功返回设备名指针;
失败返回NULL
例子:
char *dev = NULL;
char *err_buf[100]="";
dev = pcap_lookupdev(err_buf);
if(dev ==NULL)
{
perror("pcap_lookupdev");
exit(-1);
}
②打开捕获数据接口,获取句柄
pcap_open_live( )
原型:
pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf);
功能:打开一个用于捕获数据的接口
参数:device:网络接口的名字
snaplen:捕获数据包的长度
promise:1代表混杂模式,其他代表非混杂模式
to_ms:等待时间
ebuf:存储错误信息
返回值:返回一个Libpcap句柄
例子:
char error_content[PACP_ERRBUF_SIZE]="";
pcap_t * pcap_handle=NULL;
pcap_handle = pcap_open_live("eth0",1024,1,0,error_content);
③获取设备IP
pcap_lookupnet( )
原型:
int pcap_lookupnet(char *device, buf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf);
功能:获得指定网络设备的网络号和掩码
函数:device:网络设备名
netp:存放网络号的指针
maskp:存放掩码的指针
errbuf:存放出错信息
返回值:成功:0,失败:-1
例子:
unsigned int net_ip; //网络地址
unsigned int net_mask; //子网掩码
res = pcap_lookupnet(dev, &net_ip, &net_mask, error_content);
if(res == -1)
{
perror("pcap_lookupnet");
exit(-1);
}

本文详细介绍了libpcap库在网络数据包捕获和分析中的应用,包括主要功能、Ubuntu安装步骤、开发步骤以及关键函数的使用,如pcap_lookupdev()、pcap_open_live()、pcap_lookupnet()、pcap_compile()和pcap_setfilter()等,展示了如何设置过滤规则并捕获特定源端口的数据包。
&spm=1001.2101.3001.5002&articleId=124713331&d=1&t=3&u=3035de8855e848d4932152176034aca3)
8606

被折叠的 条评论
为什么被折叠?



