我试图充当一台假机器,将 ARP 请求发送到我的主机(以及使用特定接口的特定网络上的其他机器)。这是我的代码片段,用于从伪造的 MAC 地址/IP 地址向特定接口上的特定主机 IP 地址发送 ARP 请求垃圾邮件:
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 主机上测试。在测试时,我禁用了所有防火墙(私有、公共和域)。