gpt4 book ai didi

ubuntu - 使用 pcap_next_ex() 捕获良好,但以太网 header 大小不同。 14 个使用 Ubuntu,4 个使用 FreeBSD

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:42 25 4
gpt4 key购买 nike

我有一个正在运行的应用程序需要在我的本地平台上正确执行,运行 Ubuntu 18.4,并重新编译,在 FreeBSD 平台上运行。

我遇到了数据包问题,因为在 FreeBSD 平台上以太网报头短了 10 个字节

在收到数据包后,我通过查看数据包中始终存在于我的数据中的 ICMP header 中的数据来适应软件的差异。了解该数据的偏移量可以决定有关 header 大小的信息。

一旦我知道了以太网报头的大小,我就将其剥离,剩下的内容在设备之间是一致的。

但是,我被窃听了,有一个我无法理解的区别。任何人都可以指出描述 4 或 14 字节差异原因的文档吗?

我浏览了网络以寻找解释,但没有发现任何可以证明差异的理由。即使是 FreeBSD 的“Ethernet.h”也显示 14 个字节。

#define ETHER_HDR_LEN (ETHER_ADDR_LEN*2 + ETHER_TYPE_LEN) where that is (6*2)+2 equals 14

最佳答案

如果您在环回接口(interface)上捕获(lo 在 Linux 上,lo0 在 FreeBSD 上),则不能保证数据包 一个以太网头。它们在 Linux 上运行,但在 FreeBSD(以及 NetBSD 和 OpenBSD 以及 DragonFly BSD 和 macOS)上有不同的 header ;该 header 长 4 个字节。

一旦打开用于捕获的界面,您必须pcap_t 上调用pcap_datalink() ;告诉你标题是什么。您必须NOT采用以太网 header 。

参见 this list of link-layer header types有关您可能会看到的链路层报头类型的描述。 pcap_datalink() 返回 DLT_ 值,而不是 LINKTYPE_ 值,因此将其结果与该页面的 DLT_ 值进行比较。

关于ubuntu - 使用 pcap_next_ex() 捕获良好,但以太网 header 大小不同。 14 个使用 Ubuntu,4 个使用 FreeBSD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58139013/

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