我正在尝试使用scapy进行快速TCP连接。在这种情况下,我将使用HTTP,我希望服务器重定向我并关闭连接。这在很大程度上起作用。打开连接后,我发送HTTP GET并获得重定向回复。
但现在我想要破坏我的收获。我使用scapy的片段方法来分割有效载荷,我将它们分别发送出去。我用tshark捕获了序列,一切看起来都很好:
Capturing on eth1
0.000000 10.80.0.8 -> 30.0.0.1 TCP 40823 > http [SYN] Seq=0 Win=8192 Len=0
0.003022 30.0.0.1 -> 10.80.0.8 TCP http > 40823 [SYN, ACK] Seq=0 Ack=0 Win=2048 Len=0 MSS=1024
0.020846 10.80.0.8 -> 30.0.0.1 TCP 40823 > http [ACK] Seq=0 Ack=1 Win=8192 Len=0
0.042347 10.80.0.8 -> 30.0.0.1 IP Fragmented IP protocol (proto=TCP 0x06, off=0)
0.562284 10.80.0.8 -> 30.0.0.1 IP Fragmented IP protocol (proto=TCP 0x06, off=16)
1.079767 10.80.0.8 -> 30.0.0.1 IP Fragmented IP protocol (proto=TCP 0x06, off=32)
1.599802 10.80.0.8 -> 30.0.0.1 HTTP GET /index.php HTTP/1.1
1.603175 30.0.0.1 -> 10.80.0.8 TCP http > 40823 [ACK] Seq=1 Ack=44 Win=2048 Len=0
1.603245 30.0.0.1 -> 10.80.0.8 HTTP HTTP/1.1 302 Moved temporarily
3.648274 30.0.0.1 -> 10.80.0.8 HTTP [TCP Retransmission] HTTP/1.1 302 Moved temporarily
我在scapy中发送数据包的方式是使用srp(pkt,timeout=0.5,multi=1)
。但这似乎不适用于IP片段,因为它没有找到对最终片段发送的响应,尽管有3(ACK,重定向和重传)
Scapy将打印:
Begin emission:
Finished to send 1 packets.
..
Received 2 packets, got 0 answers, remaining 1 packets
(它只收到2,因为它只等待0.5秒,转发的时间要晚得多)
有没有办法告诉scapy将这些数据包捕获为有效答案?或以某种方式返回“无效”的答案?
答案 0 :(得分:0)
scapy目前不支持碎片答案:您可以轻松发送碎片数据包,但无法轻松接收其答案。
使用srp
时,Scapy会等待发送的每个数据包,这是一个独特的答案
这意味着如果几个数据包只生成一个答案(片段),则无法获得它们。
您可以在scapy github页面上将此报告为一个问题,以使其处于/状态