arp-scan - 参考手册、选项、命令示例


姓名

arp-scan - 向目标主机发送 ARP 请求并显示响应

概要

arp-scan [options] [hosts...]

Target hosts must be specified on the command line unless the --file or --localnet option is used.

Targets can be IPv4 addresses or hostnames. You can also use CIDR notation (10.0.0.0/24) (network and broadcast included), ranges (10.0.0.1-10.0.0.10), and network:mask (10.0.0.0:255.255.255.0).

描述

arp-scan 向指定主机发送 ARP 请求数据包并显示收到的任何响应。可以使用--interface选项指定网络接口。如果未指定接口,arp-scan 将选择编号最小的已配置接口(不包括环回)。

arp-scan 使用原始套接字,这需要某些系统上的权限:

Linux with POSIX.1e capabilities support using libcap:

arp-scan 具有功能感知能力。它需要在允许的集中CAP_NET_RAW,并且只为所需的功能启用该功能。使用 setcap cap_net_raw+p /path/to/arp-scan 将 CAP_NET_RAW 添加到 arp-scan 可执行文件的允许集。功能支持还使 SUID root 更加安全,因为 arp-scan 将删除除 CAP_NET_RAW 之外的所有功能,并且不会以完全 root 权限运行。

BSD and macOS:

您需要对 /dev/bpf* 进行读/写访问

Any operating system:

以 root 或 SUID root 身份运行可以在任何操作系统上运行,但如果可能,其他方法更好。

ARP仅作用于本地网络,不能路由。虽然 ARP 协议使用 IPv4 地址,但它不是 IP 协议,arp-scan 可以在没有 IPv4 地址的接口上使用。

为每个目标发送一个 ARP 请求。如果主机没有响应,请求将被重新发送一次。可以使用--retry选项更改重试次数。减少重试次数将减少扫描时间,但存在因数据包丢失而丢失某些结果的风险。

您可以通过--bandwidth选项指定arp-scan将使用的带宽。默认值为每秒 256000 位。增加带宽会减少扫描时间,但设置太高可能会导致广播包速率过高。指定数据包速率的另一种方法是使用 --interval 选项。

单遍扫描(即使用 --retry=1)的时间为:

时间=n 乘以 i + t + o

其中n是主机数量,i是间隔(用--interval给出或根据--bandwidth计算)),t 是超时(用 --timeout 指定),o 是加载目标列表和读取所需的开销时间MAC/供应商映射文件。开销通常可以忽略不计(通常约为 100 毫秒),但可以通过 --quiet 选项进一步减少。对于小型主机列表,超时值将占主导地位,但对于大型列表,数据包间隔是最重要的值。

ARP 请求的任何部分都可以通过使用 --arpXXX 选项进行修改,如下表所示:

桌子

最常见的选项是--arpspa,它在 ARP 请求中设置源 IPv4 地址,允许 ARP 请求使用与接口地址不同的源地址。这允许在没有 IPv4 地址的接口上使用arp-scan。注意:将 ar$spa 设置为目标的 IP 地址会导致某些操作系统在收到对其自身地址的 ARP 请求时报告地址冲突。

您还可以更改以太网帧标头中的值,如下所示:

桌子

设置目标以太网地址的--destaddr选项是唯一常用的选项。

默认情况下,ARP 响应按以下格式显示:

<IPv4 Address> <MAC Address> <Vendor Details>

其中IPv4地址是响应目标的IP地址,MAC地址是其链路层地址,供应商详细信息是从其中解码的供应商详细信息硬件地址。输出字段由单个制表符分隔。您可以使用--format选项更改输出格式。

响应按接收顺序显示,这可能与发送请求的顺序不同,因为某些主机可能比其他主机响应更快。

供应商解码使用文件 ieee-oui.txt 和 mac-vendor.txt。 ieee-oui.txt 由 IEEE MA-L (OUI)、MA-M、MA-S 生成em> (OUI36) 和 IAB 注册表。 mac-vendor.txt 包含其他 MAC 到供应商的映射,可用于添加自定义映射。 get-oui 可用于使用 IEEE 注册表中的最新数据更新 ieee-oui.txt。

所有 IPv4 主机都应响应 ARP 请求数据包,包括具有数据包过滤功能(例如防火墙)的主机。这使得 arp-scan 成为发现本地网络上所有活动 IPv4 主机的有用工具。

选项

如果选项采用一个值,则该值被指定为尖括号中的字母。该字母表示预期的数据类型:

<s>

字符串。

<i>

十进制整数,如果前面有 0x,则为十六进制,例如2048 或 0x800。

<f>

浮点十进制数。

<m>

MAC 地址,例如01:23:45:67:89:ab 或 01-23-45-67-89-ab(不区分大小写)

<a>

IPv4 地址,例如10.0.0.1

<h>

十六进制编码的二进制数据。没有前导 0x。 (不区分大小写)。

<x>

其他 - 请参阅选项说明。

常规选项

--help or -h

显示此使用信息并退出。

--verbose or -v

显示详细的进度消息。可以使用多次以增加详细程度。最大值=3。

--version or -V

显示程序版本并退出。显示版本、许可证详细信息、libpcap 版本以及是否包含 POSIX.1e 功能支持。

--interface=<s> or -I <s>

使用网络接口<s>。如果未指定此选项,arp-scan 将在系统接口列表中搜索编号最小、已配置的接口(不包括环回)。

主机选择

--file=<s> or -f <s>

从指定文件中读取主机名或地址。每行一个名称或地址模式。使用“-”作为标准输入。

--localnet or -l

从接口配置生成地址。从接口地址和网络掩码(包括网络和广播)生成列表。您不能使用--file选项或在命令行上指定目标。使用--interface指定接口。

MAC/供应商映射文件

--ouifile=<s> or -O <s>

使用 IEEE 注册表供应商映射文件<s>。默认为当前目录中的 ieee-oui.txt。如果没有找到,则使用/usr/share/arp-scan/ieee-oui.txt。

--macfile=<s> or -m <s>

使用自定义供应商映射文件<s>。默认为当前目录中的mac-vendor.txt。如果没有找到,则使用/etc/arp-scan/mac-vendor.txt。

输出格式控制

--quiet or -q

显示每个响应主机的最小输出。仅显示 IP 地址和 MAC 地址。由于未使用供应商映射文件,因此内存使用量减少了约 5MB。如果 -,则只有 $ {ip} 和 $ {mac} 字段可用于 --format 选项指定 -quiet。

--plain or -x

抑制页眉和页脚文本。仅显示响应主机的详细信息。如果输出将由脚本解析,则很有用。

--ignoredups or -g

不显示重复的数据包。默认情况下,重复的数据包用 (DUP: n) 标记,其中 n 是该主机响应的次数。

--rtt or -D

计算并显示数据包往返时间。时间以毫秒和小数微秒显示。使$ {rtt}字段可用于--format。

--format=<s> or -F <s>

指定输出格式字符串。格式是将为每个响应主机输出的字符串。可以通过使用语法“$ {field[;width]}”插入对字段的引用来包含主机详细信息。字段显示为右对齐,除非宽度为负,在这种情况下将使用左对齐。可以识别以下不区分大小写的字段名称:

IP Host IPv4 address in dotted quad format
Name Host name if --resolve option given
MAC Host MAC address xx:xx:xx:xx:xx:xx
HdrMAC Ethernet source addr if different
Vendor Vendor details string
Padding Padding after ARP packet in hex if nonzero
Framing Framing type if not Ethernet_II
VLAN 802.1Q VLAN ID if present
Proto ARP protocol if not 0x0800
DUP Packet number for duplicate packets (>1)
RTT Round trip time if --rtt option given

如果指定了 --quiet 选项,则只有 $ {ip} 和 $ {mac} 字段可用。

任何不是字段的字符都会逐字输出。 “\”引入转义:

\n newline
\r carriage return
\t tab
\ suppress special meaning for following character

您应该将 --format 参数括在“单引号”中,以保护 shell 中的特殊字符。

示例:--format='$ {ip}\t$ {mac}\t$ {供应商}'

主机列表随机化

--random or -R

随机化目标主机列表。

--randomseed=<i>

为伪随机数生成器播种。如果您想要可重复的--随机顺序,则很有用。

输出时序和重试

--retry=<i> or -r <i>

将每个主机的总尝试次数设置为<i>,默认=2。

--backoff=<f> or -b <f>

将退避系数设置为 <f>,默认=1.50。每次传递将超时乘以 <f>。

--timeout=<i> or -t <i>

将每个主机的初始超时设置为 <i> 毫秒,默认值=500。此超时适用于发送到每个主机的第一个数据包。随后的超时将乘以用--backoff设置的退避系数。

--interval=<x> or -i <x>

将最小数据包间隔设置为 <x>。这通过限制数据包速率来控制传出带宽的使用。如果您想使用给定的带宽,那么使用 --bandwidth 选项会更容易。间隔以毫秒为单位,如果附加“u”则以微秒为单位。

--bandwidth=<x> or -B <x>

将出站带宽设置为<x>,默认=256000。该值以每秒位数为单位。附加 K 表示千位,附加 M 表示兆位(十进制倍数)。您不能同时指定--interval 和--bandwidth。

DNS解析

--numeric or -N

目标必须是 IP 地址,而不是主机名。可以减少大型目标列表的启动时间。

--resolve or -d

将响应地址解析为主机名。默认输出格式将显示主机名而不是 IPv4 地址。此选项使$ {name}字段可用于--format选项。

输出ARP数据包

--arpsha=<m> or -u <m>

设置ARP源以太网地址。设置 48 位 ar$sha 字段,但不更改帧头中的硬件地址,请参阅 --srcaddr 了解如何更改该地址。默认为出接口的以太网地址。

--arptha=<m> or -w <m>

设置ARP目标以太网地址。设置 48 位 ar$tha 字段。默认值为零,因为该字段不用于 ARP 请求数据包。

--arphrd=<i> or -H <i>

设置 ARP 硬件类型,默认=1。设置 16 位 ar$hrd 字段。默认值为 1 (ARPHRD_ETHER)。许多操作系统也响应6 (ARPHRD_IEEE802)。

--arppro=<i> or -p <i>

设置ARP协议类型,默认=0x0800。设置 16 位 ar$pro 字段。大多数操作系统仅响应0x0800 (IPv4)。

--arphln=<i> or -a <i>

设置硬件地址长度,默认=6。设置 8 位 ar$hln 字段。此选项不会更改 ar$sha 和 ar$tha 字段的长度;它仅更改 ar$hln 字段。

--arppln=<i> or -P <i>

设置协议地址长度,默认=4。设置 8 位 ar$pln 字段。此选项不会更改 ar$spa 和 ar$tpa 字段的长度;它仅更改 ar$pln 字段。

--arpop=<i> or -o <i>

指定 ARP 操作,默认=1。设置 16 位 ar$op 字段。大多数操作系统仅响应值 1 (ARPOP_REQUEST)。

--arpspa=<a> or -s <a>

设置源 IPv4 地址。地址应采用点分四元格式,或字符串“dest”,它将源地址设置为目标主机地址。默认为出接口地址。设置 32 位 ar$spa 字段。某些操作系统仅当源地址位于接收接口的网络内时才响应。将 ar$spa 设置为目标 IP 地址可能会导致某些操作系统报告地址冲突。

输出以太网接头

--srcaddr=<m> or -S <m>

设置源以太网MAC地址。默认为接口 MAC 地址。这将设置以太网标头中的地址。它不会更改 ARP 数据包中的地址:使用 --arpsha 更改该地址。

--destaddr=<m> or -T <m>

设置目的MAC地址。设置以太网标头中的目标地址。默认值为ff:ff:ff:ff:ff:ff(广播)如果请求发送到主机的单播地址或多播地址,主机也会做出响应。

--prototype=<i> or -y <i>

设置以太网协议类型,默认=0x0806。这设置以太网标头中的协议类型字段。

--llc or -L

对 802.2 网络使用 RFC 1042 LLC/SNAP 封装。无论此选项如何,arp-scan 都会解码并显示以太网 II 和 IEEE 802.2 格式的 ARP 响应。

--vlan=<i> or -Q <i>

使用带有 VLAN ID 的 802.1Q 标记<i>。 id 应在 0 到 4095 范围内。无论此选项如何,arp-scan 都将以 802.1Q 格式解码并显示 ARP 响应。

其他选项

--limit=<i> or -M <i>

指定数量的主机响应后退出。如果响应主机的数量小于限制,arp-scan 将以状态 1 退出。可在脚本中使用来检查响应的主机是否较少,而无需解析输出。

--pcapsavefile=<s> or -W <s>

将收到的数据包写入 pcap 保存文件<s>。 ARP 响应将被写入指定的文件并被解码和显示。

--snap=<i> or -n <i>

将 pcap 捕捉长度设置为 <i>。默认值=64。指定帧捕获长度,包括以太网标头。默认值通常就足够了。

--retry-send=<i> or -Y <i>

设置发送尝试次数,默认=20。

--retry-send-interval=<i> or -E <i>

设置发送尝试之间的间隔。如果附加“u”,则间隔以毫秒或微秒为单位。默认=5。

--padding=<h> or -A <h>

指定数据包数据后的填充。将 ARP 请求后的填充设置为十六进制值 。

退出状态

如果成功完成,arp-scan 将退出并返回 0;如果遇到错误,则返回 >0。

如果指定了--limit选项,并且响应主机的数量小于指定的限制,arp-scan也会以非零退出代码退出。

文件

/usr/share/arp-scan/ieee-oui.txt

IEEE OUI(组织唯一标识符)到供应商映射的列表。

/etc/arp-scan/mac-vendor.txt

其他以太网 MAC 到供应商映射的列表,包括本地添加。

例子

简单扫描

使用接口 IPv4 配置扫描默认网络以生成要扫描的主机列表。

$ arp-scan --localnet
Interface: eth0, type: EN10MB, MAC: 50:65:f3:f0:6d:7c, IPv4: 10.0.0.106
Starting arp-scan 1.9.9 with 256 hosts (https://github.com/royhills/arp-scan)
10.0.0.14       a4:1f:72:7f:25:bb       Dell Inc.
10.0.0.22       10:60:4b:73:43:de       Hewlett Packard
10.0.0.74       00:0c:29:90:07:e9       VMware, Inc.
10.0.0.75       00:0c:29:66:9e:c2       VMware, Inc.
10.0.0.76       00:0c:29:d0:e1:ea       VMware, Inc.
10.0.0.82       9c:b6:54:bb:f3:ec       Hewlett Packard
10.0.0.84       00:21:9b:fd:b9:b3       Dell Inc.
10.0.0.85       00:02:b3:eb:5a:f8       Intel Corporation
10.0.0.91       00:9c:02:a5:7b:29       Hewlett Packard
10.0.0.92       d4:ae:52:d0:07:6f       Dell Inc.
10.0.0.93       d4:ae:52:d0:04:9b       Dell Inc.
10.0.0.96       9c:b6:54:bb:f5:35       Hewlett Packard
10.0.0.97       00:0c:29:0e:95:20       VMware, Inc.
10.0.0.104      50:65:f3:f0:70:a4       Hewlett Packard

15 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.9: 256 hosts scanned in 1.532 seconds (167.10 hosts/sec). 14 responded

输出格式

使用接口 eth0 扫描 10.0.0.0/24 中的所有主机。计算往返时间并使用自定义格式显示在对齐的列中。

$ arp-scan -I eth0 --rtt --format='|${ip;-15}|${mac}|${rtt;8}|' 10.0.0.0/24
Interface: eth0, type: EN10MB, MAC: 50:65:f3:f0:6d:7c, IPv4: 10.0.0.106
Starting arp-scan 1.9.9 with 256 hosts (https://github.com/royhills/arp-scan)
|10.0.0.14      |a4:1f:72:7f:25:bb|   0.280|
|10.0.0.22      |10:60:4b:73:43:de|   0.293|
|10.0.0.74      |00:0c:29:90:07:e9|   0.380|
|10.0.0.75      |00:0c:29:66:9e:c2|   0.311|
|10.0.0.76      |00:0c:29:d0:e1:ea|   0.326|
|10.0.0.82      |9c:b6:54:bb:f3:ec|   0.216|
|10.0.0.84      |00:21:9b:fd:b9:b3|   0.244|
|10.0.0.85      |00:02:b3:eb:5a:f8|   0.244|
|10.0.0.91      |00:9c:02:a5:7b:29|   0.209|
|10.0.0.92      |d4:ae:52:d0:07:6f|   0.289|
|10.0.0.93      |d4:ae:52:d0:04:9b|   0.278|
|10.0.0.96      |9c:b6:54:bb:f5:35|   0.255|
|10.0.0.97      |00:0c:29:0e:95:20|   0.288|
|10.0.0.104     |50:65:f3:f0:70:a4|   0.263|

14 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.9: 256 hosts scanned in 2.032 seconds (125.98 hosts/sec). 14 responded

CSV 输出

--plain 删除无关的输出。

$ arp-scan -I eth0 --plain --format='${ip},${mac},"${vendor}"' 10.0.0.0/24
10.0.0.14,a4:1f:72:7f:25:bb,"Dell Inc."
10.0.0.22,10:60:4b:73:43:de,"Hewlett Packard"
10.0.0.74,00:0c:29:90:07:e9,"VMware, Inc."
10.0.0.75,00:0c:29:66:9e:c2,"VMware, Inc."
10.0.0.76,00:0c:29:d0:e1:ea,"VMware, Inc."
10.0.0.82,9c:b6:54:bb:f3:ec,"Hewlett Packard"
10.0.0.84,00:21:9b:fd:b9:b3,"Dell Inc."
10.0.0.85,00:02:b3:eb:5a:f8,"Intel Corporation"
10.0.0.91,00:9c:02:a5:7b:29,"Hewlett Packard"
10.0.0.92,d4:ae:52:d0:07:6f,"Dell Inc."
10.0.0.93,d4:ae:52:d0:04:9b,"Dell Inc."
10.0.0.96,9c:b6:54:bb:f5:35,"Hewlett Packard"
10.0.0.97,00:0c:29:0e:95:20,"VMware, Inc."
10.0.0.104,50:65:f3:f0:70:a4,"Hewlett Packard"

也可以看看

get-oui(1)

arp-fingerprint(1)

http://www.royhills.co.uk/wiki/ The arp-scan wiki page.

https://github.com/royhills/arp-scan The arp-scan homepage.