gpt4 book ai didi

linux - IP header 可以在不同机器上有不同的偏移量吗?

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

我正在使用 libpcap 编写一个工具来分析 TCP 流量。我面临的问题是,在提供给我用于测试的 pcap 文件中,我看到 IP header 从偏移量 0x10 开始(因此在 16 字节之后),而所有文档 + 实时捕获显示它始终在 0xE (如文档声明)。

我如何尝试获取 ip 和 tcp header :

struct iphdr *ip;
struct tcphdr *tcp;
ip = (struct iphdr *)(packet + sizeof(struct ethhdr));
tcp = (struct tcphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr)

一些wireshark图片:

实时捕捉 - enter image description here

如您所见,它在 14 个字节后开始,就像它应该的那样

离线转储文件 - enter image description here

转储文件 ip 头在 16 字节后开始

解析 IP 和 TCP header 的正确方法是什么?

谢谢

最佳答案

Ron Maupin 100% 正确。提供更多细节:

The problem I'm facing is that inside a pcap file that was provided to me for testing

The pcap-savefile(5) man page表示pcap文件头中的字段之一是“Link-layer header type”字段;正如手册页所说:

a 4-byte number giving the link-layer header type for packets in the capture; see pcap-linktype(7) for the LINKTYPE_ values that can appear in this field.

如果您使用 pcap_open_offline() or one of the variants thereof 打开了捕获文件, the pcap_datalink() routine在 libpcap 中将返回链路层 header 类型。

链路层报头类型是解释数据包内容的要求。例如,对于 IP 数据包,IP header 位于任何元数据 header 和链路层 header 之后,并且并非所有元数据 header (如果存在)和并非所有链路层 header 都具有相同的长度,因此您必须 知道存在什么链路层报头才能知道 IP 报头从哪里开始 - 或者,事实上,甚至可以确定数据包是否是 IP 数据包!例如,对于以太网数据包,您必须查看以太网类型/长度字段以确定它是 0x0800(对于 IPv4)还是 0x86dd(对于 IPv6)。

The tcpdump.org list of link-layer header types指示存在哪些链路层类型。给出的数值是那些出现在文件的“Link-layer header type”字段中的数值(或在 an Interface Description Block in a pcapng file 的 LinkType 字段中 - libpcap 可以读取一些 pcapng 文件,其所有接口(interface)描述 block 必须具有相同的 LinkType,并将在 pcap_datalink() 调用中返回链路层类型。

pcap_datalink() 返回的值是链路层报头类型列表中的 DLT_ 值,因此以太网文件(或以太网接口(interface)描述 block )的值为 1,或者LINKTYPE_ETHERNET,在header中,会映射到pcap_datalink()返回值中的DLT_EN10MB。 (在大多数情况下,LINKTYPE_值和对应的DLT_值在数值上是相同的,但也有一些异常(exception)情况,即不同的操作系统对相同的DLT_类型有不同的数值。)第二次捕获在捕获文件中有LINKTYPE_LINUX_SLL,所以 pcap_datalink() 会返回 DLT_LINUX_SLL。

链路层 header 类型页面对链路层 header 类型的描述应该可以帮助您编写代码来解释该链路层 header 类型的 header 数据。

此外,正如 Ron Maupin 指出的那样,以太网报头之后 IP 报头之前也可能有 VLAN 报头。

(而且,由于这是一个编写程序来读取捕获文件的人提出的问题,而不是由设计或维护网络的人提出的问题,因此它似乎更适合 Stack Overflow 而不是网络工程。)

关于linux - IP header 可以在不同机器上有不同的偏移量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730926/

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