web-dev-qa-db-ja.com

LAN上のMACアドレスでホストルックアップを行う簡単な方法はありますか?

MACアドレスによるホストルックアップを実装する簡単な方法(Linux上)はありますか?小規模なローカルネットワークでは、たとえばarp-scanを使用してデバイスのIPアドレスを見つけるのは簡単です。

私は通常、zeroconf/avahiまたはホスト名でDNSを提供するルーターを使用しますが、そのような機能に頼ることができない場合があります。

それで、いくつかのbashマジックまたは小さなツールによって、このMACアドレスをエンコードするホスト名をシステムに解決させて(たとえばa3_af_32_44_68_c9.local)、小さなネットワークでより信頼性の高いホストルックアップを取得することは可能ですか?

2
dronus

Isc-dhcpサーバーの重大な誤機能であると私が信じていることに遭遇していると思います。このプログラムは、これまでに見たすべてのデバイスのイーサネットアドレスと、それに割り当てられたIPアドレスを記録します。ただし、この情報を使用して同じデバイスを安定したIPアドレスに保持することはありません。代わりに、使用可能なIPアドレスが十分ではないと想定し、アドレスを優先的に再利用します。

これを回避するために私が見つけた唯一の方法は、DHCPサーバーが常に特定のIPアドレスをすべてのデバイスに割り当てるようにすることです。そうすれば、両方の長所があります...すべてにdhcpを使用してIPが割り当てられますが、そのIPは変更されません。


OTOH、本当に特定のMACアドレスに割り当てられたIPアドレスが必要な場合は、外部の支援なしで行う最善の方法は、サブネットをスキャンすることです。すべての(ローカル)IPアドレスにpingを実行しようとすると、arpテーブルarp -aにはすべてのMACアドレスとそれに割り当てられたIPが含まれます。このarp-scan --localnetには、PINGを実行するのを忘れる特別なコマンドもあります。注:これは、最初に送信されるARP要求を無視できないため、PINGパケットを無視しても機能します。

外部の助けを借りて、DHCPサーバーでルックアップを行うことができます このDHCPクライアント たとえば、必要なMACを照会できます。もちろん、副作用としても割り当てます。


これはarp-scanを使用した例です。

set -e
grep -v 'mac.local #DYN' /etc/hosts > /etc/hosts.new

arp-scan --localnet -qg |
    grep ':..:..:..:..:' |
    sed -e 's/:/_/g' -e 's/$/.mac.local #DYN/' >> /etc/hosts.new

[ -s /etc/hosts.new ] && {
    cmp -s /etc/hosts.new /etc/hosts ||
    mv /etc/hosts.new /etc/hosts
}

明らかに、これは同じサブネット上のマシンでのみ機能します。イーサネットカードを交換するか、マシンを新しいハードウェアに複製すると、名前が変わります。 MACアドレスは、DSLモデムやインターフェイスボンディングなどで必要になる可能性のある「MACクローン作成」などのタスクの場合、ifconfigコマンドを使用して手動で変更できます。

1
user3710044

次のような arp コマンドを使用してみてください。

arp -n | grep [set MAC address here] | awk '{print $1}'

または、次のようなMACアドレスの例を使用します。

arp -n | grep a3.af.32.44.68.c9 | awk '{print $1}'
  • arp -nは、arpが認識しているすべてのデバイスをホスト名などのない数値アドレスで一覧表示します。
  • grepは単にgrepを使用して、検索するMACアドレスに対応するアイテムのみをフィルタリングします。
  • awk '{print $1}'は、その前にあるgrep/awkコンボによって返された値のIPアドレスを返すだけです。

その最終的な結果は、MACアドレスが一致する場合、そのMACアドレスに接続されたIPアドレスを取得することです。

1
JakeGould