【问题标题】:Using scapy to send TCP handshake, but in wireshark the seq number is wrong?使用scapy发送TCP握手,但是在wireshark中seq号错了?
【发布时间】:2016-07-03 04:28:01
【问题描述】:

例如,有 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?

screenshot of wireshark

为什么会出现这种情况?或者我的代码有什么问题?

【问题讨论】:

    标签: python networking tcp wireshark scapy


    【解决方案1】:

    这实际上是一个功能,如Wireshark's wiki page中所述:

    默认情况下 WiresharkTShark 将跟踪所有 TCP 会话并转换所有 序列号 (SEQ 个数)和 Acknowledge NumbersACK 个数)为相对数。这意味着 Wireshark 将显示一个 SEQACK 编号相对于该对话的第一个看到的片段。

    这意味着对于每个对话中看到的第一个数据包,所有 SEQACK 编号始终从 0 开始。

    这使得数字比实数更小,更易于阅读和比较,实数通常在 SYN 阶段初始化为0 - (2^32)-1 范围内随机选择的数字。

    如果您对某个数据包的 SEQ 编号字段的实际值感兴趣,可以在 数据包详细信息 窗格中突出显示该字段并查看其值在 数据包字节 窗格中。

    另外,wiki 建议如何完全禁用该功能:

    使用相对序列号可以增强可用性,使数字更易于阅读和比较。为了将解剖与来自无法处理相对序列号的不太先进的分析器的数据进行比较,可能需要在 Wireshark 中暂时禁用此功能。

    对于 1.5 之前的 Wireshark 版本:当启用 相对序列号 首选项时,Wireshark 也将启用 “窗口缩放” .

    对于 Wireshark 1.5 及更高版本:“窗口缩放” 是默认启用的单独 TCP 首选项。

    如果启用“窗口缩放”Wireshark 将尝试监控在 SYNTCP 窗口缩放 选项/em> 阶段,如果检测到这样的 TCP 窗口缩放Wireshark 也会缩放窗口字段并将其转换为有效窗口大小。这可能会影响解析和报告的窗口,并可能使 Wireshark 以不同方式解码数据包,但比其他工具更准确。

    要禁用相对序列号并将它们显示为真实的绝对数字,请转到 TCP 首选项并取消选中相对序列号框。

    【讨论】:

    • 感谢您的回答。这成功解决了我的问题!
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2014-04-27
    • 2014-12-16
    • 1970-01-01
    • 2014-03-23
    • 2018-07-15
    相关资源
    最近更新 更多