GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでリスニングポートを確認する方法(使用中のポート)

ネットワーク接続やアプリケーション固有の問題をトラブルシューティングする場合、最初に確認することの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のマニュアルページにアクセスし、このツールの他のすべての強力なオプションについてお読みください。

結論#

システムで使用されているポートを確認するために使用できるいくつかのコマンドと、特定のポートでリッスンしているプロセスを見つける方法を示しました。

ご質問やご意見がございましたら、下にコメントを残してください。


Linux
  1. LinuxでBusyBoxを使用する方法

  2. LinuxでSuコマンドを使用する方法

  3. Linux の特定のポートで netstat を使用する方法

  1. Linuxでcronを使用する方法

  2. Linuxシステムリカバリにsystemd-nspawnを使用する方法

  3. netstat、lsof、およびnmapを使用してLinuxで開いているポートを確認する方法

  1. 大規模なLinuxバックアップに高度なrsyncを使用する方法

  2. 特定のポートLinuxでリッスンしているサービスを確認します

  3. LinuxでNetstatを使用してリスニング/オープンポートを確認する方法