目的
同じネットワーク上にいるデバイスのうち、SSH接続できるラズパイとそのIPをnmapでリストします。
具体例としては、Wi-Fi設定をImagerで事前に済ませたラズパイでディスプレイやキーボードを接続することなくSSH接続できるようIPを特定するなどが挙げられます。
この記事ではラズパイを対象としますが、そうでない場面でも応用は効くと思います。
注意
テストはLinuxマシン(EndeavourOS / 6.10.6-zenカーネル)で行いました。
Macマシンの場合はおそらくそのまま動きます。
Windowsマシンについては今回は取り扱いません。適宜読み替えるか、WSLを使用してください。
前提要件
見つけたいデバイスと捜索に使用するデバイスが同じネットワーク上にいることを確認してください。別ネットワークにいるデバイスをスキャンする場合はこの記事の対象外となります。
まずは、捜索に使用するデバイスへnmapをインストールしておきます。
次にコンソールでip a
を実行して、適切なインターフェースのinet
セクションに表示された値をコピーしておいてください。
例: 192.168.xxx.xxx/24
(一部はマスクしています)
スキャン
スキャンは自身の所有するネットワーク上で、自身の所有するマシンに対してのみ行ってください。他人のネットワーク上で、または他人の所有するマシンに対してスキャンを行う際は、事前に許可を取るようにしてください。
一般ユーザーとして実行する
nmap -p 22 --open <アドレス>
指定したアドレス空間に存在するデバイスのうち、22番ポートが開いているデバイスをリストします。
オプションの解説
nmap:
-
-p
: スキャンするポートやその範囲を指定する。22番ポートはSSHに用いられるデフォルトのポート -
--open
: 開いているポートのみ一覧に表示する
実行例(一部マスク)
$ nmap -p 22 --open 192.168.xxx.xxx/24
Starting Nmap 7.95 ( https://nmap.org ) at 2024-09-16 23:35 JST
Nmap scan report for 192.168.68.xxx
Host is up (0.044s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap scan report for 192.168.xxx.xxx
Host is up (0.072s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap scan report for 192.168.xxx.xxx
Host is up (0.069s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 256 IP addresses (12 hosts up) scanned in 6.06 seconds
rootとして実行する(推奨)
前述したコマンドをrootとして実行することで、一覧でMACアドレスとともにベンダーが表示されるようになります。ラズパイにはRaspberry Pi Trading
と書かれているはずです。
Grepと組み合わせることで、より出力を簡略化することができます。
sudo nmap -p 22 --open <アドレス> | grep -B 6 'Raspberry Pi'
オプションの解説
grep:
-
-B <行数>
: 一致した行から指定した行数分だけ前の行までを表示する
実行例(一部マスク)
$ sudo nmap -p 22 --open 192.168.xxx.xxx/24 | grep -B 6 'Raspberry Pi'
[sudo] meatwo310 のパスワード:
Nmap scan report for 192.168.xxx.xxx
Host is up (0.037s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: D8:3A:DD:xx:xx:xx (Raspberry Pi Trading)
高速化を図る
オプションを調整する
巨大なネットワークでは、スキャンにより多くの時間を要することが考えられます。
以下のオプションの一部を使用することでより速くスキャンすることができるかもしれません。
-T4
: スキャンを高速化するテンプレートを適用
-T5
: T4よりもさらに精度を犠牲にして高速化するテンプレートを適用
--host-timeout <時間>
: 1ホストにかける時間を制限
詳細:
処理を考え直す
あるいは、処理自体を変更することで、高速なスキャンを実現します。
例えば、ポートスキャンを行わずPingスキャンのみを行う場合:
sudo nmap -T4 -sn -n <アドレス> | grep -B 2 'Raspberry Pi'
オプションの解説
-
-sn
: Pingスキャンによるホストの発見のみを行う。rootとしてローカルな有線ネットワークに対してスキャンする場合は、自動的にARP要求(-PR
)が用いられる -
-n
: DNS解決を行わない
詳細:
実行例(一部マスク)
$ sudo nmap -T4 -sn -n 192.168.xxx.xxx/24 | grep -B 2 'Raspberry Pi'
Nmap scan report for 192.168.xxx.xxx
Host is up (0.038s latency).
MAC Address: D8:3A:DD:xx:xx:xx (Raspberry Pi Trading)
参考