为了找到它,阅读网络设备的协议规范和已发送的包是有帮助的。例如,为了理解原始数据,我们需要知道以太网设备的帧描述和 TCP/IP 包的包描述。研究了这一点,我们在 Wireshark 中记录了一些流量,并在 Wireshark 的上部窗口中选择了一个块。中间的窗口会以明文形式告诉你 Wireshark 收到了什么。单击中间窗口中的任何行时,Wireshark 将在下部窗口中标记原始数据的字节,其中包含单击行的信息。此外,您可以单击原始数据,然后标记明文。此外,状态行也会通知您。这对于理解数据非常有帮助。
我需要阅读以太网流量的 TCP / IPv4 包。该块以标识块类型 = 0x00000006和块的长度开始。该设备是以太网,所以我有链接类型LINKTYPE_ETHERNET。节长度可以从字节 16-23 中获取。块头的其他条目可以从这里获取。
在块头或 28 字节之后,以太网帧带有以下条目(请参阅此处了解说明):
- mac地址目标,6字节
- mac地址源,6字节
- 类型:0x0800 表示 IPv4,0x0806 表示 ARP,0x86DD 表示 IPv6,0x8100 表示是否存在 IEEE 802.1Q 标签。
对于 IPv4 包或type = 0x0800,以下字节是 IPv4 标头(有关说明,请参见此处):
- IP 版本和报头长度,1 字节
- 区分服务字段,1字节
- 总长度,2 个字节
- 标识,2 个字节
- 标志,1 个字节
- 片段偏移量,1 字节
- 生存时间,1 个字节
- TCP 协议为 0x06,1 字节
- 标头校验和,2 个字节
- 源 IP 地址
- 目标 IP 地址
- 选项
总长度非常重要:IPv4 + TCP 包的最后一个字节之后的字节位于条目IP 版本和标头长度之后的总长度字节。但是,此条目可能很棘手。尽管 IP 标头长度已经有 20 个字节,但我标头了一个长度为 0 的条目。在这种情况下,Wireshark 很有帮助。据报道
[总长度:1547字节(报告为0,推测是因为“TCP分段卸载”(TSO))]
可以从这里获得对这种现象的详细描述。在这种情况下,我可以通过上面的部分长度减去以太网帧的长度(14 字节)减去 IP 报头的长度减去 TCP 报头的长度来计算有效负载长度。但是,尽管我没有这些问题,但可能会出现填充问题。当包长度扩展为 4 字节的倍数之类的时候,就会出现填充问题。
如果 IPv4 头的协议是 0x06,则 TCP 包如下。可以从此处获取 TCP 包的详细信息。当然,Wireshark 还可以帮助您解释 TCP 包:只需单击中间窗口中属于 TCP 包的行或单击原始数据。
如此处所述,pcapng 文件的解释有许多 if 和 whens。