我正在尝试使用Scapy中的第二层广播地址向默认网关发送echo-request。
我写了这段代码:packet = Ether(dst='FF:FF:FF:FF:FF:FF') / IP(dst='192.168.1.1') / ICMP()
sendp(packet)
但未返回任何回复
据我了解在网络内发送数据包的过程,该帧应该已经转到交换机,因为目的地的IP地址在同一个网络中,然后交换机应该将它发送给连接到它的每个人因为它看到了广播地址。
这个理论有什么问题?
顺便说一句,我正在使用wireshark嗅探流量,在那里我可以看到捕获的ping请求,但无法找到该答案的响应,这可能意味着这是一个网络问题,而不是软件问题。答案 0 :(得分:0)
首先,有两个“Scapy相关”点可能会阻止您看到潜在的反应。
如果您想发送数据包并获得答案(如果未收到答案,则为None
),请使用srp1()
。 sendp()
将发送数据包,但不会等待回答。
使用第2层命令(*p()
函数)时,不要忘记指定要使用的接口,作为iface=
参数,当它不是默认接口时({ {1}})。
然后,有一个“网络”原因可以解释你没有得到任何答案:你发送的数据包是第2层“广播”,“单播我”(从你的网关角度来看) )在第3层。
某些IP堆栈(至少是OpenBSD)丢弃此类数据包,而其他一些(至少是Linux)接受它。
您可以尝试向网关地址发送单播数据包,看看会发生什么:conf.iface
或(让Scapy处理第2层,假设您的路由表正确到达192.168.1.1:{{1 }})。