1

我正在尝试使用 Scapy 中的第二层广播地址向默认网关发送回显请求。

我写了这段代码:

packet = Ether(dst='FF:FF:FF:FF:FF:FF') / IP(dst='192.168.1.1') / ICMP()
sendp(packet)

但没有返回响应

据我了解在网络内发送数据包的过程,该帧应该已经发送到交换机,因为目标的 IP 地址在同一个网络中,然后交换机应该已经将它发送给连接到它的每个人,因为它看到广播地址。

这个理论有什么问题?

顺便说一句,我正在使用wireshark 嗅探流量,在那里我可以看到捕获的ping 请求,但找不到该答案的响应,这可能意味着这是一个网络问题,而不是软件问题。

4

1 回答 1

0

首先,有两个“与 Scapy 相关的”点可能会阻止您看到潜在的响应。

  • 如果您想发送一个数据包并获得答案(或者None如果没有收到答案),请使用srp1(). sendp()将发送数据包,但不会等待答复。

  • 使用第 2 层命令(*p()函数)时,不要忘记指定要使用的接口作为iface=参数,当它不是您的默认接口时(conf.iface)。

然后,有一个“网络”原因可以解释您没有得到任何答案:您发送的数据包是在第 2 层“广播”,而在第 2 层“单播我”(从您的网关的角度来看) 3.

一些 IP 堆栈(至少,OpenBSD)会丢弃这些数据包,而其他一些(至少,Linux)会接受它。

您可以尝试向网关地址发送单播数据包,看看会发生什么:srp1(Ether() / IP(dst='192.168.1.1') / ICMP()),或者(让 Scapy 处理第 2 层,假设您的路由表正确到达 192.168.1.1:)sr1(IP(dst='192.168.1.1') / ICMP())

于 2017-09-22T16:00:24.213 回答