ネットワーク調査+ポートスキャンツール nmap

Debian

ネットワーク管理をしていると、ネットワークにつながっている機器のIPアドレスを知りたい場合が多々あります。

DHCPで接続されるPCだったり、固定IPを忘れてしまったり、ネットワーク上の空きIPを調べたかったりと。

その時に便利なツールがnmapです。

nmapはネットワーク調査+ポートスキャンツールです。

ポートスキャンは、ネットワーク上につながっている機器のポートの開閉をチェックするものですが、悪用されることが多いのでNDSやNPSにひっかかることがあります。注意して使ってください。

基本

Windows用のバイナリも存在するようですが、ここではDebian13でインストール操作をします。

Windowsバイナリダウンロードのページは少し気味が悪いですが、ネットワークに昔から触れている人にはなじみがあるかもしれません。ロゴがWireSharkインストール時に必要なnpcapと一緒です。どのような関連があるかまでは調べませんでしたが、nmapのページのリンクからnpcapへ移動できるようです。

インストールはaptからイント―ルします。

# apt install nmap

コマンドの基本は次の通りです。

$ 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が列挙されます。

Aggressive OS guesses: Microsoft Windows 10 1607 (97%), Microsoft Windows Phone 7.5 or 8.0 (94%), Microsoft Windows Embedded Standard 7 (93%), Microsoft Windows 10 1511 - 1607 (92%), Microsoft Windows 10 1511 (91%), Microsoft Windows 7 or Windows Server 2008 R2 (91%), Microsoft Windows Server 2008 R2 or Windows 8.1 (91%), Microsoft Windows Server 2016 (91%), Microsoft Windows 7 Professional or Windows 8 (91%), Microsoft Windows Vista SP0 or SP1, Windows Server 2008 SP1, or Windows 7 (91%)

ちなみに上記のメッセージがでたマシンはWindows11 25H2でした。たぶんOS毎に判定項目があって100%になったら確定なのだと思います。ファイアウォールが動いているとこの推定がでますが、解除すると逆に判定不能となりました。

UDPスキャン

UDPポートに対しては -sUオプションをつけると調査できますが、もともとコネクションを確立しない接続なので反応が遅くなります。

拒否のレスポンスが来ればいいのですが、応答しない場合は待ち続けるのでそれが遅い原因ともなっています。

確認したいポートがはっきりしていれば、-pで番号を指定するのがおすすめです。

53(dns)、69(tftp)、123(ntp)、163(snmp)等が対象になってくると思います。

# nmap -sU -p 161 -T4 192.168.1.0/24

-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 でキャッシュを更新する必要があります。

人気の投稿