Virtualbox 如何使用Python中的Scapy在特定接口上与主机通信?

Virtualbox 如何使用Python中的Scapy在特定接口上与主机通信?,virtualbox,scapy,host,lan,arp,Virtualbox,Scapy,Host,Lan,Arp,我试图充当一台假机器,向我的主机(以及使用特定接口的特定网络上的其他机器)发送ARP请求。以下是我的代码片段,用于通过ARP请求在特定接口上发送特定主机IP地址的垃圾邮件,该地址来自伪造的MAC地址/IP地址: import scapy.all import threading import time import argparse def arp_sender(iface, host_ip, guest_ip, guest_mac): arp_req = scapy.layers.

我试图充当一台假机器,向我的主机(以及使用特定接口的特定网络上的其他机器)发送ARP请求。以下是我的代码片段,用于通过ARP请求在特定接口上发送特定主机IP地址的垃圾邮件,该地址来自伪造的MAC地址/IP地址:

import scapy.all
import threading
import time
import argparse


def arp_sender(iface, host_ip, guest_ip, guest_mac):
    arp_req = scapy.layers.l2.ARP(psrc=guest_ip, pdst=host_ip)
    bcast = scapy.layers.l2.Ether(
        src=guest_mac, dst='ff:ff:ff:ff:ff:ff')
    arp_req_bcast = bcast / arp_req
    while True:
        time.sleep(2)
        scapy.all.sendp(arp_req_bcast, iface=iface)


if __name__ == "__main__":
    pasrer = argparse.ArgumentParser()
    pasrer.add_argument('--iface', '-i', required=True)
    pasrer.add_argument('--host-ip', required=True)
    pasrer.add_argument('--guest-ip', required=True)
    pasrer.add_argument('--guest-mac', required=True)
    args = pasrer.parse_args()
    th = threading.Thread(target=arp_sender, args=(
        args.iface, args.host_ip, args.guest_ip, args.guest_mac
    ))
    th.start()
    th.join()
在监听Wireshark上的响应时,同一网络上的其他主机确实会响应ARP请求,但发送ARP请求的伪计算机所在的主机不是我的主机。我还尝试向主机中的Virtualbox机器发送ARP请求,但也没有响应。我使用Scapy发送第2层数据包的方式是否有问题,或者我需要在主机中执行其他操作来接受来自脚本的传入数据包

编辑


在Windows10主机上测试。在测试期间,我禁用了所有防火墙(私有、公共和域)。

我最初误解了这一点,认为这是虚拟机的问题

主机根据发送方地址(自身)检测到冲突,在这种情况下,显然没有响应ARP请求。我不太了解windows如何处理ARP冲突,但它应该是第2.4节中指定的选项之一

在任何时候,如果主机收到 “发送方IP地址”所在的ARP数据包(请求或回复) 在该接口上配置的主机自己的IP地址之一, 但“发件人硬件地址”与主机的任何地址都不匹配 自己的接口地址,那么这是一个冲突的ARP数据包, 表示其他主机也认为它正在有效地使用此 地址。要解决地址冲突,主机必须响应 如下(a)、(b)或(c)所述的冲突ARP数据包:


我不知道为什么它没有发送到vbox机器。您是否在尝试主机后立即向vbox计算机发送ARP请求?如果是这样,windows可能只是忽略了来自其检测到冲突的mac和IP地址的任何ARP请求。

@falhumai96您使用的是哪种VirtualBox网络模式?这里有一个列表,上面有几段:你能使用“桥接适配器”模式吗?但这可能需要管理员权限。如果可以,请尝试并检查来宾获得的IP,并尝试使用“桥接模式”将ARP请求发送到该IPI am到我的LAN网络。我的局域网和主机都可以访问Virtualbox虚拟机。问题是,我使用Scapy创建的伪ARP垃圾邮件机器没有从我的主机或Virtualbox VM获得任何响应,但它确实从同一LAN上的主机之外的主机获得响应(例如,我在同一LAN中ping一个Raspberry Pi控制器)。这个问题背后的主要意图是解决我在堆栈溢出问题中提出的一个问题:。@falhumai96只是为了澄清一下,ARP垃圾邮件机在QEMU中,而virtualbox机器就是您试图访问的机器?如果是这样的话,您可能希望在您的问题中指定这一点(以及您在上面提供的信息),并给它一个QEMU标签,因为这更相关。在阅读您的链接问题之前,我一直以为ARP垃圾邮件发送者是vbox。在这种情况下,ARP垃圾邮件脚本在我的主机中。这是为了复制我在链接问题的
scapy\u br.py
中看到的问题。这个问题与QEMU本身没有直接联系,而是我如何在我的主机(或主机内的另一个VM)和特定接口上的Scapy之间进行通信。