Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

利用しているポート番号からどのプロセスが利用しているか確認する

More than 3 years have passed since last update.

既にたくさん記事がありますが、メモ。

参考

環境

以下の環境のLinuxサーバーで調べてみました。

  • nginxで80ポートを利用
  • sshdで22ポートを利用
  • PostgreSQLで5432ポートを利用

lsofコマンドで調べる

lsofコマンドは「list open files」ということでプロセスが開いているファイルやディレクトリ(ライブラリなどを含む)とネットワークファイル(インターネットソケットやUNIXドメインソケット)を表示することができるので、ネットワーク調査に使うことができます。

-iオプションを使うことでネットワークで特定ポート番号を使っているものやTCPやUDPプロトコルを使っているプロセスのみの絞り込みが出来ます。

# TCPプロトコルを利用しているものを表示
$sudo lsof -i TCP

# UDPプロトコルを利用しているものを表示
$sudo lsof -i UDP

# 22ポートを使っているものを表示
$sudo lsof -i :22

実際に22ポートを使っているプロセスを確認します。

$sudo lsof -i :22
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2385     root    3u  IPv4   9936      0t0  TCP *:ssh (LISTEN)
sshd    2385     root    4u  IPv6   9938      0t0  TCP *:ssh (LISTEN)
sshd    2932     root    3u  IPv4  13443      0t0  TCP ip-172-31-30-226.ap-northeast-1.compute.internal:ssh->h101-111-248-034.catv02.itscom.jp:35332 (ESTABLISHED)
sshd    2934 ec2-user    3u  IPv4  13443      0t0  TCP ip-172-31-30-226.ap-northeast-1.compute.internal:ssh->h101-111-248-034.catv02.itscom.jp:35332 (ESTABLISHED)

なるほど、COMMAND列でプロセス名が表示されるので、sshdで利用している事が分かります。
また、LISTEN(待ち受けている)ものとESTABLISHED(今現在接続されている)ものが表示されていますね。

PID列でプロセスIDが表示されているのでpsコマンドやpstreeコマンドで対象プロセスの詳細も確認できます。

ちなみにNAME列の部分を見ると受け付けているIPアドレスが分かるようです。

# postgresql.localhost(127.0.0.1)からの接続のみ受付
$sudo lsof -i :5432
COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
postmaste 2896 postgres    3u  IPv4  12859      0t0  TCP localhost:postgres (LISTEN)

# nginx.全てのIPアドレスから受付
$sudo lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   2640  root    6u  IPv4  10923      0t0  TCP *:http (LISTEN)
nginx   2640  root    7u  IPv6  10924      0t0  TCP *:http (LISTEN)
nginx   2641 nginx    6u  IPv4  10923      0t0  TCP *:http (LISTEN)
nginx   2641 nginx    7u  IPv6  10924      0t0  TCP *:http (LISTEN)

netstatコマンドで調べる

以下のようにオプションの指定及びポート番号の指定で確認できます。

  • -aオプション->現在の全ての接続を表示。指定しないとESTABLISHEDな接続のみを表示
  • -pオプション->プロセスIDとプロセス名を表示する
  • -nオプション->ホスト名で表示せず、IPアドレスで表示する(名前解決しない)
$sudo netstat -apn | grep :22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2385/sshd
tcp        0     36 172.31.30.226:22            101.111.248.34:51959        ESTABLISHED 23842/sshd
tcp        0      0 172.31.30.226:22            101.111.248.34:35332        ESTABLISHED 2932/sshd
tcp        0      0 :::22                       :::*                        LISTEN      2385/sshd

一番上に表示されれているのがIPv4、一番下に表示されているのがIPv6ですね。あと2つは既に確立している接続なので先ほどのlsofコマンドと同じ結果です。

(おまけ)UNIXドメインソケットとは?

調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話

netstatコマンドを確認するとTCP/UDPプロトコル以外でもUNIXドメインソケットというものが確認できます。

$sudo netstat -ap --protocol unix
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     12861  2896/postmaster     /tmp/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     12860  2896/postmaster     /var/run/postgresql/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     7897   1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     SEQPACKET  LISTENING     8162   1518/udevd          @/org/kernel/udev/udevd
unix  9      [ ]         DGRAM                    9105   2107/rsyslogd       /dev/log
unix  2      [ ACC ]     STREAM     LISTENING     9240   2147/rpcbind        /var/run/rpcbind.sock
unix  2      [ ACC ]     STREAM     LISTENING     9423   2199/dbus-daemon    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    9316   2168/rpc.statd
unix  3      [ ]         STREAM     CONNECTED     10926  2640/nginx
unix  2      [ ]         DGRAM                    10004  2414/ntpd
unix  2      [ ]         DGRAM                    10106  2443/sendmail: Queu
unix  3      [ ]         STREAM     CONNECTED     40021  24411/sshd
unix  3      [ ]         DGRAM                    8170   1518/udevd
unix  3      [ ]         STREAM     CONNECTED     9432   2199/dbus-daemon    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     40022  24409/sshd
unix  3      [ ]         STREAM     CONNECTED     9427   2199/dbus-daemon
unix  3      [ ]         STREAM     CONNECTED     10927  2640/nginx
unix  2      [ ]         DGRAM                    40017  24409/sshd
unix  3      [ ]         STREAM     CONNECTED     9431   1/init
unix  2      [ ]         DGRAM                    40572  24538/sudo
unix  3      [ ]         STREAM     CONNECTED     9426   2199/dbus-daemon
unix  2      [ ]         DGRAM                    12443  2034/dhclient
unix  3      [ ]         DGRAM                    8171   1518/udevd
unix  2      [ ]         DGRAM                    10127  2455/crond
unix  2      [ ]         DGRAM                    10085  2434/sendmail

同一マシンのみのプロセス間通信しかできませんが、TCP/UDPと比べて遥かに高速に動作させることができるようです。
IPアドレスの指定ではなく、ファイル名で指定します。
例えば上記ではPostgreSQLでは/tmp/.s.PGSQL.5432を利用している事が分かります。

時間のある時にもう少し調べてみます。

toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。
http://toshihirock.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away