首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python中的Scapy在特定接口上与主机通信?

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

Stack Overflow用户
提问于 2020-02-24 03:13:21
回答 1查看 452关注 0票数 0

我试图充当一台假机器,将ARP请求发送到我的主机(以及使用特定接口的特定网络上的其他机器)。下面是我的代码片段,用于在带有ARP请求的特定接口上,从假MAC地址/ IP地址垃圾发送特定的主机IP地址:

代码语言:javascript
复制
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发送第二层数据包的方式有什么问题吗?还是在我的主机中我需要做一些其他的事情来接受来自我的脚本的传入数据包?

编辑

在Windows 10主机上进行测试。在测试时,我已经禁用了所有防火墙(私有、公共和域)。

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 03:54:41

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60369075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档