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

Sending scapy IP packet with no interface IP error

我目前正在尝试使用 send(pkt, iface="eth0") 函数将 IP 数据包发送到接口,但出现错误:

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

我尝试发送的接口没有 IP 地址,这是我希望的方式。如果它有所作为,接口是一个桥(使用 brctl 创建)

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

想法?!

我会说这是正常的,因为发出有效的 ARP 请求需要一个 IP 地址(Scapy 维护自己的 ARP table,独立于 OS)。

您可以自己设置目的地址:srp(Ether(dst="[MAC address]")/[...])。如果需要先获取MAC地址,同样方法创建并发送ARP请求。

要查询 Scapy 的 ARP table,访问元素 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),就会生成此警告。您可以通过像这样创建数据包来查看:

Ether()/IP() 或 Ether()/ARP()

而不只是 IP() 或 ARP()。