我如何检测(如果可能的话使用 bash)特定(即名称或 mac 地址)的机器是否出现在本地网络中?IP 地址是动态分配的,所以我不能依赖“传统” ping。
答案1
如果你知道 MAC 地址,那么你可以使用以下命令 ping 它arping
答案2
最简单的解决方案是检查 DHCP 服务器的日志(如果您可以访问的话)。
否则,你能使用传统的 ping 命令广播 ping 本地 LAN,并查看系统的本地 ARP 表以查看目标主机是否已回复。这不需要知道目标的 IP 地址,只需要知道其 MAC 地址。示例:
ping=`which ping`
iface=eth0 # MAYBE CHANGE THIS
bcast=`ip a ls $iface | awk '/inet? /{ print $4 ; exit }'`
cmd="$ping -bnrc1 $bcast"
target_mac='00:11:22:33:44:55' # DEFINITELY CHANGE THIS
if [[ -u $ping ]] ; then $cmd ; else sudo $cmd ; fi
grep $target_mac /proc/net/arp
这与“arping”类似,因为它应该触发 ARP 回复,只是噪音更大。因此,添加“-r”将其限制在本地 LAN,使用定向广播地址(awk 代码片段会抓取它,但您可能需要调整“iface”)而不是“255.255.255.255”,并使用“-c1”仅发送一个 ICMP 回显请求。使用“-n”关闭反向 DNS 解析。
如果是 setuid root 或您具有 root 权限,则 'ping' 只会遵守 '-b' 广播选项,因此我将其包装在 if/else 中以捕获该选项。
答案3
您需要主动监控流量才能做到这一点。查看 arpalert 或 arpwatch。arping 也是一种选择,但在这种情况下它不起作用,因为它需要目标 ip 地址。