写一个用libpcap捕获并保存数据包的代码
时间: 2024-02-24 13:56:44 浏览: 143
基于Libpcap的数据包捕获机制的实现
好的,以下是一个简单的用libpcap捕获并保存数据包的代码:
```c
#include <pcap.h>
#include <stdio.h>
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
int main() {
pcap_t *pcap_handle;
char errbuf[PCAP_ERRBUF_SIZE];
// 打开网络接口
pcap_handle = pcap_open_live("eth0", BUFSIZ, 1, 1000, errbuf);
if (pcap_handle == NULL) {
fprintf(stderr, "Error opening interface: %s\n", errbuf);
return 1;
}
// 开始捕获数据包
pcap_loop(pcap_handle, 0, packet_handler, NULL);
// 关闭网络接口
pcap_close(pcap_handle);
return 0;
}
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {
static int count = 0;
char filename[32];
FILE *fp;
// 生成文件名
snprintf(filename, sizeof(filename), "packet%d.pcap", ++count);
// 保存数据包到文件
fp = fopen(filename, "wb");
if (fp) {
fwrite(pkt_data, header->caplen, 1, fp);
fclose(fp);
}
}
```
这个程序会打开名为 `eth0` 的网络接口,然后使用 `pcap_loop()` 函数不断捕获数据包,每当捕获到一个数据包时,就会调用 `packet_handler()` 函数将数据包保存到一个以包序号命名的文件中。
当然,这只是一个简单的例子,实际应用中还需要对捕获到的数据包进行解析和处理。
阅读全文