#navi(../)
* ポート番号から利用しているプロセスを調べる方法 [#ucae894f]
ポート番号からポート番号を利用しているプロセスがどれかを調べる方法を以下に記述します。~
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
*関連資料 [#e85d46c6]
-[[逆引きUNIXコマンド/プロセスがどのポートを利用しているかを調べる方法]]
-[[ソケットを使用しているプロセスを特定する・fuser>逆引きUNIXコマンド/ソケットを使用しているプロセスを特定する・fuser]]
* lsofコマンドにポート番号を渡しプロセスを特定する [#x1ae549d]
以下、CentOS6を利用して確認しました。
** 実行例 [#m4a1a1d5]
+ターミナルを2つ起動。
+1つ目のターミナルで以下のコマンドを実行。
以下のコマンドは 12345ポートで受信状態になります。
$ nc -l localhost 12345
(ncコマンドがインストールされていなかったので、rootユーザでyum install ncを実行)
#br
+ ncコマンドについては、以下の記事を参照ください。~
[[逆引きUNIXコマンド/nc(netcat)コマンドでTCP,UDP通信を行う]]
#br
+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を利用する場面 [#w971e14a]
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などが表示された。
** 複数のポート番号を指定した実行結果 [#rf8bf3b2]
参考まで~
[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)
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)