网络编程第三方库——libpcap库(接收)

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

一、主要作用

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);
}

④设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值