【发布时间】:2019-08-30 17:22:47
【问题描述】:
我正在用 libpcap 编写一个工具来分析 TCP 流量。我面临的问题是,在提供给我进行测试的 pcap 文件中,我看到 IP 标头从偏移量 0x10 开始(因此在 16 个字节之后),而所有文档 + 实时捕获显示它始终位于 0xE (如文档声明)。
我如何尝试获取 ip 和 tcp 标头:
struct iphdr *ip;
struct tcphdr *tcp;
ip = (struct iphdr *)(packet + sizeof(struct ethhdr));
tcp = (struct tcphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr)
一些wireshark图片:
你可以看到它在 14 个字节后开始,就像它应该的那样
转储文件 ip 标头在 16 个字节后开始
解析 IP 和 TCP 标头的正确方法是什么?
谢谢
【问题讨论】:
-
这完全取决于数据链路协议。不同的数据链路协议具有不同的帧头大小,即使使用相同的数据链路协议,您也可以有不同的帧大小。例如,以太网标头通常是 14 个八位字节,但使用 802.1Q 标记时,它是 18 个八位字节。此外,Wi-Fi 帧标头与以太网标头不同,其他数据链路协议的标头也大不相同。
-
可能是更适合Network Engineering Stack Exchange的问题。
标签: linux networking pcap libpcap