有没有一种简单的方法可以通过 LAN 上的 MAC 地址进行主机查找?

有没有一种简单的方法可以通过 LAN 上的 MAC 地址进行主机查找?

有没有一种简单的方法(在 Linux 上)可以通过 MAC 地址实现主机查找?在小型本地网络中,它很容易用来arp-scan查找某些设备的 IP 地址。

我通常使用zeroconf/avahi或通过主机名提供 DNS 的路由器,但有时我不能依赖这样的功能。

那么,是否可以通过一些 bash 魔法或小工具让系统解析编码此 MAC 地址的主机名,例如a3_af_32_44_68_c9.local在小型网络中获得更可靠的主机查找?

答案1

尝试使用arp命令如下:

arp -n | grep [set MAC address here] | awk '{print $1}'

或者像这样使用示例 MAC 地址:

arp -n | grep a3.af.32.44.68.c9 | awk '{print $1}'
  • arp -n列出所有设备arp所知道的数字地址,但不包含主机名或其他任何内容。
  • grep仅仅用于grep过滤与您要查找的 MAC 地址相对应的项目。
  • 将仅返回其前面的/组合awk '{print $1}'所返回值的 IP 地址。grepawk

最终结果是,如果 MAC 地址匹配,您将获得连接到该 MAC 地址的 IP 地址。

答案2

我认为您遇到了 isc-dhcp 服务器的一个严重错误功能。该程序会记录它所见过的每个设备的以太网地址以及它分配给它的 IP 地址。但它从不使用此信息来让同一设备保持稳定的 IP 地址。相反,它会假设可用的 IP 地址不足,并优先重用地址。

我发现解决这个问题的唯一方法是让 DHCP 服务器始终为你拥有的每台设备分配一个特定的 IP 地址。这样,你就可以两全其美了……所有设备都通过 dhcp 分配一个 IP,但该 IP 永远不会改变。


另一方面,如果您确实想要分配给特定 MAC 地址的 IP 地址,那么在没有外部帮助的情况下,您能做的最好的事情就是扫描子网。如果您尝试 ping 每个(本地)IP 地址,您的 arp 表arp -a将包含所有 MAC 地址及其分配的 IP。甚至有一个特殊的命令可以做到这一点,arp-scan --localnet它会忘记执行 PING。注意:即使他们忽略 PING 数据包,这也能起作用,因为他们无法忽略首先发出的 ARP 请求。

借助外部帮助,您可以在 DHCP 服务器上进行查找此 DHCP 客户端例如,让您查询任何想要的 MAC 地址。当然,作为副作用,它也会分配它。


这是使用 arp-scan 的示例。

set -e
grep -v 'mac.local #DYN' /etc/hosts > /etc/hosts.new

arp-scan --localnet -qg |
    grep ':..:..:..:..:' |
    sed -e 's/:/_/g' -e 's/$/.mac.local #DYN/' >> /etc/hosts.new

[ -s /etc/hosts.new ] && {
    cmp -s /etc/hosts.new /etc/hosts ||
    mv /etc/hosts.new /etc/hosts
}

显然,这仅适用于同一子网上的机器。如果更换了以太网卡或将机器克隆到新硬件,名称将会更改。可以使用命令手动更改 MAC 地址,ifconfig以执行 DSL 调制解调器或接口绑定或类似操作可能需要的“MAC 克隆”等任务。

相关内容