Libpcap 学习笔记

libpcap简介

libpcap 是用于捕获 TCP/IP 网络数据包的 C/C++ 库,支持 Linux 系统,Tcpdump 就是在其基础上开发的,通常用于网络嗅探、数据抓取、协议分析等,官网是 http://www.tcpdump.org ,主要的功能有:

  • 数据包捕获:捕获流经网卡的原始数据包
  • 规则过滤:提供自带规则过滤功能,按需要选择过滤规则
  • 流量采集与统计:采集网络中的流量信息
  • 自定义数据包发送:构造任何格式的原始数据包
    包捕获机制是在数据链路层增加一个旁路处理,并不干扰系统自身的网络协议栈的处理,对发送和接收的数据包通过 Linux 内核做过滤和缓冲处理,最后直接传递给上层应用程序。

编译&安装

可以在 http://www.tcpdump.org 找到libpcap源码下载.下面以libpcap-1.10.4编译为例:

sudo apt-get update
sudo apt-get install flex
sudo apt-get install bison

tar xvf libpcap-1.10.4.tar.xz
cd libpcap-1.10.4
./configure --prefix=$PWD/install
make -j4
make install

结果物如下:

├── bin
│   └── pcap-config
├── include
│   ├── pcap
│   │   ├── bluetooth.h
│   │   ├── bpf.h
│   │   ├── can_socketcan.h
│   │   ├── compiler-tests.h
│   │   ├── dlt.h
│   │   ├── funcattrs.h
│   │   ├── ipnet.h
│   │   ├── namedb.h
│   │   ├── nflog.h
│   │   ├── pcap-inttypes.h
│   │   ├── pcap.h
│   │   ├── sll.h
│   │   ├── socket.h
│   │   ├── usb.h
│   │   └── vlan.h
│   ├── pcap-bpf.h
│   ├── pcap-namedb.h
│   └── pcap.h
└── lib
    ├── libpcap.a
    ├── libpcap.so -> libpcap.so.1
    ├── libpcap.so.1 -> libpcap.so.1.10.4
    ├── libpcap.so.1.10.4
    └── pkgconfig
        └── libpcap.pc

接口使用

查找网卡

int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);
void pcap_freealldevs(pcap_if_t *alldevs);

打开网卡

pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf);

获取数据包

const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);

过滤器

libpcap 是用于捕获 TCP/IP 网络数据包的 C/C++ 库,支持 Linux 系统,Tcpdump 就是在其基础上开发的,通常用于网络嗅探、数据抓取、协议分析等,官网是 http://www.tcpdump.org ,主要的功能有:

  • 数据包捕获:捕获流经网卡的原始数据包
  • 规则过滤:提供自带规则过滤功能,按需要选择过滤规则
  • 流量采集与统计:采集网络中的流量信息
  • 自定义数据包发送:构造任何格式的原始数据包
  • 包捕获机制是在数据链路层增加一个旁路处理,并不干扰系统自身的网络协议栈的处理,对发送和接收的数据包通过 Linux 内核做过滤和缓冲处理,最后直接传递给上层应用程序。在 Linux 发行版上可以直接安装 libpcap 或者开发库 libpcap-devel ,也可以下载源码后编译安装。
    调用 libpcap 库函数前要包含的头文件:
    #include <pcap/pcap.h>
    

调用 libpcap 库抓包的流程:

  • 查找网卡,目的是发现可用的网卡,实现的函数为 pcap_lookupdev() 。
  • 获得网卡参数,这里是利用 pcap_lookupnet() 函数,获得指定网卡的 IP 地址和子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

血_影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值