37

ローカル ネットワーク上のマシンを起動するために etherwake を使用するシェル スクリプトがあります。マシンが起動した後、IP アドレスがわかりません。

私自身の質問に答えようとしているときに、私は思いつきました:

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

このソリューションでは、リモート マシンのホスト名を知っている必要がありますが、それほど面倒ではありません。

MAC アドレスしか知らない場合、IP を取得する方法はありますか?

4

7 に答える 7

43

これを行うための単一のコマンドはないと思います。ハックの 1 つは、サブネットで 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 アドレスを取得できます。nmap をブロードキャスト ping に置き換えてみることもできますが、それはおそらく信頼性に欠けます。

于 2012-11-25T16:44:46.847 に答える
32

私は単に使用します

ip neighbor | grep -i "00:1E:C9:56:3C:8E" | cut -d" " -f1
于 2016-04-01T22:38:44.037 に答える
3

これを行うことができるpythonモジュールを作成しました:

>>> from ethip import ethip
>>> print ethip.getip('00:1E:C9:56:3C:8E', '10.5.42.255')
10.5.42.3

IPを見つけるために迅速なARPリクエストを作成し、見つかったものをキャッシュします。コードは github にあります。

于 2014-07-11T22:53:18.547 に答える