サイトアイコン KOKENSHAの技術ブログ

LANかWANに接続しているhostのIPアドレス

LANかWANに接続しているhostのIPアドレスを全部リストしたいときってありますよね。

色々ソフトウェアを使ってやるのもいいですが。

たとえば、私はスマホアプリのFingを使っています。(iOSAndroidも)

しかし、アプリのないときは、コマンドラインででいると便利ですよね。

そういう時は!

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アドレスがどれかなと困ったことがありましたが、これで解決。

Raspberry Pi OSインストール

ちなみに「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

ですかね。

他のやり方がありましたら、教えてください。

モバイルバージョンを終了