【初心者向け】各OSのTCPポート番号からプロセス/サービス調査コマンド入門

2016.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コカコーラ大好きカジです。

各OSのTCPポートが何のプロセス/サービスが利用しているのか、調査方法に苦慮することがあると思います。

構築直後の状態でAmazon Linux,CentOS,Ubuntu,Windows2012について確認する方法を自分も忘れやすいのでまとめてみました。

どなたかのお役に立てれば幸いです。

Amazon Linux

AMIは、amzn-ami-hvm-2016.03.1.x86_64-gp2 (ami-29160d47)を利用して確認しています。

lsofを利用して調査します。

[ec2-user@ip-10-1-11-141 ~]$ sudo lsof -Pi | grep ':22'
sshd      2334     root    3u  IPv4   9800      0t0  TCP *:22 (LISTEN)
sshd      2334     root    4u  IPv6   9802      0t0  TCP *:22 (LISTEN)

プロセスから、プロセスのパスを確認

[ec2-user@ip-10-1-11-141 ~]$ ps -ef | grep sshd
root      2334     1  0 08:35 ?        00:00:00 /usr/sbin/sshd
root      2560  2334  0 09:28 ?        00:00:00 sshd: ec2-user [priv]
ec2-user  2562  2560  0 09:28 ?        00:00:00 sshd: ec2-user@pts/0
ec2-user  2591  2563  0 09:28 pts/0    00:00:00 grep --color=auto sshd

rpmコマンドでバージョン確認

[ec2-user@ip-10-1-11-141 ~]$ rpm -qif /usr/sbin/sshd
Name        : openssh-server
Version     : 6.6.1p1
Release     : 25.61.amzn1
Architecture: x86_64
Install Date: 2016年04月29日 23時58分47秒
<省略>

CentOS6、CentOS7

AMIは、以下を利用して確認しています。

CentOS Linux 7 x86_64 HVM EBS 1602-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-d7e1d2bd.3 (ami-eec1c380)

CentOS Linux 6 x86_64 HVM EBS 1602-74e73035-3435-48d6-88e0-89cc02ad83ee-ami-21e6d54b.3 (ami-fa3d3f94)

CentOSはlsofがインストールされていません。

インストール不可の場合は、ssコマンドで確認できると思います。

[centos@ip-10-1-11-25 ~]$ sudo ss -pantu | grep ':22'
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=771,fd=3))
tcp    ESTAB      0      36     10.1.11.25:22                 126.131.100.97:63466               users:(("sshd",pid=2560,fd=3),("sshd",pid=2558,fd=3))
tcp    LISTEN     0      128      :::22                   :::*                   users:(("sshd",pid=771,fd=4))
[centos@ip-10-1-11-25 ~]$

プロセスから、プロセスのパスを確認

[centos@ip-10-1-11-25 ~]$ ps -ef | grep sshd
root       771     1  0 08:35 ?        00:00:00 /usr/sbin/sshd -D
root      2558   771  0 09:26 ?        00:00:00 sshd: centos [priv]
centos    2560  2558  0 09:26 ?        00:00:00 sshd: centos@pts/0
centos    2582  2561  0 09:26 pts/0    00:00:00 grep --color=auto sshd
[centos@ip-10-1-11-25 ~]$

rpmコマンドでバージョン確認

[centos@ip-10-1-11-25 ~]$ rpm -qif /usr/sbin/sshd
Name        : openssh-server
Version     : 6.6.1p1
Release     : 23.el7_2
Architecture: x86_64
Install Date: 2016年02月22日 17時13分26秒
Group       : System Environment/Daemons
Size        : 939088
License     : BSD
Signature   : RSA/SHA256, 2016年01月14日 23時09分21秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : openssh-6.6.1p1-23.el7_2.src.rpm
<省略>

Ubuntu 1204、Ubuntu 1404

AMIは、以下を利用しています。

ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20150325 (ami-936d9d93)

ubuntu/images/hvm-ssd/ubuntu-precise-12.04-amd64-server-20150930 (ami-0ec1580e)

lsofを利用して調査します。

ubuntu@ip-10-10-10-66:~$ sudo lsof -Pi | grep -e ':22' | grep LISTEN
sshd      941   root    3u  IPv4   8876      0t0  TCP *:22 (LISTEN)
sshd      941   root    4u  IPv6   8878      0t0  TCP *:22 (LISTEN)

プロセスから、プロセスのパスを確認

ubuntu@ip-10-10-10-66:~$ ps -ef | grep 941
root       941     1  0 11:47 ?        00:00:00 /usr/sbin/sshd -D
root      1133   941  0 11:48 ?        00:00:00 sshd: ubuntu [priv]
ubuntu    1227  1188  0 11:53 pts/0    00:00:00 grep --color=auto 941

aptコマンド系では、rpm -qfのようなファイルからのバージョン確認するコマンドがありません。 各プロセスのコマンドオプションを確認しバージョンを確認する必要があります。

ubuntu@ip-10-10-10-66:~$ /usr/sbin/sshd -V
unknown option -- V
OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3, OpenSSL 1.0.1f 6 Jan 2014

sshdにバージョン確認オプションはないのですが、上記のように表示されます。

aptからの確認

ubuntu@ip-10-10-10-66:~$ apt-cache show ssh
Package: ssh
Priority: optional
Section: net
Installed-Size: 29
<省略>
Architecture: all
Source: openssh
Version: 1:6.6p1-2ubuntu2.3
Depends: openssh-client (>= 1:6.6p1-2ubuntu2.3), openssh-server (>= 1:6.6p1-2ubuntu2.3)
Filename: pool/main/o/openssh/ssh_6.6p1-2ubuntu2.3_all.deb
Size: 1114
<省略>

Windows2012

AMIは、Windows_Server-2012-RTM-Japanese-64Bit-Base-2016.03.09 (ami-7b222c15)を利用して確認しています。

Windowsはlsofなんてありませんね。コマンドプロンプトからnetstatとtasklistコマンドで確認します。

C:\Users\Administrator>netstat -aon | findstr 3389
アクティブな接続
プロトコル  ローカル アドレス      外部アドレス           状態            PID
  TCP         0.0.0.0:3389           0.0.0.0:0              LISTENING       1956

  TCP         10.10.10.174:3389      126.131.100.97:63066   ESTABLISHED     1956

  TCP         [::]:3389              [::]:0                 LISTENING       1956

  UDP         0.0.0.0:3389           *:*                                    1956

  UDP         [::]:3389              *:*                                    1956

上記のPIDからプロセスを調査します。

C:\Users\Administrator>tasklist | findstr 1956
svchost.exe                   1956 Services                   0     52,280 K

svchost.exeの場合は、起動時に動作し、複数のサービスを起動するためわからないので以下のコマンドで調査します。

C:\Users\Administrator>tasklist /svc | findstr 1956
svchost.exe                   1956 TermService

C:\Users\Administrator>

参考元

Windowsで該当のコマンドが全くわからなかったので、参考にさせて頂きました。

Windows 7でlsof -i:80と同じようにポート番号からプロセス名を特定するには