[英]Can I determine the current IP from a known MAC Address?
我有一個 shell 腳本,它使用 etherwake 來喚醒本地網絡上的機器。 機器喚醒后,我不確定IP地址。
在試圖回答我自己的問題時,我想出了:
ip=$(ping -c 1 hostname | head -1 | awk '{print $3}' | sed 's/[()]//g')
這個解決方案規定我知道遠程機器的主機名,這並不麻煩。
如果我只知道 MAC 地址,有沒有辦法獲得 IP?
我認為沒有一個命令可以做到這一點。 一個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'
這里nmap將執行ping掃描並填充arp緩存。 掃描完成后,可以使用arp命令打印arp表,然后使用grep / awk拉出IP地址。 您可以嘗試使用廣播ping替換nmap,但這可能不那么可靠。
我會簡單地使用
ip neighbor | grep "00:1E:C9:56:3C:8E" | cut -d" " -f1
這里介紹的其他方法是不可靠的,例如ip neighbor
的輸出並不總是包含最近的狀態,所以我最終使用arp-scan
重新掃描網絡,因此我只是使用掃描的輸出來獲得給定MAC地址的IP地址。
要掃描單個網絡接口,只需使用:
arp-scan -q -l --interface en4 2>/dev/null | grep "00:1E:C9:56:3C:8E" | cut -d$'\t' -f1
以下命令一次掃描多個網絡接口:
{ 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
您可以通過mac地址嘗試arp命令和grep
arp -a | grep "00:00:00:00:00:00"
(替換為您自己的mac地址)
我寫了一個可以執行此操作的python模塊:
>>> from ethip import ethip
>>> print ethip.getip('00:1E:C9:56:3C:8E', '10.5.42.255')
10.5.42.3
我只是發出快速的arp請求來查找ip,然后緩存它找到的內容。 代碼在github上。
我知道是舊的,但在 linux 中最簡單的方法是:
arp -a | grep "00:1E:C9:56:3C:8E"
這樣做的重點是忽略是否連接在一個或另一個網絡中,同時每個設備都可以看到對方。
尼爾的回答確實太長了。 我不得不使用60k + IPs系列。 使這項工作的訣竅是在每次ping之后檢查arp表。 這也解決了根本問題:沒有必要。 我是用Java做的(請參見今天的threadedScan() ),因為我在Windows上需要一個解決方案,在嘗試使用start命令ping時不會產生數千個cmd提示。 它使用fixedThreadPool工作得更快(我的60k范圍約10秒)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.