lsofコマンドで実行しているポート番号の通信状態を確認する【Linux】

Linux

サーバーで通信しているポート番号を確認する必要があったので、確認方法をメモ。
結論からいうと、次のコマンドで確認できます。
※環境はAWSのAmazon Linux 2です。

$ sudo lsof -i -n -P

実行結果は次の通りになります。

モザイク部分は接続元のIPアドレスです
  意味 備考
-i IPソケットをリストする ネットワークに接続しているプログラムを表示する(TCPとUDPが表示される)
-n 名前解決しない オプション有)10.0.1.10
オプション無)ip-10-0-1-10.ap-northeast-1.compute.interna
-P ポート番号を解決しない オプション有)TCP *:22
オプション無)TCP *:ssh
オプション一覧

lsofコマンドはサーバーで実行しているプロセス(プログラム)を確認します。

確認方法ですが、SSHを例に見てみます。SSHはリモートからコマンド操作を可能にするプログラムです。
SSH接続だけを表示させるにはオプション「-i」にポート番号22を追加します。

$ sudo lsof -i :22 -n -P

各行の末尾に「LISTEN」、「ESTABLISHED」とあります。これはポートの通信状態を表すものです。

LISTEN待受中
ESTABLISHED通信中

(LISTEN)はターミナルからのSSH接続を待ち受けている状態。それぞれIPv4とIPv6での通信を待ち受けています。

(ESTABLISHED)は、現在通信しているSSHの状態を表します。Macの場合、ターミナルからSSHでサーバーに接続しますが、まさにその通信を表しています。

一番下の行、ユーザー名「ec2-user」とありますが、これはAWSが用意しているユーザーアカウントです。
ec2-userがクライアント側、その上のrootがサーバー側と思われます。

lsofコマンドは時々使うのによく忘れるので、改めてメモしておきます。
こちらの記事でもポートについてまとめてます。