linux 使用scapy在tcp中添加选项

vzgqcmou  于 2023-01-12  发布在  Linux
关注(0)|答案(2)|浏览(228)

在接收到TCP ACK(带有选项实验)时,如下所示

我想生成TCP SYN+ACK(带有选项experiment和Fast Open Cookie),如下所示

我想使用scapy生成TCP SYN+ACK,因此我添加了
所以我在/usr/share/pyshared/scapy/layers/inet.py中添加了254 : ("RFC3692-style Experiment","!HHH"),如下所示

TCPOptions = (
              { 0 : ("EOL",None),
                1 : ("NOP",None),
                2 : ("MSS","!H"),
                3 : ("WScale","!B"),
                4 : ("SAckOK",None),
                5 : ("SAck","!"),
                8 : ("Timestamp","!II"),
                14 : ("AltChkSum","!BH"),
                15 : ("AltChkSumOpt",None),
                25 : ("Mood","!p"),
                254 : ("Experiment","!HHHH")
                },
              { "EOL":0,
                "NOP":1,
                "MSS":2,
                "WScale":3,
                "SAckOK":4,
                "SAck":5,
                "Timestamp":8,
                "AltChkSum":14,
                "AltChkSumOpt":15,
                "Mood":25,
                "Experiment":254
                } )

收到TCP ACK(带实验选项)后,我执行以下scapy函数:

TCP_SYNACK=TCP(sport=Ddport, dport=Ssport, flags="SA", seq=SeqNr, ack=AckNr, options=[('Experiment',0xf989,0xcafe,0x0102,0x0002),('NOP',0),('NOP',0)])
ANSWER=sr1(ip/TCP_SYNACK)

但是我得到了一个python错误。看起来我在用scapy定义TCP数据包中的选项字段时犯了错误。我在做什么?

3b6akqbq

3b6akqbq1#

我认为您需要以tuple指定可选字段的值,如下所示:

TCP_SYNACK = TCP(sport=Ddport, dport=Ssport, flags="SA", seq=SeqNr, ack=AckNr, options=[('Experiment', (0xf989, 0xcafe, 0x0102, 0x0002)), ('NOP', 0), ('NOP', 0)])
oknwwptz

oknwwptz2#

但是我也遇到了同样的问题,你可以把一个整数作为你的选项元组的第一个元素,我想把它作为一个散列,所以我在scapy中使用了下面的代码:

pkt = TCP(options=[("NOP", None), (19, "\xff\xff\xff\xff\xff\xff")])

相关问题