我有一个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,但这可能不那么可靠.
han*_*noo 22
我会简单地使用
ip neighbor | grep "00:1E:C9:56:3C:8E" | cut -d" " -f1
Run Code Online (Sandbox Code Playgroud)
这里介绍的其他方法是不可靠的,例如输出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)
这样做的目的是忽略是否连接在一个或另一个网络中,同时每个设备都可以看到彼此。
归档时间: |
|
查看次数: |
44140 次 |
最近记录: |