【编程笔记】libpcap下载、安装与编程

一、libpcap介绍

Libpcap(Packet Capture Libray)即是数据包捕获函数库,该库提供的C函数接口用于捕捉经过指定网络接口的数据包,通常该接口设置为混杂模式。Linux平台的TCPDUMP就是基于Libpcap库进行开发的,Libpcap提供的接口函数实现和封装了与数据包截获有关的过程。主要功能包括:

  • 数据包捕获:捕获经过网卡的原始数据包;
  • 自定义数据包发送:构造任何格式的原始数据包;
  • 流量采集与统计:采集网络中的流量信息;
  • 规则过滤:提供自带规则过滤功能,按需要选择过滤规则;

二、libpcap下载

1.libpcap包的下载地址:https://www.tcpdump.org/release/
在这里插入图片描述
2.此处以kali linux 系统操作为例说明,下载libpcap版本为:1.10.4

 # wget 下载
 wget -q https://www.tcpdump.org/release/libpcap-1.10.4.tar.xz -O libpcap-1.10.4.tar.xz

三、libpcap编译

1.解压下载包并创建编译的目录,同时在编译参数中指定该目录所在路径

# 解压文件
tar -xvf libpcap-1.10.4.tar.xz
# 创建编译后的安装目录
cd libpcap-1.10.4 && mkdir static-libpcap-1.10.4
# 编译配置
CFLAGS='-static -O2 -flto' ./configure --prefix=/home/kali/Desktop/libpcap-1.10.4/static-libpcap-1.10.4 --enable-shared=no --enable-bluetooth=no --enable-rdma=no --enable-dbus=no

2.如果在编译配置过程中出现如下错误,是系统缺少相应的依赖,解决思路:
在这里插入图片描述

# 搜索error字段提示的相关名称
sudo apt search bison
# 安装相关的包
sudo apt-get install bison -y

3.如果编译配置结束显示如下内容,即是通过
在这里插入图片描述
4.下一步,使用下述命令构建、安装

# 编译安装
make -j 4 &&make install

5.最后,在 static-libpcap-1.10.4/lib 目录下即可见编译成功的相关文件

四、libpcap编程

1.libpcap的接口函数简介

参考:https://www.tcpdump.org/manpages/
pcap_lookupdev():函数用于查找网络设备;
pcap_lookupnet():函数获得指定网络设备的网络号和掩码;
pcap_open_live(): 函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字,对于此网络设备的操作都要基于此网络设备描述字;
pcap_compile(): 函数用于将用户制定的过滤策略编译到过滤程序中;
pcap_setfilter():函数用于设置过滤器;
pcap_dump_open():打开用于保存捕获数据包的文件,用于写入;
pcap_dump():向调用pcap_dump_open()函数打开的文件输出一个数据包;
pcap_loop():函数 pcap_dispatch() 函数用于捕获数据包,捕获后还可以进行处理,此外 pcap_next() 和 pcap_next_ex() 两个函数也可以用来捕获数据包;
pcap_close():函数用于关闭网络设备,释放资源;
pcap_dump_close():关闭相应的被打开文件。

2.libpcp抓包例子

1.功能:捕获eth0接口100个数据包并存到当前output.pcap文件

#include <pcap.h>
#include <stdio.h>
 
int main() {
    pcap_t *handle;
    char errbuf[PCAP_ERRBUF_SIZE];
    const char *filename = "output.pcap";
    const char *device = "eth0";
    const int packet_cnt = 100;
 
    /* 打开设备 */
    handle = pcap_open_live(device, 65535, 1, 0, errbuf);
    if (handle == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", "eth0", errbuf);
        return 1;
    }
 
    /* 创建 pcap_dumper_t 用于保存数据 */
    pcap_dumper_t *dumpfile = pcap_dump_open(handle, filename);
    if (dumpfile == NULL) {
        fprintf(stderr, "Couldn't open dump file %s: %s\n", filename, pcap_geterr(handle));
        return 2;
    }
 
    /* 进入捕获循环 */
    struct pcap_pkthdr header;
    const u_char *packet;
    int cnt = 0;
    
    while (((packet = pcap_next(handle, &header)) != NULL) && (cnt < packet_cnt) ){
        /* 将数据包写入文件 */
	pcap_dump(dumpfile, &header, packet);
	cnt += 1;
    }
 
    /* 关闭资源 */
    pcap_close(handle);
    pcap_dump_close(dumpfile);
    return 0;
}

2.编译生成静态可执行文件

# 编译生成静态文件
gcc -static -O2 -flto -s test.c -I ../libpcap-1.10.4/static-libpcap-1.10.4/include -L ../libpcap-1.10.4/static-libpcap-1.10.4/lib -l pcap

3.执行命令:sudo ./a.out ,output.pcap文件即是捕获的数据包

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值