gpt4 book ai didi

c - libpcap,将我的数据包的选择性区域保存到 pcap 文件

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

我使用如下的 libpcap 过滤器在(Linux ubuntu、c、监控模式)中捕获了信标文件

char *filter = "wlan type mgt subtype beacon";
pcap_compile(pcd,&bpg,filter,-1,PCAP_NETMASK_UNKNOWN);
pcap_setfilter(pcd, &bpg);

我捕获了信标帧,但它包含 radiotap header 。 (pcak 数据链路返回 IEEE_802_11_RADIO)

但我只想将信标帧(删除 radiotap header )保存到 pcap 文件。但我在函数 pcap_dump() 中找不到此类选项

有什么方法可以保存数据包的选择性部分(删除 radiotap 部分)吗?或者是否有任何过滤选项可以帮助我在没有 radiotap 的情况下只获得信标帧??

最佳答案

Is there any method to save selective parts(remove radiotap part) of packet??

是的。

首先,如果您正在写入 pcap 文件(我假设您正在这样做,正如您提到的 pcap_dump() ),请不要使用 pcap_t当你打开 Wi-Fi 适配器作为 pcap_dump_open() 的参数时你得到了,因为您不会将带有 radiotap header 的数据包写入 pcap 文件,并传递 pcap_t当你打开 Wi-Fi 适配器作为 pcap_dump_open() 的参数时你得到了将意味着文件的链路层 header 类型将为 DLT_IEEE802_11_RADIO ,这意味着该文件将被其他程序解释为包含带有 radiotap header 的数据包。

相反,使用 pcap_open_dead()制造假货 pcap_t ,并使用 DLT_IEEE802_11作为其链路层报头类型,并在 pcap_dump_open() 中使用 that打电话。

然后,对于每个数据包:

首先,确保“网络长度”(数据包的 lenstruct pcap_pkthdr 字段,由 libpcap 提供给您的程序) >= 4 字节,如果不是,拒绝数据包。这意味着数据包的长度不足以包含完整的 radiotap header ,这可能意味着驱动程序中存在错误。

然后,确保“捕获的数据长度”(数据包的caplenstruct pcap_pkthdr 字段,由 libpcap 提供给您的程序)>= 4 字节,如果不是,则拒绝该数据包.这意味着没有足够的捕获数据用于完整的 radiotap header ,这可能意味着您的程序指定的快照长度太短。

然后获取 it_len来自 radiotap header 的字段在数据包的开头。请注意,它是小端,而不是大端,因此您不需要在小端处理器(例如 32 位和 64 位 x86 处理器)上对其进行字节交换,而您确实 需要在大端处理器(例如运行 Linux 时的 PowerPC)上对其进行字节交换。

然后检查以确保 lencaplen struct pcap_pkthdr 的字段对于数据包都是 >= it_len值(value)。

然后复制struct pcap_pkthdr将数据包发送到单独的 struct pcap_pkthdr变量,减去 it_len来自那个单独的struct pcap_pkthdr变量的 lencaplen变量,得到一个指向it_len的指针超过数据包开头的字节,并传递该指针和指向 struct pcap_pkthdr 的指针您从中减去的变量 it_len来自 lencaplen值,到 pcap_dump() .

关于c - libpcap,将我的数据包的选择性区域保存到 pcap 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302713/

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