ネットワーク調査+ポートスキャンツール nmap
ネットワーク管理をしていると、ネットワークにつながっている機器のIPアドレスを知りたい場合が多々あります。
DHCPで接続されるPCだったり、固定IPを忘れてしまったり、ネットワーク上の空きIPを調べたかったりと。
その時に便利なツールがnmapです。
nmapはネットワーク調査+ポートスキャンツールです。
ポートスキャンは、ネットワーク上につながっている機器のポートの開閉をチェックするものですが、悪用されることが多いのでNDSやNPSにひっかかることがあります。注意して使ってください。
基本
Windows用のバイナリも存在するようですが、ここではDebian13でインストール操作をします。
Windowsバイナリダウンロードのページは少し気味が悪いですが、ネットワークに昔から触れている人にはなじみがあるかもしれません。ロゴがWireSharkインストール時に必要なnpcapと一緒です。どのような関連があるかまでは調べませんでしたが、nmapのページのリンクからnpcapへ移動できるようです。
インストールはaptからイント―ルします。
コマンドの基本は次の通りです。
$ nmap [スキャンタイプ...] [オプション] {ターゲット(IPやNetwork)}
$nmap 192.168.1.1
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-12 20:05 JST
Nmap scan report for 192.168.1.1
Host is up (0.00034s latency).
Not shown: 993 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
3306/tcp open MySQL
稼働中のアドレスに対して、処理を実行するとPing応答より多くの情報が得られます。
デフォルトでは主な1000種のポートの開閉を確認してくれます。
また、処理を高速にするためにPingを使って生存が確認されたホストに対してポートチェックは行われます。そのためファイアウォールでPingをふさがれているようなホストの場合は -Pn オプションを使って初期の生存確認をしないように指定できます。
またポートを指定したい場合は、-p のあとに 80,443 といったように,で区切ってポートをしていできます。すべてのポートを指定したい場合は、-p- とします。
MACアドレス、PING疎通調査
先のようにオプションを付与しない場合は、ポートスキャンも同時に行います。これを行わないようにするには-sn のポートスキャンなしオプションをつけます。これをネットワーク単位で実行すると、簡単に同一ネットワーク上のIPとMACアドレスリストが作成できます。
nmap -sn 192.168.1.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-13 17:08 JST Nmap scan report for 192.168.1.0 Host is up (0.00064s latency). MAC Address: xx:xx:xx:xx:xx:xx Nmap scan report for 192.168.1.1 Host is up (0.00037s latency). MAC Address: xx:xx:xx:xx:xx:xx Nmap scan report for 192.168.1.5 MAC Address: xx:xx:xx:xx:xx:xx ...
OS推定
-Oオプションは稼働しているOSを推定するモードです。
Nmap scan report for 192.168.1.100 Host is up (0.00068s latency). Not shown: 995 closed tcp ports (reset) PORT STATE SERVICE 80/tcp open http 443/tcp open https 515/tcp open printer 631/tcp open ipp 9100/tcp open jetdirect MAC Address: xx:xx:xx:xx:xx:xx Device type: general purpose Running: Linux 3.X|4.X
確度が高い場合はRunningにOS名が入ります。上記は某プリンタを指定した例ですが、管理UI用にWebサイトが稼働していて、そのバックグラウンドはLinuxのようでした。
確度が低い場合は、Aggressive OS guessesに可能性が高いOSが列挙されます。
ちなみに上記のメッセージがでたマシンはWindows11 25H2でした。たぶんOS毎に判定項目があって100%になったら確定なのだと思います。ファイアウォールが動いているとこの推定がでますが、解除すると逆に判定不能となりました。
UDPスキャン
UDPポートに対しては -sUオプションをつけると調査できますが、もともとコネクションを確立しない接続なので反応が遅くなります。
拒否のレスポンスが来ればいいのですが、応答しない場合は待ち続けるのでそれが遅い原因ともなっています。
確認したいポートがはっきりしていれば、-pで番号を指定するのがおすすめです。
53(dns)、69(tftp)、123(ntp)、163(snmp)等が対象になってくると思います。
-TオプションUDPでなくても使えるオプションです。T0-T5まであり、タイミング(速さ)を指定します。低い値の方がひとつのチェックをゆっくり行います。早くすると、レスポンスが早くなりますが、取りこぼしの可能性は高くなります。
スクリプトオプション
--script オプションに続き、スクリプトを指定することにより複雑なチェックを行えます。
コンマ区切りで複数指定でき、ディレクトリ、ファイル名、カテゴリ名のいずれかを指定します。
ここで指定できるファイルは、/usr/share/nmap/scriptsに入っている.nse拡張子のものです。中身はLuaスクリプトなので編集も可能です。また、カテゴリ名は各ファイルにあるcategories変数に設定されています。
または、-sCオプションは --script=default と等価ですが、このdefaultは前述のカテゴリ名として設定されています。
また、脆弱性チェック用のスクリプトには "vuln"が設定されているので、--script vulnで 脆弱性トータルチェックができるようになっています。
筆者はたまに、ネット上のWhoisを使うことがありますが、これもnmapで照会できます。
nmap -sn --script=whois-ip 8.8.8.8 といった感じで使います(ポートをチェックする必要はないので-snを付けます)。
#nmap -sn --script=whois-ip 8.8.8.8 Host script results: | whois-ip: Record found at whois.arin.net | netrange: 8.8.8.0 - 8.8.8.255 | netname: GOGL | orgname: Google LLC | orgid: GOGL | country: US stateprov: CA | orgtechname: Google LLC |_orgtechemail: arin-contact@google.com
もし、defaultカテゴリに追加したいスクリプトがあり変数を編集したり、新規で自作スクリプトを作ったりするような事があったら、nmap --script-updatedb でキャッシュを更新する必要があります。
