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 地址和子


2789

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



