簡體   English   中英

我可以從已知的 MAC 地址確定當前 IP 嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM