无法收到零碎的ICMP回声请求的答案

时间:2018-10-14 16:31:28

标签: python scapy icmp

我正尝试手动发送一个大的ICMP Echo请求,因此我编写了以下代码:

frags = fragment(IP(dst=dst)/ICMP()/Raw(load=('x')*50000))


s = conf.L3socket(iface=iface)      #improve Sending performance (https://byt3bl33d3r.github.io/mad-max-scapy-improving-scapys-packet-sending-performance.html)

count = len(frags)                  #Count fragments
i = 0
maximum = count - 1                 
print "maximum: " + str(maximum)

#Send all Frags but the last
while i < maximum:
    print "i: " + str(i)
    s.send(frags[i]) 
    i = i + 1
answer = s.sr(frags[i]) # using sr(), to receive an answer
print(ans[0])

接收ICMP Echo响应无效。 我得到的答案总是像

  

收到9个数据包,得到0个答案,剩余1个数据包

有人知道,我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

很多原因导致此操作不起作用:

  • sr()代表“发送接收”。此功能已经发送了数据包,因此您无需事先发送数据包
  • sr()返回多个答案,这意味着如果您不^ C或超时,它不会停止。您正在寻找第一个答案返回的sr1()
  • scapy无法(尚未)对流«进行碎片整理。当您呼叫sr/sr1时,它会检查每个数据包是否有可能的答案,但不会有任何问题,因为它不会对流量进行碎片整理。要获得此答案,您需要自己实施所有«答案检查»,或找到其他方法。

无论如何,我不知道是否有很多服务器会回答这样的ICMP