我正在尝试使用send(pkt,iface =“eth0”)函数向接口发送IP数据包,我收到错误:
WARNING: Mac address to reach destination not found. Using broadcast
我尝试发送的接口没有IP地址,这就是我喜欢的方式。如果它有所不同,那么界面就是一个桥(用brctl创建)
IP数据包中存在主机的ARP条目,但似乎scapy没有进行从ARP表中获取MAC所需的查找...
思想?!
答案 0 :(得分:2)
我认为这是正常的,因为制作有效的ARP请求需要一个IP地址(并且Scapy维护自己的ARP表,独立于OS)。
您可以自己设置目标地址:srp(Ether(dst="[MAC address]")/[...])
。如果您需要先获取MAC地址,请以相同的方式创建并发送ARP请求。
要查询Scapy的ARP表,请访问元素conf.netcache.arp_cache
,该元素是Scapy特定的dict
子类(称为CacheInstance
)。
例如,要为您的主机添加条目(然后使用sr([...])
代替srp(Ether(dst="[MAC address])/[...])
),请使用:
conf.netcache.arp_cache['[IP address]'] = '[MAC address]'
答案 1 :(得分:1)
scapy中以太网帧的默认dst地址(MAC地址)是广播的。每当您将以太网帧发送到广播地址(ff:ff:ff:ff:ff:ff)时,就会产生此警告,就我而言。你可以通过这样创建数据包来看到这个:
以太()/ IP()或以太()/ ARP()
而不仅仅是IP()或ARP()。