python - 如何使用 scapy 取消设置 TCP 数据包中的 EOL 选项

标签 python tcp scapy

我一直在 Python 中使用 scapy,但更具体地说,我一直在创建数据包并尝试在 TCP 层中设置选项。

我知道我可以创建一个数据包

>>> a = IP()/TCP()

我也知道我可以在 TCP 层设置选项

>>> a[TCP].options=[('MSS',1200),('NOP',None)]

或者

>>> a[TCP].options=('MSS',1200),('NOP',None)

我遇到的问题是在我发送数据包并在 wireshark 中观察它之后。当我没有设置时,Wireshark 总是显示在我的数据包中设置了列表结尾 (EOL) 选项。我不认为无论如何总是设置该选项,因为我已经看到很多没有显示该选项的 TCP 数据包。有没有办法在不包括 EOL 选项的情况下在 scapy 中设置 TCP 选项?

谢谢。

最佳答案

我认为这是一个对齐问题。无需 Wireshark 进行检查。在 scapy 中,您可以使用 TCP(str(TCP(options=...))) 强制 Scapy 构建数据包并解析结果字节,或者使用 .show2( ) 分组方法。

单独的 ('MSS', 1200) 选项需要 4 个字节,因此不需要添加任何额外的选项:

>>> TCP(str(TCP(options=[('MSS',1200)]))).options
WARNING: No IP underlayer to compute checksum. Leaving null.
[('MSS', 1200)]

('NOP', None) 选项仅适合 1 个字节,因此将添加 3 个空字节。第一个将显示为 ('EOL', None),当然,由于 EOL 表示列表结束,因此不会考虑接下来的两个字节。

>>> TCP(str(TCP(options=[('NOP', None)]))).options
WARNING: No IP underlayer to compute checksum. Leaving null.
[('NOP', None), ('EOL', None)]

之所以需要 4 字节对齐是因为数据偏移字段 (dataofs) 表示“从 TCP 层开始到的 4 字节字数数据的开头”。

关于python - 如何使用 scapy 取消设置 TCP 数据包中的 EOL 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21166495/

相关文章:

python - 根据条件检查修改循环

python - queue.get() 仅返回一项

Python - 在 for in 语句中使用字符串?

python - PDF 响应在 Python 3 中损坏但在 Python 2 中有效

networking - TCP 和 Go Back N 的区别

Windows 用户空间 TCP/IP 堆栈 - 如何抑制指定以太网接口(interface)的内核堆栈?

sockets - Groovy TCP 客户端挂起

python - 使用 scapy 在 PCAP 中查找 tcp 数据包的答案

python - 使用 scapy 查找 tcp 流

python - 注册、注销、从 python Web 服务执行 eureka 发现的所有操作