Liunx で LAN 上のデバイスを探索する
目的
ローカルエリアネットワークに接続されている全てのデバイスを探索したい場合があります。これはネットワークのセキュリティやパフォーマンスの調査に役立ちます。
この用途について,たとえば Android では専用のアプリケーションである Port Authority や Fing 等が存在します。これらと同様の機能を GNU/Linux のコンソールで実現します。
手順
Nmap を使用する
特に理由がなければ,Nmap を使用することをお勧めします。Nmap は多機能なネットワーク監査ツールであり,さまざまな用途に役立ちます。
Nmap は多くのディストリビューションでは標準導入されていないので,レポジトリからダウンロードします。Debian GNU/Linux での場合の例を示します。
$ sudo apt install nmap
デバイスの探索には -sP
オプションを使います。このオプションでは hostname や MAC アドレスを取得できるほか,MAC アドレスの割り当てリストから特定したベンダ名も表示してくれます(MAC アドレスの自己申告に依存します)。IP アドレスレンジが 192.168.1.0/24 の場合は以下のようにします(ip addr
等で確認できます)。
$ sudo nmap -sP 192.168.1.0/24
以下のような結果が得られます。
Nmap scan report for ROUTER (192.168.1.1)
Host is up (0.00030s latency).
MAC Address: xx:xx:xx:xx:xx:xx (Buffalo.inc)
Nmap scan report for 192.168.1.20
Host is up (-0.085s latency).
MAC Address: xx:xx:xx:xx:xx:xx (Brother industries)
Nmap scan report for HOST1 (192.168.1.136)
Host is up.
Nmap done: 256 IP addresses (3 hosts up) scanned in 3.23 seconds
以上の表示例では,ROUTER はルータ,HOST1 は nmap を実行したマシン自身です。自分自身の MAC アドレスは表示されません。
$ sudo nmap -sP 192.168.1.0/24 | grep MAC
などとすることで,LAN に接続されている(自分以外の)全てのデバイスの MAC アドレスを簡単に得ることができます。
MAC Address: xx:xx:xx:xx:xx:xx (Buffalo.inc)
MAC Address: xx:xx:xx:xx:xx:xx (Brother industries)
root 権限なしでの実行も可能であり,MAC アドレス・ベンダ名は取得できませんが,デバイスの探索はできます。
参照:
Netdiscover を使用する
Netdiscover は LAN 上のデバイス探索に特化した新しいツールです。本格的な用途での実績があるツールではありませんが,Nmap より親しみやすくコンパクトです。
Debian 等では公式レポジトリに収録されています。
$ sudo apt install netdiscover
使用にあたっては,レンジとインタフェースを指定します。
$ sudo netdiscover -r 192.168.1.0/24 -i eno1
Currently scanning: Finished! | Screen View: Unique Hosts
2 Captured ARP Req/Rep packets, from 2 hosts. Total size: 120
_____________________________________________________________________________
IP At MAC Address Count Len MAC Vendor / Hostname
-----------------------------------------------------------------------------
192.168.1.1 xx:xx:xx:xx:xx:xx 1 60 BUFFALO.INC
192.168.1.20 xx:xx:xx:xx:xx:xx 1 60 Brother industries, LTD.
q
キーで終了します。
参照:
特別なツールを使用しない
もちろん,ping とシェルスクリプトで順番にパケットを投げていくような方法でも探索できます。root 権限は不要です。
ただし,かなり時間がかかるうえ得られる情報も少ないため,他の方法を選択可能な場合にはお勧めしません。
for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
192.168.1.1 UP
192.168.1.20 UP
192.168.1.146 UP
参照:
投稿にあたり,完全な IP アドレスが保存されます(公開されません)。
コメントはスパムフィルタで処理され,承認後に公開されます。