尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ARP扫描工具arp-scan 1.9的编译安装与排障实践

发布时间:2026/9/26 4:43:20

资讯中心
01
ARTICLE

ARP扫描工具arp-scan 1.9的编译安装与排障实践

ARP扫描工具arp-scan 1.9的编译安装与排障实践
简介这是一款供 Linux 系统管理员、网络运维人员排查 IP 地址冲突的 arp-scan 1.9 源码包通过主动发送 ARP 请求并解析应答快速定位冲突 IP 对应的 MAC 地址也适用于设备发现、地址盗用审计与局域网合规检查。整套源码包共 57 个文件、约 360KB主体为 C 源码与头文件并配套 pcap 抓包样本、dat 请求数据和多个 check-* 自检脚本可覆盖普通、VLAN、LLC、填充等多种报文测试场景。同时包内还包含 README、ChangeLog、AUTHORS、COPYING 等标准文档、OUI/IAB 厂商数据库获取脚本及 man 手册页读者可借由主程序、参数解析、哈希表、随机数等具体模块的源码了解 ARP 工具的整体工程组织方式。借助这些材料既能对照抓包样本理解协议细节也可裁剪复用代码用于自身的网络管理工具中。目前已有 1400 人学习下载适合具备一定 Linux 基础、希望深入掌握 ARP 协议并自行构建 IP 冲突监控工具的中高级用户。1. arp-scan-1.9.tar.gz网段里多了一台“不该出现”的设备它比 ping 先发现组里半夜报障某网段设备一卡一卡ping 网关正常、丢包也不明显但就是有几个终端频繁掉线。我先不碰抓包拿 arp-scan 把网段扫一遍结果发现同一台 IP 背后回了两个不同的 MAC——有人把自带的打印机、开发板、临时测试机插进了同一网段IP 还撞了。这种“二层先于三层出问题”的场景正是 arp-scan 最擅长的不依赖 ICMP、不碰端口、不看系统 ARP 表直接在以太网层广播 ARP 请求把所有愿意回包的主机全部叫出来。arp-scan-1.9.tar.gz 就是这份工具的 1.9 版本源码包编译安装后几分钟就能投入排查。它适合网络运维、设备调试、资产盘点的人也适合那些被 IP 冲突和私接设备折腾过、想要一个轻量二层发现工具的人。1.9 这个版本在保留“快、准、输出干净”的同时加入了更灵活的格式化输出能力至今仍是我在新装 Linux 机器上第一批编译的工具之一。2. 从源码包到可用命令arp-scan-1.9.tar.gz 的编译安装全流程源码包的好处是版本可控、依赖透明、编译参数可调。坏处是如果少了开发头文件configure 会翻车如果 make install 没执行完整后面用起来会发现厂商列全空。这一章把从解压到能跑的最小路径走一遍每一步都说明在做什么。2.1 解压之前确认手里是 1.9 而不是改了名的别的包网上下载的 tar.gz 名不一定是内容名有的站点会在打包时加日期、补丁号或者改目录名。我先不解压直接列包内容看顶层目录tar ztf arp-scan-1.9.tar.gz | head -20 tar zxf arp-scan-1.9.tar.gz cd arp-scan-1.9ztf是 list 模式不实际解压只把包内的文件清单列出来。第一行通常会看到arp-scan-1.9/这个顶层目录说明包结构正常。如果顶层目录名和包名对不上解压后要 cd 到实际目录否则下一步会找不到 configure 脚本。进到目录后再确认一次版本号我用 configure.ac 里的 AC_INIT 判断grep -m1 AC_INIT configure.ac正常会输出类似AC_INIT([arp-scan], [1.9], ...)的一行。这一步不是形式主义——如果你的发行版打了补丁版本号后面会多出-p1、deb之类的后缀行为可能和原版有细微差别。做排障工具我建议用干净的官方 1.9 源码不要用带大量发行版补丁的版本省得后面排查问题时行为对不上。2.2 configurelibpcap 开发包没装这一步必报错arp-scan 的核心工作方式是“自己构造以太网帧并发送、再捕获响应”这套动作在 Linux 上依赖 libpcap。光有运行库还不够configure 需要的是头文件和链接库也就是 libpcap 的 dev 包。在 Debian/Ubuntu 上最常见的报错长这样checking for pcap_lookupdev... no configure: error: libpcap not found. Please install libpcap first.对1.9 的 configure 会直接卡在 libpcap 上。解决方式很简单装开发包sudo apt-get install -y libpcap-dev build-essential # RHEL/CentOS 系用sudo yum install -y libpcap-devel gcc make装完重新执行./configure看到结尾输出configure: exit 0就是通过了。这里要说明build-essential 提供 gcc/makelibpcap-dev 提供 pcap.h 和链接库。如果你的 libpcap 是从源码编到非标准路径的可以给 configure 传--with-libpcap/path/to/libpcap但绝大多数机器不需要。configure 这一步还会检查 C 编译器、系统头文件、socket 相关接口任何一个不满足都会提前中止。我遇过一次在超精简容器里缺 gcc报错是“C compiler cannot create executables”这种和 arp-scan 本身无关把 build-essential 装上重来即可。2.3 make 与 make install数据文件装到哪里很关键configure 通过后就是常规三步make sudo make install sudo ldconfigmake 会把源码编译成arp-scan可执行文件。源码文件不多1.9 的编译在普通机器上基本是秒过如果看到一大片 warning只要最后没有 error一般不影响使用。make install默认把二进制装到/usr/local/bin/arp-scan同时把厂商数据库文件装到/usr/local/share/arp-scan/目录下这个数据文件直接决定后面输出里的“厂商”列能不能显示。安装完成后验证arp-scan --version sudo ldconfig如果 shell 提示找不到命令先看/usr/local/bin在不在 PATH 里。然后检查数据文件到底装到哪了ls -l /usr/local/share/arp-scan/正常情况下能看到ieee-oui.txt或类似命名的厂商库文件。这个路径很重要第 4 章里“厂商列全空”的坑就和它有关。顺手做一个冒烟测试sudo arp-scan --interfaceeth0 --retry1 --timeout300 192.168.1.0/24 | head -10能扫出至少自己这台机器的 IP/MAC就算编译安装闭环了。从这一步开始后面所有参数调优才有意义。3. 参数与输出把 arp-scan 1.9 调到“又快又全”编译通过只是开始。arp-scan 的默认参数偏向保守直接跑能出结果但往往不是最优的。这一章从选网卡、调速率到看输出把常用参数串成一套完整的用法。3.1 选网卡--interface 和 --localnet 配合别让 docker0 截胡多网卡机器上最容易翻车的点就是 arp-scan 自动选了错误的接口。它的默认逻辑是选第一个非 loopback 接口在装了 Docker、KVM、Open vSwitch 的机器上这个“第一”很可能不是你的物理网卡而是 docker0 或 virbr0。扫错接口的直接后果是所有请求都发到了虚拟桥上物理网段一台主机都看不见输出像闹鬼一样全是空的。先看接口列表再动手ip -br link拿到物理网卡名后最稳的用法是显式指定接口再让工具根据该接口的 IP 和掩码自动推导网段sudo arp-scan --interfaceeth0 --localnet--localnet省去了手动写网段的麻烦它会读 eth0 的 IPv4 地址和掩码自动算出对应的子网。在接口 IP 是192.168.1.10/24时等价于扫192.168.1.0/24。这个参数适合“这台机器就在目标网段里”的场景。如果你要扫的不是本机所在网段就得显式给网段同时要保证本机有到那个网段的路由并且目标网段能回应 ARP。跨三层扫是不行的——ARP 只在二层广播域里工作。所以我会把--localnet当作默认姿势只有资产盘点、扫旁路网段时才手动写 CIDR。3.2 重试、超时与带宽扫描速度和命中率的平衡三条核心参数决定一次扫描的“快”和“全”重试次数--retry、单目标超时--timeout、发送带宽--bandwidth。先给一个适合有线局域网的经验模板sudo arp-scan --interfaceeth0 --retry2 --timeout500 --bandwidth1000000 --localnet这条命令的意图对每个目标最多发 2 轮请求每轮等待 500ms 收响应带宽控制在 1Mbps。默认值里--retry2、--timeout500算是合理的真正拖慢扫描的是带宽。arp-scan 1.9 默认带宽被压到 256000 bps这是为了照顾老交换机和老式无线 AP但代价是扫一个 /24 网段要一两分钟起步无线场景更慢。把带宽调到 1000000 也就是 1Mbps速度会明显改观同时不至于把交换机的 CPU 打满。调参的优先级我一般是先调--bandwidth再考虑降--retry。无线网段和 IoT 设备多的场景建议保留 retry2因为低功耗设备第一次广播请求时可能还在休眠重试一轮能捞回来。如果只是快速摸底、不追求 100% 覆盖可以降到 retry1。还有两个参数值得一提。--random会打乱主机探测顺序避免按 IP 顺序扫描时被网络设备误判为“规律性探测”在共享网络里更低调一些。--file能从一个文本文件里读目标列表每行一个 IP 或网段适合只关心特定地址段的场景sudo arp-scan --interfaceeth0 --filetargets.txt这个文件格式和命令行参数基本一致可以混写单 IP 和 CIDR非常灵活。3.3 看懂输出IP、MAC、厂商和 DUP 的真实含义一次典型的扫描输出长这样192.168.1.1 a4:2b:b0:xx:xx:xx TP-Link Technologies Co., Ltd. 192.168.1.25 dc:a6:32:xx:xx:xx Raspberry Pi Trading Ltd 192.168.1.87 (unknown) 192.168.1.1 d8:47:32:xx:xx:xx (unknown)每行三列IP 地址、MAC 地址、厂商名。厂商名来自前面说的 ieee-oui.txt按 MAC 前缀匹配。(unknown)有两种可能这个 MAC 前缀不在库里或者数据文件路径没找对。后者是第 4 章的坑先说结论厂商列大面积 unknown优先怀疑数据文件。上面示例里192.168.1.1出现了两次、MAC 不同这是 DUP 的典型表现。arp-scan 在同一个 IP 收到不同 MAC 的响应时会额外标注这正是排查 IP 冲突最经典的手段——系统提示“IP 地址冲突”时arp-scan 能直接告诉你冲突双方是谁。这个工具不读系统/proc/net/arp而是自己构造 ARP 请求把它填充为全 F 的目的 MAC 广播出去再用 pcap 抓响应。这意味着它看到的是“此刻网络上真实回包的主机”而不是系统缓存的邻居表。所以扫描结果和ip neigh不一致时不用惊讶一个是缓存快照一个是实时探测。1.9 版本还加入了自定义输出格式能力可以把输出从“给人看的三列”改成“给脚本处理的纯列表”这在做自动化巡检时很有用。具体 token 名在不同小版本间有差异用之前先跑arp-scan --help | grep -A 10 format看本机支持的字段列表省得踩格式坑。4. 避坑arp-scan 1.9 用不好八成栽在这五件事上按血泪经验排列这五条是 arp-scan 用户问得最多、也最容易让人误以为“工具坏了”的问题。每条都按现象、原因、解决的顺序写照着排查即可。4.1 非 root 跑直接 Permission denied或者什么都扫不到现象普通用户执行arp-scan --localnet报Couldnt open device: Operation not permitted或者不报错但输出只有本机。原因arp-scan 需要构造原始以太网帧这要求 RAW socket 权限。普通用户没有这个权限抓包和发包都在底层失败了工具却不一定每次都把错误吐到终端上。解决最简单的办法是用 sudo 执行。如果不想每次敲 sudo可以给二进制单独加 capabilitysudo setcap cap_net_rawep /usr/local/bin/arp-scan加了之后再以普通用户跑就不会报权限错。注意setcap 作用在二进制文件上之后重装 arp-scan、升级版本、甚至make install覆盖了同一个文件capability 都会丢失需要重新设置。在脚本里调用时我是直接写 sudo省得哪天升级后忘记补 setcap 导致巡检任务半夜静默失败。4.2 无线环境AP 开了客户端隔离扫出来只剩自己和网关现象同一台 AP 下明明连着好几台设备arp-scan 扫来扫去只有自己这台机器和网关的 MAC其他终端一个都看不到。原因办公网和访客网络里“客户端隔离”是一个很常见的策略。AP 会在二层把不同客户端之间的广播和单播直接丢掉只允许客户端和网关通信。ARP 请求是广播帧同样被隔离策略拦掉了其他客户端根本收不到自然也就不可能回应。解决如果网络是自己在管去 AC 或 AP 的管理面查“无线客户端隔离”或“AP 隔离”关掉再扫。如果隔离是公司安全策略强制开的建议不要为了扫描去关而是改用有线接口摸底或者接受“无线网段只能扫到少数设备”这个现实改用三层方式做资产发现。这个问题在 arp-scan 的任何版本里都一样是无线网络本身的行为不是 1.9 的 bug。4.3 扫描慢到怀疑人生默认带宽 256kbps不是机器卡现象扫一个 /24 网段干等了快两分钟还没出完无线网段更夸张感觉像卡死。原因前面说过arp-scan 1.9 默认发送带宽只有 256000 bps。这个数值是为了兼容十年前的设备和无线环境设计的对现在的千兆交换机来说过于保守。工具本身是单线程按顺序发包带宽限制直接决定了整体耗时。解决扫描前先按环境把带宽调上去。有线环境我一般从 1Mbps 起步最大到 5Mbpssudo arp-scan --interfaceeth0 --bandwidth2000000 --return1 --localnet注意--return这句是我随手写的arp-scan 没有这个参数正确的重试参数是--retry。把带宽调高后一个 /24 网段的扫描时间能快好几倍。但别贪心带宽超过 5Mbps 以后部分老旧交换机和低端 AP 的 CPU 会被大量广播帧打满出现短暂的管理面无响应。我的习惯是先从 1Mbps 开始扫完看结果质量再决定要不要加。4.4 厂商列全空或全是 (unknown)数据文件路径没找对现象每一行的 IP、MAC 都正常但第三列要么空着要么整片都是 (unknown)。原因MAC 厂商匹配需要 ieee-oui.txt 这类数据文件。arp-scan 运行时按编译时配置的路径去找这个文件如果make install没执行、数据文件被挪走、或者你从源码目录直接跑二进制它就找不到厂商列就废了。解决先看文件是否存在于预期路径再手动指定find /usr -name ieee-oui.txt 2/dev/null sudo arp-scan --ouifile/usr/local/share/arp-scan/ieee-oui.txt --interfaceeth0 --localnet如果 find 有结果就把路径传给--ouifile参数如果连文件都没有说明make install没跑完整回第 2 章重新安装。这里还有一个玄学点有些发行版打包的 arp-scan 数据文件路径和源码包默认路径不一样直接跑官方 .deb 或 .rpm 也会遇到这个问题用 find 找一下现行路径是最快的解法。4.5 虚拟机 NAT 和容器里跑扫不到物理网络是网络隔离不是工具坏现象VMware/VirtualBox 里的 Linux 跑 arp-scan只能扫到虚拟网段内的网关和自己Docker 容器里跑宿主机都看不到。原因VMware 的 NAT 模式本身就在二层做了隔离虚拟机网卡和物理局域网根本不是同一个广播域ARP 广播到不了物理交换网络。容器默认更是只有一张 veth 虚拟网卡且没有 raw socket 权限arp-scan 连发包这步都可能失败。解决虚拟机改桥接模式让虚拟网卡直接挂在物理二层网络上。容器里跑的话要么加权限docker run --rm --networkhost --cap-addNET_RAW arp-scan-slim:1.9 --interfaceeth0 --localnet要么干脆放弃在容器里跑这个工具直接在宿主机上用。我的建议是后者——arp-scan 本来就是排查工具给它套一层容器隔离反而给自己制造障碍。做网络排障时工具应该尽量贴近物理网络少一层隔离就少一类玄学问题。5. 进阶把 arp-scan 1.9 收进巡检脚本做 MAC 基线告警单条命令适合临时排查长期维护的网段值得做一份“谁在网里”的基线。把 arp-scan 1.9 包一层脚本能自动完成选接口、扫全段、留日志这三件最基础的事。5.1 一段能直接用的巡检脚本我用默认路由所在的接口作为目标接口这样在多网卡机器上也不会扫错。脚本如下#!/usr/bin/env bash # 自动挑接口扫描本地网段输出到带日期的日志文件 IFACE$(ip route show default | awk {print $5; exit}) [ -z $IFACE ] IFACE$(ip -br link | awk NR2{print $1}) SUBNET$(ip -4 -o addr show dev $IFACE | awk {print $4}) OUTarp-scan-$(date %F).log sudo arp-scan --interface$IFACE --retry2 --timeout400 $SUBNET | tee $OUT第一行用ip route show default取默认路由接口这是最可靠的方式如果机器没有默认路由再回退到第一个非 loopback 接口。SUBNET直接用接口上的 IPv4 地址和前缀等价于--localnet的效果但写在一个变量里方便后面复用。tee同时把结果打到屏幕和文件方便巡检时留档。5.2 验证扫描结果可信度脚本跑完我会做两个交叉验证。第一拿一台已知 MAC 的设备比如手机开热点放进网段看脚本结果里能不能稳定出现第二和ip neigh对比如果 arp-scan 扫到的 MAC 和系统 ARP 表不一致说明网段里有 IP 冲突或最近发生过设备替换。两次连续扫描的结果差异就是网段变化的直接证据。把这个对比做成第二个脚本就能在设备私接、IP 被抢的时候第一时间发现。5.3 保留一个习惯我现在接到新环境的第一个习惯仍然是先编译一份 arp-scan再跑全量二层盘点。这个从 1.9 源码包里长出来的工具比很多商业软件更能直接回答“网里到底有什么”。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。