如何用Scapy创建带自定义选项字段的TCP数据包

2 投票
1 回答
1211 浏览
提问于 2025-04-18 18:01

我正在尝试创建一个带有自定义选项字段的TCP数据包。

通常情况下,当选项是标准选项时,我们可以通过“options”这个参数来实现,比如“MSS”选项:

>>> hexdump(IP()/TCP(dport=5678,flags="S",options=[('MSS',16)]))
0000 45 00 00 2C 00 01 00 00 40 06 7C C9 7F 00 00 01 E..,....@.|.....
0010 7F 00 00 01 00 14 16 2E 00 00 00 00 00 00 00 00 ................
0020 60 02 20 00 69 86 00 00 02 04 00 10 `. .i.......

但是当涉及到非标准选项时,比如我需要一个类型为0xf5的选项。我尝试了:

>>> hexdump(IP()/TCP(dport=5678,flags="S",options=[(0xF5,16)]))
WARNING: option [245] is not string.
WARNING: option [245] is not string.
0000 45 00 00 28 00 01 00 00 40 06 7C CD 7F 00 00 01 E..(....@.|.....
0010 7F 00 00 01 00 14 16 2E 00 00 00 00 00 00 00 00 ................
0020 50 02 20 00 7B 9E 00 00 P. .{...

显然,这样做不行。那么有没有办法用scapy来实现呢?

1 个回答

1

TCPOptions是在scapy/layers/inet.py这个文件里定义的。你可以在里面添加你自己的选项。

撰写回答