- pcap_findalldevs
函数原型:pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
功能:获取计算机上所有可用的网络接口
参数说明:
-
alldevsp: 指向 pcap_if_t 类型指针的指针,用于存放获取到的网络接口列表
-
errbuf: 用来存放错误信息的缓冲区
#include <pcap.h> int main() { pcap_if_t *alldevs; char errbuf[PCAP_ERRBUF_SIZE]; if (pcap_findalldevs(&alldevs, errbuf) == -1) { fprintf(stderr, "Error in pcap_findalldevs: %s\n", errbuf); return 1; } // 遍历获取到的网卡列表 for (pcap_if_t *d = alldevs; d != NULL; d = d->next) { printf("Device name: %s\n", d->name); printf("Description: %s\n", d->description); } // 释放资源 pcap_freealldevs(alldevs); return 0; }
2. pcap_open
-
用于打开一个网络接口或者一个保存了数据包的文件,并返回一个 pcap_t 结构体指针,以便后续操作该接口或文件。
pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
参数介绍:
source
:需要打开的网络接口名称(例如:"en0")或者是离线数据包文件的名字。snaplen
:每个数据包的最大长度(单位为字节)。flags
:指定捕获模式。PCAP_OPENFLAG_PROMISCUOUS
:开启混杂模式。PCAP_OPENFLAG_NONBLOCK
:以非阻塞模式打开设备。PCAP_OPENFLAG_MAX_RESPONSIVENESS
:使得系统响应最快,但可能会消耗更多的 CPU 资源。
read_timeout
:读取超时时间(单位为毫秒),当使用pcap_next()
等函数时使用。auth
:远程服务器的认证信息。errbuf
:错误信息缓冲区。#include <pcap.h> #include <stdio.h> int main() { char err_buf[PCAP_ERRBUF_SIZE]; pcap_t *handle; // 打开指定的网络接口或文件 handle = pcap_open("en0", 65535, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, err_buf); if (handle == NULL) { fprintf(stderr, "Error in pcap_open: %s\n", err_buf); return -1; } // 其他操作... // 关闭网络接口或文件 pcap_close(handle); return 0; }
pcap_close
-
功能说明:
关闭之前打开的网络接口或文件。
-
参数介绍:
p
:之前使用pcap_open()
或pcap_open_live()
打开的网络接口或文件的句柄。#include <pcap.h> #include <stdio.h> int main() { char err_buf[PCAP_ERRBUF_SIZE]; pcap_t *handle; // 打开指定的网络接口或文件 handle = pcap_open("en0", 65535, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, err_buf); if (handle == NULL) { fprintf(stderr, "Error in pcap_open: %s\n", err_buf); return -1; } // 其他操作... // 关闭网络接口或文件 pcap_close(handle); return 0; }
pcap_sendpacket