
ネットワーク接続やアプリケーション固有の問題をトラブルシューティングする場合、最初に確認することの1つは、システムで実際に使用されているポートと、特定のポートでリッスンしているアプリケーションです。
この記事では、 netstat
の使用方法について説明します 、 ss
およびlsof
どのサービスがどのポートでリッスンしているかを確認するコマンド。この手順は、macOSなどのすべてのLinuxおよびUnixベースのオペレーティングシステムに適用されます。
ネットワークポートは、その番号、関連付けられたIPアドレス、および通信プロトコルのタイプ(TCPやUDPなど)によって識別されます。
リスニングポートは、アプリケーションまたはプロセスがリッスンするネットワークポートであり、通信エンドポイントとして機能します。
各リスニングポートは、ファイアウォールを使用してオープンまたはクローズ(フィルタリング)できます。一般的に、オープンポートとは、離れた場所からの着信パケットを受け入れるネットワークポートです。
同じIPアドレスで同じポートをリッスンする2つのサービスを持つことはできません。
たとえば、ポート 80
でリッスンするApacheWebサーバーを実行している場合 および443
Nginxをインストールしようとすると、HTTPポートとHTTPSポートがすでに使用されているため、Nginxの起動に失敗します。
netstat
でリスニングポートを確認する #
netstat
は、ネットワーク接続に関する情報を提供できるコマンドラインツールです。
ポートを使用するサービスやソケットステータスなど、リッスンされているすべてのTCPまたはUDPポートを一覧表示するには、次のコマンドを使用します。
sudo netstat -tunlp
このコマンドで使用されるオプションの意味は次のとおりです。
-
-t
-TCPポートを表示します。 -
-u
-UDPポートを表示します。 -
-n
-ホストを解決する代わりに数値アドレスを表示します。 -
-l </ code> -リスニングポートのみを表示します。
-
-p
-リスナーのプロセスのPIDと名前を表示します。この情報は、rootまたはsudouserとしてコマンドを実行した場合にのみ表示されます。
出力は次のようになります:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master
tcp6 0 0 :::3306 :::* LISTEN 534/mysqld
tcp6 0 0 :::80 :::* LISTEN 515/apache2
tcp6 0 0 :::22 :::* LISTEN 445/sshd
tcp6 0 0 :::25 :::* LISTEN 929/master
tcp6 0 0 :::33060 :::* LISTEN 534/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
この場合の重要な列は次のとおりです。
プロト
-ソケットで使用されるプロトコル。ローカルアドレス
-プロセスがリッスンするIPアドレスとポート番号。-
PID/プログラム名
-PIDとプロセスの名前。
結果をフィルタリングする場合は、 grep
を使用します 指図。たとえば、TCPポート22でリッスンするプロセスを見つけるには、次のように入力します。
sudo netstat -tnlp | grep :22
出力は、このマシンでポート22がSSHサーバーによって使用されていることを示しています。
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
出力が空の場合は、ポートで何もリッスンしていないことを意味します。
PID、プロトコル、状態などの基準に基づいてリストをフィルタリングすることもできます。
netstat
廃止され、 ss
に置き換えられました およびip
、それでも、ネットワーク接続をチェックするために最もよく使用されるコマンドです。
ss
でリスニングポートを確認する #
ss
新しいnetstat
です 。 netstat
の一部が欠けています 機能がありますが、より多くのTCP状態を公開し、わずかに高速です。コマンドオプションはほとんど同じなので、 netstat
からの移行 ss
へ 難しいことではありません。
ss
ですべてのリスニングポートのリストを取得するには 次のように入力します:
sudo ss -tunlp
出力は、 netstat
によって報告されたものとほぼ同じです。 :
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3))
LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=929,fd=13))
LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30))
LISTEN 0 128 *:80 *:* users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4))
LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14))
LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))
lsof
でリスニングポートを確認する #
lsof
は、プロセスによって開かれたファイルに関する情報を提供する強力なコマンドラインユーティリティです。
Linuxでは、すべてがファイルです。ソケットは、ネットワークに書き込むファイルと考えることができます。
lsof
でリッスンしているすべてのTCPポートのリストを取得するには タイプ:
sudo lsof -nP -iTCP -sTCP:LISTEN
使用されるオプションは次のとおりです。
-
-n
-ポート番号をポート名に変換しないでください。 -
-p
-ホスト名を解決せず、数値アドレスを表示します。 -
-iTCP -sTCP:LISTEN
-TCP状態がLISTENのネットワークファイルのみを表示します。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
ほとんどの出力列名は自明です:
コマンド
、PID
、USER
-名前、pid、およびポートに関連付けられたプログラムを実行しているユーザー。名前コード> -ポート番号。
特定のポートでリッスンしているプロセスを見つけるには、たとえば、ポート 3306
使用するもの:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
出力は、MySQLサーバーがポート 3306
を使用していることを示しています :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
詳細については、lsofのマニュアルページにアクセスし、このツールの他のすべての強力なオプションについてお読みください。
結論#
システムで使用されているポートを確認するために使用できるいくつかのコマンドと、特定のポートでリッスンしているプロセスを見つける方法を示しました。
ご質問やご意見がございましたら、下にコメントを残してください。