Scapy很好,你有srp()
函数发送并等待答案。
我正在寻找一种等待数据包的好方法,然后立即发送答案。
使用sniff(prn=callback)
,我在callback
函数中发送数据包似乎无法正常工作,因为sniff()
返回发送的数据包(可能与低级别套接字有关)
我还注意到,如果我使用sniff()
进行count=1
并在sniff()
返回时发送答案,我会丢失一些数据包而sniff()
未被调用。
例如,此代码:
from scapy.all import *
i = "eth3"
def cb(rx_pkt):
rx_pkt.summary()
dst_addr = rx_pkt[0].src
answer = Ether(src="00:24:81:7f:cc:4f",dst=dst_addr)/IP()/ICMP()
sendp(answer,iface=i)
sniff(iface=i,timeout=1000,prn=cb)
第一次调用cb()
时,会正确发送预期的数据包。但它似乎处理了自己发送的数据包。
有没有更好的方法来实现这个目标?