在OpenWRT路由器环境中,使用arp-scan
工具来扫描局域网内的设备是一个常见的需求。然而,在使用过程中可能会遇到一些警告信息,本文将介绍如何解决这些问题,并提供一个简化脚本来实现这一功能。
问题背景
当你在OpenWRT路由器上运行arp-scan
时,可能会遇到以下警告信息:
WARNING: Cannot open MAC/Vendor file /usr/share/arp-scan/ieee-oui.txt: No such file or directory
WARNING: Cannot open MAC/Vendor file /etc/arp-scan/mac-vendor.txt: No such file or directory
这些警告信息是因为arp-scan
试图读取MAC地址对应的厂商信息文件,但在指定路径下没有找到这些文件。尽管这些警告不会影响扫描的结果,但为了更好的用户体验,我们可以消除这些警告。
解决方案
忽略警告
如果你可以接受没有MAC地址对应的厂商信息,并且这些警告信息不影响你的使用,可以选择忽略它们。arp-scan
已经成功扫描到了局域网内的设备。
安装厂商信息文件
如果你希望arp-scan
能够显示MAC地址对应的厂商信息,可以手动下载这些文件并放置在相应的路径下。
下载并安装厂商信息文件
创建必要的目录
mkdir -p /usr/share/arp-scan mkdir -p /etc/arp-scan
下载IEEE OUI文件
wget -O /usr/share/arp-scan/ieee-oui.txt https://standards-oui.ieee.org/oui/oui.txt
下载简化的厂商映射文件
wget -O /etc/arp-scan/mac-vendor.txt https://raw.githubusercontent.com/vektra/macsvendor/master/macsvendor/db/macvendors.db
修改脚本以忽略警告
如果你不希望看到这些警告信息,可以在脚本中添加对这些警告的忽略。例如,可以通过重定向标准错误输出到/dev/null
来忽略这些警告:
#!/bin/sh
# 获取当前设备的主要网络接口(假设为主网卡)
INTERFACE=$(ip route get 1 | awk '{print $5}')
# 确保使用的是局域网接口
if [[ "$INTERFACE" =~ ^eth ]]; then
INTERFACE="$INTERFACE"
else
INTERFACE="br-lan" # 假设局域网接口为br-lan
fi
# 确认接口有IP地址
IP=$(ip addr show $INTERFACE | awk 'NR==2{print $2}' | cut -f1 -d'/')
if [ -z "$IP" ]; then
echo "Error: The interface $INTERFACE does not have an IP address."
exit 1
fi
# 使用arp-scan扫描局域网内的设备
echo "Scanning for devices on the local network..."
DEVICES=$(arp-scan --interface=$INTERFACE --localnet 2>/dev/null)
# 输出结果
if [ -z "$DEVICES" ]; then
echo "No devices were detected on the network."
else
echo "The following devices are connected to the network:"
echo "$DEVICES"
fi
在这个脚本中,arp-scan
命令的标准错误输出被重定向到了/dev/null
,从而忽略了所有警告信息。
使用说明
- 保存脚本:将上述脚本保存为一个文件,例如
scan_network_devices.sh
。 赋予执行权限:使脚本可执行。
chmod +x scan_network_devices.sh
运行脚本:执行脚本以开始扫描。
./scan_network_devices.sh
结论
无论采用哪种方法,你都可以继续使用arp-scan
来扫描局域网内的设备。希望这篇文章对你有所帮助!
评论 (0)