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

问题描述 投票:0回答:1

我试图充当伪造的机器,向我的主机(以及使用特定接口的特定网络中的其他计算机)发送ARP请求。这是我的代码段,用于通过伪造的MAC地址/ IP地址通过ARP请求向特定接口上的特定主机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请求的伪造机器所在的主机。我还尝试将ARP请求发送到我的Virtualbox计算机主机,也没有回应。我使用Scapy发送第2层数据包的方式是否有问题,或者我需要在主机中做其他事情以接受来自脚本的传入数据包?

编辑

在Windows 10主机上测试。在测试时,我已禁用了所有防火墙(专用,公用和域)。

virtualbox scapy host lan arp
1个回答
0
投票

由于您无法在来宾上获得arp请求,因此很有可能是主机上的防火墙或网络设置出现了问题。

在Linux上,您可以使用网桥工具并将网桥连接到主机的以太网(或wifi)接口。然后,通过TAP接口将来宾添加到网桥将为来宾提供与主机和其他计算机在网络上自己的IP地址。

由于访客可以将ARP请求发送到除主机之外的其他机器,这表明NAT正在发生,并且您的防火墙规则未使用您尝试访问的IP转发到主机接口。

我知道这确实应该是一条评论(我的信誉是48/50 ...),但是如果您可以使用自己的操作系统和有关如何将来宾连接到网络的信息来更新您的问题,将更容易获得正确答案。

© www.soinside.com 2019 - 2024. All rights reserved.