gpt4 book ai didi

c - pf_ring 和 libpcap if_index 没有返回

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:23 29 4
gpt4 key购买 nike

我最近一直在处理必须使用 pf_ring/libpcap 的问题。我从来没有用 libpcap 或 pf_ring 开发过,所以请原谅这个看起来很愚蠢的问题,因为网络编程对我来说是半新的……从广义上讲,我想做的是访问接收到的数据包的 if_index。我目前有一个使用 pf_ring 使用“C”创建的简单原始数据包嗅探器,如下所示:

#include <pcap.h>
#include <pfring.h>
#include <string.h>
#include <stdlib.h>

#define MAXBYTES2CAPTURE 2048


void processRingPacket(const struct pfring_pkthdr* pkthdr, const u_char* packet, const u_char *arg)
{
int i=0, *counter = (int*)arg;

printf("Packet Count: %d ", ++(*counter));
printf("Received Packet Size: %d ", pkthdr->len);
printf("ifIndex: %d ", pkthdr->extended_hdr.if_index);
printf("Payload:\n");

for(i=0; i < pkthdr->len; i++)
{
if(isprint(packet[i]))
{
printf("%c ", packet[i]);
}

else
{
printf(". ");
}

if((i % 16 == 0) && (i != 0) || (i == pkthdr->len-1))
{
printf("\n");
}
}

return;

}

int main()
{
int count = 0;
char *device = "eth0";

printf("Opening Device: %s\n", device);

pfring* ring = pfring_open(device, MAXBYTES2CAPTURE, 0);
pfring_enable_ring(ring);

pfring_loop(ring, processRingPacket, (u_char*)&count, 1);

return 0;
}

查看 pf_ring API 中的 pfring_pkthdr 结构,我应该能够执行以下操作:

pkthdr->extended_hdr.if_index

但是,当我尝试打印出索引时,它只打印出 0。我猜测 if_index 实际上并没有被设置,因为当我实际调用 pf_ring 函数来获取设备 if 索引时,我实际上收到了一个值指定设备:

pfring_get_device_ifindex (pfring *ring, char *device_name, int *if_index)

问题是我正在尝试查看每个数据包的 if_index,因此在回调函数“processRingPacket”中无法一般地指定设备。我这里笼统地说是因为会有两个接口(interface)抓包。关于我的菜鸟错误可能是什么有什么想法吗?

最佳答案

我认为您需要将 PF_RING_LONG_HEADER 作为标志传递给 pfring_open()。所以它变成了,pfring_open(device, MAXBYTES2CAPTURE, PF_RING_LONG_HEADER);

关于c - pf_ring 和 libpcap if_index 没有返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590601/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com