Scapy仅指定一个时发送多个数据包

问题描述

我正在使用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而不是一个

Wireshark Capture

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

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

如果将retry参数设置为sr1,则每显式发送一个,我都会收到两个数据包。

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

解决方法

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

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

![ARP requests

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