| この記事の要点 |
|
概要
「このポートで何が動いているのか」「サービスがちゃんと待ち受けているか」を調べる作業は、サーバ運用やトラブルシュートで日常的に発生します。ポートの確認には大きく 2 つの視点があります。1 つはホスト内部から見る「どのプロセスがどのポートで listen しているか」、もう 1 つは外部から見る「そのポートに接続できるか (開いているか)」です。前者には ss・netstat・lsof 開いているポート番号の確認、後者には nmap や telnet/nc を使います。前提となる概念は ポート番号 を参照してください。
仕組み
TCP ソケットには状態 (state) があり、サーバとして接続を待っている状態が LISTEN です。確立済みの通信は ESTABLISHED、切断処理中は TIME_WAIT などになります。「待ち受けポートを知りたい」場合は LISTEN だけを抽出すればよく、各ツールの「LISTEN 限定」オプションを使います。
- ss: iproute2 提供の現行標準。カーネルの sock_diag API を直接叩くので高速。
-t(TCP)-u(UDP)-l(LISTEN)-n(名前解決なし)-p(プロセス) を組み合わせる。 - netstat: 旧来の net-tools 系。新しいディストリビューションでは未インストールのことがある。オプション体系は ss とほぼ同じ。
- lsof: 「開いているファイル」を列挙するツール。ソケットもファイルなので
-iでネットワーク接続を逆引きできる。
実用例
# 【Linux】LISTEN 中の TCP/UDP をプロセス付きで (現行の定番)
sudo ss -tulnp
# TCP の LISTEN だけ
ss -tlnp
# 特定ポート(80)を使っているプロセスを逆引き
sudo lsof -i :80
sudo ss -tlnp 'sport = :80'
# 旧式 netstat での同等確認
sudo netstat -tlnp
# 【Windows】PID 付きで全ポート一覧 (PowerShell/cmd)
netstat -ano
# 特定ポート(3000)を使っている行だけ
netstat -ano | findstr :3000
# 出た PID からプロセス名を特定
tasklist /FI "PID eq 1234"
# PowerShell ネイティブで listen 中の TCP を見る
Get-NetTCPConnection -State Listen | Select-Object LocalPort,OwningProcess
Address already in use や EADDRINUSE でサーバが起動できないときは、上記でそのポートを掴んでいるプロセスを特定し、停止するか別ポートに変更します。
主な用途
- サービス稼働確認: 期待したポートで listen できているかを確認する。
- ポート競合の解決: 起動失敗時に「誰がそのポートを使っているか」を突き止める。
- 不要ポートの棚卸し: 開けっ放しの不要サービスを見つけてセキュリティを高める。
- 外形監視: nmap で外部視点の開放状況を確認し、ファイアウォール設定を検証する。
ツールの比較
| ツール | 視点 | 特徴 | 代表コマンド |
|---|---|---|---|
| ss | ホスト内部 | 高速・現行標準・フィルタ豊富 | ss -tlnp |
| netstat | ホスト内部 | 旧式・互換性高いが要インストール | netstat -tlnp |
| lsof | ホスト内部 | プロセス↔ソケットの逆引きに強い | lsof -i :80 |
| netstat -ano | ホスト内部 (Windows) | PID 付き、tasklist と併用 | netstat -ano |
| nmap | 外部 (ネットワーク越し) | 開放状況・サービス推定 (許可対象のみ) | nmap -p- host |
注意点
- プロセス表示には権限が必要: 他ユーザのプロセス名/PID を見るには
sudoが要る。付けないと PID 欄が空になる。 - -n を付けないと遅い: 名前解決で待たされることがあるため、調査時はほぼ常に
-nを付ける。 - TCP と UDP を両方見る: UDP サービス (DNS など) を見落とさないよう
-uも付ける。 - listen のバインドアドレス:
0.0.0.0:80は全インターフェース、127.0.0.1:80はループバックのみ。外部から繋がらない原因はここが多い。 - 外形確認 (nmap) の権限: 自分の管理外ホストへのスキャンは不正アクセスになりうる。許可された対象に限る。
関連リンク
子ページ
子ページはありません
同階層のページ
- ウェルノウンポート一覧
- ポートフォワーディング
- ポートの確認方法
- nmapによるポートスキャン
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15