我可以从已知的MAC地址确定当前的IP吗?

ddo*_*xey 28 linux networking

我有一个shell脚本,它使用etherwake来唤醒我本地网络上的一台机器.机器醒来后,我不确定IP地址.

在试图回答我自己的问题时,我提出了:

ip=$(ping -c 1 hostname | head -1 | awk '{print $3}' | sed 's/[()]//g')
Run Code Online (Sandbox Code Playgroud)

这个解决方案规定我知道远程机器的主机名,这不是那么繁重.

如果我所知道的是MAC地址,有没有办法获得IP?

Nea*_*eal 33

我认为没有一个命令可以做到这一点.一个hack是在子网上进行ping扫描或广播ping,然后在arp表中查询MAC地址的IP地址.显然不是一个理想的解决方案.例:

nmap -sP 192.168.1.0/24 >/dev/null && arp -an | grep <mac address here> | awk '{print $2}' | sed 's/[()]//g'
Run Code Online (Sandbox Code Playgroud)

这里nmap将执行ping扫描并填充arp缓存.扫描完成后,可以使用arp命令打印arp表,然后使用grep/awk拉出IP地址.您可以尝试使用广播ping替换nmap,但这可能不那么可靠.

  • @ThomasDevoogdt,有时(取决于您的网络流量),ARP缓存填充不足,并且不包含您要搜索的MAC地址。 (3认同)
  • 当你有一个非常大的网络,例如/ 16子网这需要太长时间:( (2认同)

han*_*noo 22

我会简单地使用

ip neighbor | grep "00:1E:C9:56:3C:8E" | cut -d" " -f1
Run Code Online (Sandbox Code Playgroud)

  • 我认为它只是检查ARP缓存。 (2认同)

Len*_*oyt 8

这里介绍的其他方法是不可靠的,例如输出ip neighbor并不总是包含最新状态,所以我最终使用重新扫描网络arp-scan,因此我只是使用扫描输出来获取给定的IP地址MAC地址.

要扫描单个网络接口,只需使用:

arp-scan -q -l --interface en4 2>/dev/null | grep "00:1E:C9:56:3C:8E" | cut -d$'\t' -f1
Run Code Online (Sandbox Code Playgroud)

以下命令一次扫描多个网络接口:

{ arp-scan -q -l --interface en0 2>/dev/null & arp-scan -q -l --interface en4 2>/dev/null } | grep "00:1E:C9:56:3C:8E" | cut -d$'\t' -f1
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以尝试通过Mac地址执行arp命令和grep

arp -a | grep "00:00:00:00:00:00"
Run Code Online (Sandbox Code Playgroud)

(替换为您自己的mac地址)


小智 5

我知道很旧,但 Linux 中最简单的方法是:

arp -a | grep "00:1E:C9:56:3C:8E"
Run Code Online (Sandbox Code Playgroud)

这样做的目的是忽略是否连接在一个或另一个网络中,同时每个设备都可以看到彼此。