Python 我没有答案

Python 我没有答案,python,scapy,Python,Scapy,我正在尝试与scapy建立快速TCP连接。在这个场景中,我将使用HTTP,我希望服务器重定向我并关闭连接。这在很大程度上是有效的。打开连接后,我发送一个HTTPGET并得到一个重定向回复 但现在我想把我的得到分成碎片。我使用了scapy的片段方法来分割有效负载,并将它们发送出去。我用tshark拍摄了这个序列,一切看起来都很好: 在eth1上捕获 0.00000010.80.0.8->30.0.0.1 TCP 40823>http[SYN]Seq=0 Win=8192 Len=0 0.00302

我正在尝试与scapy建立快速TCP连接。在这个场景中,我将使用HTTP,我希望服务器重定向我并关闭连接。这在很大程度上是有效的。打开连接后,我发送一个HTTPGET并得到一个重定向回复

但现在我想把我的得到分成碎片。我使用了scapy的片段方法来分割有效负载,并将它们发送出去。我用tshark拍摄了这个序列,一切看起来都很好:

在eth1上捕获
0.00000010.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]序列=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碎片化IP协议(proto=TCP 0x06,off=0)
0.562284 10.80.0.8->30.0.0.1 IP碎片化IP协议(协议=TCP 0x06,关闭=16)
1.079767 10.80.0.8->30.0.0.1 IP碎片化IP协议(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/1.1 302临时移动
3.648274 30.0.0.1->10.80.0.8 HTTP[TCP重传]HTTP/1.1 302临时移动

我在scapy中发送数据包的方式是使用
srp(pkt,timeout=0.5,multi=1)
。但这似乎不适用于IP片段,因为它找不到对发送的最终片段的响应,尽管有3个(确认、重定向和重新传输) Scapy将打印:

开始发射:
已完成发送1个数据包。
..
收到2个数据包,得到0个答案,剩余1个数据包

(它只收到2,因为它只等待0.5秒,而重新传输要晚得多)


有没有办法告诉scapy将这些数据包捕获为有效答案?或者以某种方式返回“无效”答案?

编辑:从2.4.3开始,Scapy支持HTTP碎片整理。请参见

你可以做:

sniff(session=TCPSession)
这将自动对它们进行碎片整理。注意:由于TCP分段是特定于协议的,因此目前只支持HTTP

原始答案:

scapy目前不支持分段答案:您可以轻松发送分段数据包,但无法轻松接收其答案

当使用
srp
这意味着,如果几个数据包只生成一个答案(片段),它将无法得到它们

您可以在scapy github页面将此作为问题报告,以使其工作/状态