組み込みProgrammerのチラシの裏

使用中のIPアドレスを調査(Mac版)

| Comments

同一サブネット内で使用されているIPアドレスを調査したい場合がある。 本記事ではMacのzshを使用したone linerで調査する方法を紹介する。

pingコマンドをブロードキャストする方法が一番簡単に思いつく。 しかし、セキュリティ上の問題からブロードキャストのpingに応答しないクライアントも多く存在する。 また、対象範囲のIPアドレスにpingコマンドを送信する方法も考えられるが、 ICMPパケットに応答しないクライアントも存在する。

そこで、対象範囲のIPアドレスにpingコマンド送信後にarpコマンドで調べる方針をとった。

ここではわかりやすくするために以下の範囲の使用中IPアドレスを調査している。 必要な範囲に変更してから使用すること。

  • サブネット : 192.168.1.x
  • 開始アドレス : 2
  • 終了アドレス : 13
1
2
3
4
5
6
7
8
$ for i in {2..32}; do ping -c 1 -t 1 -q 192.168.1.${i} > /dev/null; arp 192.168.1.${i}; done
? 192.168.1.7 at (incomplete) on en0 ifscope [ethernet]
? 192.168.1.8 at (incomplete) on en0 ifscope [ethernet]
? 192.168.1.9 at (incomplete) on en0 ifscope [ethernet]
? 192.168.1.10 at (incomplete) on en0 ifscope [ethernet]
? 192.168.1.11 at (incomplete) on en0 ifscope [ethernet]
? 192.168.1.12 at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.13) at xx:xx:xx:xx:xx:xx on en0 ifscope permanent [ethernet]

上記結果より、192.168.1.13が使用中であることが分かる。

なお、incompleteの行を除くと使用中のIPアドレスのみ見れるので、 以下のように修正することでよりわかりやすくなる。

1
2
3
4
5
6
$ for i in {2..255}; do ping -c 1 -t 1 -q 192.168.1.${i} > /dev/null; arp 192.168.1.${i} | grep -v "incomplete"; done
? (192.168.1.2) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet]
? (192.168.1.3) at xx:xx:xx:xx:xx:xx on en0 ifscope permanent [ethernet]
? (192.168.1.11) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet]
? (192.168.1.105) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]

Comments