このエントリーをはてなブックマークに追加


ポート番号から利用しているプロセスを調べる方法

ポート番号からポート番号を利用しているプロセスがどれかを調べる方法を以下に記述します。


関連資料

lsofコマンドにポート番号を渡しプロセスを特定する

以下、CentOS6を利用して確認しました。

実行例

  1. ターミナルを2つ起動。
  2. 1つ目のターミナルで以下のコマンドを実行。 以下のコマンドは 12345ポートで受信状態になります。
    $ nc -l localhost 12345
    (ncコマンドがインストールされていなかったので、rootユーザでyum install ncを実行)
     
  3. ncコマンドについては、以下の記事を参照ください。
    逆引きUNIXコマンド/nc(netcat)コマンドでTCP,UDP通信を行う
     
  4. 2つ目のターミナルでlsofコマンドを利用してポート番号からプロセスを調べます。
    lsof -i:ポート番号
    複数のポート番号を調べる
    lsof -i:ポート番号,ポート番号
    尚、lsofコマンドですが、rootであればPATHが通ってますが、一般ユーザではPATHが通っていません。
    一般ユーザでlsofコマンドを実行したので、フルパスでlsofコマンドを実行しています。
    $ /usr/sbin/lsof -i:12345
    COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nc      2680 sakura    3u  IPv4  19922      0t0  TCP localhost.localdomain:italk (LISTEN)
    出力結果のCOMMANDにncと表示されています。

rootでlsofを利用する場面

lsofをフルパスで指定すれば一般ユーザでも動作しますし、上記のようにコマンドを起動したユーザとlsofのユーザが同じであればlsofによる出力結果が表示されます。 以下に一般ユーザとrootで確認してみます。

  • 一般ユーザでsshdのポート番号22を調べてみる。
    [sakura@centos6 ~]$ /usr/sbin/lsof -i:22
    [sakura@centos6 ~]$ 
    何も出力されませんでした。
  • rootユーザでsshdのポート番号22を調べてみる。
    [root@centos6 ~]# lsof -i:22 
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    1522 root    3u  IPv4  12332      0t0  TCP *:ssh (LISTEN)
    sshd    1522 root    4u  IPv6  12334      0t0  TCP *:ssh (LISTEN)
    rootであれば、問題なくポート番号22のCOMMAND, PIDなどが表示された。

複数のポート番号を指定した実行結果

参考まで

[root@centos6 ~]# lsof -i:22,25 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1522 root    3u  IPv4  12332      0t0  TCP *:ssh (LISTEN)
sshd    1522 root    4u  IPv6  12334      0t0  TCP *:ssh (LISTEN)
master  1640 root   12u  IPv4  12752      0t0  TCP localhost.localdomain:smtp (LISTEN)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:32