我当前正在尝试使用send(pkt,iface =" eth0")函数将IP数据包发送到接口,并且我会收到错误:
WARNING: Mac address to reach destination not found. Using broadcast
我试图发送的接口没有IP地址,这就是我更喜欢它的方式。如果有所不同,接口是桥梁(用BRCTL创建)
IP数据包中的主机有一个ARP条目,但是Scapy似乎并没有从ARP表中获取Mac所需的查找...
想法?!
我会说这是正常的,因为提出有效的ARP请求需要IP地址(Scapy维护自己的ARP表,独立于OS One)。
您可以自己设置目标地址: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]'
Scapy中以太网框架的默认DST地址(MAC地址)是广播的。就我而言,每当您将以太网框架发送到广播地址(FF:FF:FF:FF:FF:FF:FF)时,就会生成此警告。您可以通过创建这样的数据包来看到这一点:
ether()/ip()或ether()/arp()
而不仅仅是ip()或arp()。