例如,有2个主机A和B,其IP地址分别为192.168.10.132和192.168.10.138。主机A发送一个seq = 1的TCP数据包,B回复一个ack = 1和seq = 2的数据包,依此类推。
代码如下:
send(IP(dst='192.168.10.138', src='192.168.10.132')/TCP(sport=54321, dport=32145, seq=1, flags='S')) # Host A
send(IP(dst='192.168.10.132', src='192.168.10.138')/TCP(sport=32145, dport=54321, seq=2, ack=1, flags='SA')) # Host B
但在wireshark中,捕获的第一个数据包显示seq = 0?
为什么会出现这种情况?或者我的代码有什么问题?
答案 0 :(得分:1)
这实际上是一项功能,如Wireshark's wiki page中所述:
默认 Wireshark 和 TShark 将跟踪所有 TCP 会话并转换所有序列号(< em> SEQ number)和 Acknowledge Numbers ( ACK 数字)成相对数字。这意味着,不是在显示中显示真实/绝对 SEQ 和 ACK 数字, Wireshark 将显示 SEQ 和确认相对于该会话的第一个看到的段的编号。
这意味着对于每个会话中看到的第一个数据包,所有 SEQ 和 ACK 数字始终从0开始。
这使得数字比 SYN 阶段期间
0 - (2^32)-1
范围内通常初始化为随机选择的数字的实数更小,更易于阅读和比较。
如果您对特定数据包的 SEQ 数字字段的实际价值感兴趣,可以在数据包详细信息窗格中突出显示该字段并查看其值在数据包字节窗格中。
或者,维基建议如何完全禁用该功能:
使用相对序列号是一种可用性增强功能,使数字更易于阅读和比较。为了将解剖与不能处理相对序列号的不太先进的分析器的数据进行比较,可能需要在 Wireshark 中暂时禁用此功能。
对于1.5之前的 Wireshark 版本:启用相对序列号首选项时 Wireshark 还将启用“Window Scaling”
Wireshark 1.5&amp;较新的:“Window Scaling”是默认启用的单独的 TCP 首选项。
如果“Window Scaling”已启用, Wireshark 将尝试监控 SYN <期间协商的 TCP窗口缩放选项/ em>阶段,如果检测到 TCP窗口缩放, Wireshark 也将缩放窗口字段并将其转换为有效窗口大小。这可能会影响解剖和报告窗口的内容,并且可能使 Wireshark 以不同方式解码数据包,但更准确地说,比其他工具。
要禁用相对序列号并将其显示为实际绝对数字,请转到 TCP 首选项并取消选中相关序列号的框。