发送scapy IP数据包,没有接口IP错误

时间:2015-05-12 15:09:13

标签: python ip scapy mac-address arp

我正在尝试使用send(pkt,iface =“eth0”)函数向接口发送IP数据包,我收到错误:

WARNING: Mac address to reach destination not found. Using broadcast

我尝试发送的接口没有IP地址,这就是我喜欢的方式。如果它有所不同,那么界面就是一个桥(用brctl创建)

IP数据包中存在主机的ARP条目,但似乎scapy没有进行从ARP表中获取MAC所需的查找...

思想?!

2 个答案:

答案 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()。