【问题标题】:Scapy sending multiple packets when only one is specified当只指定一个数据包时,Scapy 发送多个数据包
【发布时间】:2020-09-15 22:05:54
【问题描述】:

我正在使用 Scapy 发送一个简单的 ARP 请求。我注意到它会发送多个数据包,即使我只给它一个数据包:

from scapy.sendrecv import sr1
from scapy.layers.l2 import ARP
from typing import Optional

def request_mac(target_ip: str, **kwargs) -> Optional[str]:
    req = ARP(pdst=target_ip)
    reply = sr1(req, **kwargs)
    return reply and reply[ARP].hwsrc

request_mac("192.168.123.118", timeout=5)

在 Wireshark 中,我可以看到它发送了两个 ARP 而不是一个:

即使输出只显示一个正在发送:

Begin emission:
Finished sending 1 packets.
................................................................................................................
Received 112 packets, got 0 answers, remaining 1 packets

如果我将retry 参数设置为sr1,我会为每一个明确发送的数据包发送两个数据包。

这是预期的行为吗?有没有办法让它只发送一个?当我做一个端口扫描器时,我没有看到 TCP 段的重复发送,所以看起来它可能是特定于 ARP 的?

【问题讨论】:

  • 我已经能够在 Macos/Linux 上复制它前提是 ARP 数据包是在您的子网中发送的。第二个数据包在第一个数据包后 2 秒发送。这是srsr1 的问题。
  • @RossJacobs 是的,对我来说,它们之间也有大约两秒钟的延迟。我在 Windows 上。
  • 我会在 github.com/secdev/scapy 上添加一个问题。如果你需要一些有用的东西,只需使用scapy.layers.l2.arping
  • @RossJacobs 哦,谢谢。这不是一个巨大的交易,只是在某些情况下我想限制我产生的流量。
  • 事实证明它对 ICMP 数据包做同样的事情,这在使用 sr 和数据包集时会搞砸。我收到重复的回复,而不是每个请求的回复。

标签: python scapy


【解决方案1】:

这显然是无关的 ARP 流量。因为图片中的X.X.X.118 != 代码中的X.X.X.123

例如,当我运行您的代码时,我只收到一个请求,然后是网络上的各种 arp 请求

在我的捕获中,我看到每秒来自上游防火墙的 192.168.128.5 的 ARP 请求。

【讨论】:

  • 哎呀,我的问题中的.123 是以前编辑的残余。在生成输出的代码中,我使用的是.118。奇怪的是你不能复制它。
猜你喜欢
  • 1970-01-01
  • 2020-03-24
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2014-04-20
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多