LANかWANに接続しているhostのIPアドレスを全部リストしたいときってありますよね。
色々ソフトウェアを使ってやるのもいいですが。
たとえば、私はスマホアプリのFingを使っています。(iOSもAndroidも)
しかし、アプリのないときは、コマンドラインででいると便利ですよね。
そういう時は!
nmap -sP 192.168.2.1/24
もちろん、192.168.2.1のところはあたなのネットワークの環境に合わせて直してくださいね。
しかし、この場合は、全部見つからない場合があります。
理由としては、この命令を実行した時に、指定した範囲内のIPアドレスにPingを送ります、Pingが失敗した場合は、80番のポートにSYNパケットを送ります。 (SYN scan)
SYNパケットとは、TCPで接続を確立する際にクライアントからサーバに送られるパケットです。TCPヘッダの制御フラグでSYNフィールドがセットされたパケットのことです。
しかし、80番のポートがファイアウォールの設定でブロックしている場合が多いから、検出できないことになります。たとえばWindowsのファイアウォールがデフォルトの設定がPingもブロックしています。従いまして、Pingやポート80番が閉じている端末はこのコマンドでは検出されません。
これを回避するためには
別のポートを指定することでできます。
つまり、SYNパケットを送るポートを指定できます。他のよく利用されている(閉じていない確率の高い?)ポートに送れば、検出されます。コマンドは下記となります。
sudo nmap -sP -PS22,3389 192.168.3.1/24 #custom TCP SYN scan
あるいは
sudo nmap -sP -PU161 192.168.4.1/24 #custom UDP scan
もちろん、ここも「192.168.2.1/24」のところ、あなたのネットワークの環境に合わせて直してくださいね。
-PSは、22,3389番のポートを指定しています、そうすると、上のコマンドのデフォルトに80番に送るのではなく、代わりに22と3389番に送ります。もちろん、これも全て検出できるとは限りらないです。各ホストの設定に依存します。
ポートスキャンをしない時は、-sn (no port scan)オプションを使いましょう。(これをよくping sweepと言います。ping 192.168.2.255より効果的です、何故ならば、ping ブロードキャストの場合、ブロードキャストに反応しないホストがあります。)
このコマンドの前にsudoをつけない場合は、自分のホストが検出されない場合があります。
「nmap」が入っていない場合は、インストールしましょう!
Debian系のOSには
sudo apt-get install nmap
で、「nmap」をインストールすることができます。
Macでは
brew install nmap
(最初brewを使うのが抵抗がありましたが、今はMacに入れています。)
これで、コマンド一本で、あなたのLANかWANに接続している全てのホストのIPアドレスをリストアップすることができます!
私は、よく新しいRaspberryPiを電源投入したあと、IPアドレスがどれかなと困ったことがありましたが、これで解決。
ちなみに「sudo」をつけると、
MAC Address: B8:27:EB:4D:2D:5F (Raspberry Pi Foundation)
のように、MAC Addressとメーカー情報も取れます。
あと、UPDでスキャンする時は、rootの権限がないとできませんので、sudoが必要です。
もし、LANかWANの中の接続しているRaspberry PiのIPアドレスを探したいという限定的なテーマでしたら
sudo nmap -sP 192.168.1.0/24 | awk '/^Nmap/{ip=$NF}/B8:27:EB/{print ip}'
上のコマンドが使えます。
Raspberry PiのMAC Addressが全部「B8:27:EB」で始まる特徴を利用しているコマンドです。
ここもあたなのネットワークの環境に合わせて、直してくださいね。
さらに、「RaspberryPiを探す」だけでしたら、こういうのもあります。
https://github.com/adafruit/Adafruit-Pi-Finder
いかがでしょうか。これで、IPアドレスをしっかり把握できますね。
注意点としては、nmapの使い方ですね。ポートスキャンは不正アクセスの予備的な行為と考えられ,不正アクセス禁止法違反には当たらないものの,攻撃の前兆とされる可能性が高く,トラブルになりやすい。外部の他人のサイトへのポートスキャンはやめましょう!
あと、arpコマンドを使う方法もあります。
まず
nmap -sP 192.168.2.1/24
でping sweepをして、続いて
arp -a -n
を実行すると、ARPクエリに反応するホストを全部取得できます。ICMPをフィルタリングしているホストもです。
他の考えられる方法としては
Wireshark
tcpdump
ですかね。
他のやり方がありましたら、教えてください。