我正尝试手动发送一个大的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个数据包
有人知道,我的代码有什么问题吗?
答案 0 :(得分:0)
很多原因导致此操作不起作用:
sr()
代表“发送接收”。此功能已经发送了数据包,因此您无需事先发送数据包sr()
返回多个答案,这意味着如果您不^ C或超时,它不会停止。您正在寻找第一个答案返回的sr1()
sr/sr1
时,它会检查每个数据包是否有可能的答案,但不会有任何问题,因为它不会对流量进行碎片整理。要获得此答案,您需要自己实施所有«答案检查»,或找到其他方法。 无论如何,我不知道是否有很多服务器会回答这样的ICMP