みなさん、こんにちは。
ネットワーク開発や、自作のサービスを構築しているとき、「LANの中でどのポートが空いているんだろう?」とか「どんなサービスが動いているんだろう?」と気になったことはありませんか?
そんなときに大活躍してくれるのが、nmap(Network Mapper)というツールです。
今回は、nmapの基本的なことから、OSごとのインストール方法、そして実際に空いているポートを探す方法まで、初心者の方にも分かりやすく解説していきます。
1. nmapって何?
nmapは、ネットワークに接続されているコンピューターやデバイスの情報を調べるためのツールです。主な用途は以下の通りです。
- ポートスキャン
- どのポートが開いているかを確認できます。
- ホスト探索
- LAN内にどんなIPアドレスのデバイスが存在するか調べられます。
- サービス確認
- 開いているポートでどんなサービスが動いているかを推測できます。
つまり、nmapを使えば、ネットワークの「今」の状態をパッと把握できるのです!
2. nmapのインストール方法(OS別)
まずは、ご自身の環境に合わせてnmapをインストールしましょう。どれもとても簡単ですよ。
2.1 Ubuntu / Debian 系
sudo apt update
sudo apt install nmap -y
これらのコマンドで、標準のリポジトリからすぐにインストールできます。
2.2 Fedora / CentOS / RHEL 系
sudo dnf install nmap -y # Fedoraの場合
sudo yum install nmap -y # CentOS / RHELの場合
お使いのOSに合わせてコマンドを使い分けてください。
2.3 Windows
Windowsの方は、公式ウェブサイトからインストーラーをダウンロードするのがおすすめです。
https://nmap.org/download.html
ダウンロードしたインストーラーを実行するときは、「Add to PATH」というオプションにチェックを入れておくと、コマンドプロンプトから簡単に使えるようになります。
2.4 macOS
macOSの場合は、Homebrewを使えば一発でインストールできます。
brew install nmap
インストールが完了したら、nmap --version
と入力して、バージョン情報が表示されるか確認してみましょう。
3. nmapの基本的な使い方
ここからは、実際にnmapを動かしてみましょう!
3.1 単一IPをスキャンする
まずは、特定のIPアドレスが持っているポートを調べてみます。
nmap 192.168.0.1
このコマンドを実行すると、デフォルトで約1,000個のポートをスキャンしてくれます。結果には、ポートの状態がopen
(開いている)、closed
(閉じている)、filtered
(フィルタリングされている)のように表示されます。
3.2 特定のポート範囲をスキャンする
「特定のポートだけを調べたい」というときは、-p
オプションを使います。
nmap -p 8000-8100 192.168.0.1
これで、8000
から8100
までのポートだけをスキャンできます。
3.3 LAN内のデバイスを確認する
LAN内にどんなデバイスが接続されているか知りたいときは、-sn
オプションが便利です。
nmap -sn 192.168.0.0/24
このコマンドは、Pingスキャンを使って、ネットワーク内で通信可能なIPアドレスの一覧を表示してくれます。
3.4 サービスの情報を確認する
開いているポートが何のサービスで使われているか知りたいときは、-sV
オプションを付け加えます。
nmap -sV 192.168.0.1
これで、ポート番号だけでなく、そのポートで動作しているサービス名やバージョンまで取得できます。
4. nmapの結果の見方
スキャン結果に出てくる「open
」「closed
」「filtered
」は、それぞれ次のような意味を持っています。
- open:ポートが開いていて、通信できる状態です。
- closed:OSは応答していますが、サービスは動いていません。空いているポートの候補になります。
- filtered:ファイアウォールなどで応答が遮断されています。
<結果の例>
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
8091/tcp closed network-tv
この例だと、ポート22と80が開いていて、ポート8091は閉じていることが分かりますね。
5. 独自サービス開発に役立てる方法
自作サービスを開発する場合、まずどこに配置すればいいか、空いているポートを探す必要がありますよね。
こんなときは、nmapとPythonを組み合わせるのがおすすめです。
- nmapでポートの候補を絞る
- まずはnmapで大まかにポートの空き具合を確認します。Bash
nmap -p 8000-8100 192.168.0.0/24
この結果を参考に、closed
になっているポートをメモしておきましょう。
- まずはnmapで大まかにポートの空き具合を確認します。Bash
- Pythonで空きポートを最終確認する
- 次に、Pythonのプログラムを使って、実際にポートが使えるか確認します。
import socket
def find_free_port(start=8000, end=8100):
for port in range(start, end+1):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
s.bind(('', port))
return port # バインドできた=空きポート!
except OSError:
continue
return None
free_port = find_free_port()
print("空いているポート:", free_port)
このように、nmapで候補を探し、Pythonで確実に空いているポートを見つけるのが、安全で確実な方法です。
6. 使うときの注意点
nmapは非常に便利なツールですが、使うときにはいくつか注意点があります。
- スキャンするネットワークは自分のものに限定する
- 必ずご自身のネットワーク内や、許可を得た機器に対して使いましょう。
- 大規模スキャンはネットワークに負荷をかけることがあります
- 一度にたくさんのIPアドレスやポートをスキャンすると、ネットワークが重くなることがあるので注意してください。
まとめ
今回は、ネットワークのポートやサービスを調べるのに便利なツールnmapをご紹介しました。
nmapを使えば、LAN内の空きポートや稼働中のサービスを簡単に把握できます。OSごとに手軽にインストールできるので、誰でもすぐに使い始められます。
独自サービスの開発では、まずnmapで大まかなポートの空き状況を把握し、その後にPythonなどのスクリプトで最終確認するのがおすすめです。この組み合わせを覚えておくと、開発がよりスムーズに進むはずです。
ぜひ、この機会にnmapを活用してみてくださいね!
本日も最後までお読みいただきありがとうございました。
それでは、よいシステム開発を!