netstatコマンドで特定のポートで通信しているプロセスを調べる(Linux/Windows)

ポートを開いているプロセスまで調べる方法についてのメモ。

Linuxの場合

-aでLISTEN状態も含むすべてのソケットを表示する、-nIPアドレス・ポート番号をそのまま表示する、-pで対応するプロセスを表示する。

$ sudo netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1370/sshd
...
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  3      [ ]         STREAM     CONNECTED     9599   1391/sshd
...

あるいは、lsofコマンドを使ってもよい。-iで通信のみを表示する、-nPIPアドレス・ポート番号をそのまま表示する。 また、-i:80 (tcp/80)、-iudp:123 (udp/123) のように指定することで特定のポートに絞り込むことができる。

$ sudo lsof -i -nP
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1370    root    3u  IPv4   9355      0t0  TCP *:22 (LISTEN)
...

Windowsの場合

すべての情報を表示するために、コマンドプロンプトを右クリックメニューから管理者権限で開いた上で実行する。 -aですべての接続を表示する、-nIPアドレス・ポート番号をそのまま表示する、-oで対応するプロセスを表示する。

C:\>netstat -ano

アクティブな接続

  プロトコル  ローカル アドレス          外部アドレス        状態           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       496
...

-bをつけると、対応する実行ファイル名を下に表示できる。ただし、この処理には時間がかかる。

C:\>netstat -anob

アクティブな接続

  プロトコル  ローカル アドレス          外部アドレス        状態           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       396
  RpcSs
 [svchost.exe]
...

たとえば上からは、svchost.extのRpcSsがtcp/135で接続を待ち受けていることがわかる。 サービスの詳細は、scコマンドを使うことで調べられる。

C:\>sc qc RpcSs
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: RpcSs
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\svchost.exe -k rpcss
        LOAD_ORDER_GROUP   : COM Infrastructure
        TAG                : 0
        DISPLAY_NAME       : Remote Procedure Call (RPC)
        DEPENDENCIES       : RpcEptMapper
                           : DcomLaunch
        SERVICE_START_NAME : NT AUTHORITY\NetworkService

C:\>sc qdescription RpcSs
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: RpcSs
説明:  RPCSS サービスは、COM および DCOM サーバーのサービス コントロール マネー
ジャーです。COM および DCOM サーバーに対して、オブジェクト アクティブ化要求、オ
ブジェクト エクスポーターの解決、および分散ガベージ コレクションを実行します。こ
のサービスが停止しているか無効になっている場合、COM または DCOM を使用するプログ
ラムは正常に機能しません。RPCSS サービスを実行しておくことを推奨します。

あるいは、Ctrl+Shift+ESCでタスクマネージャーを開き、「サービス」タブを見ると、このサービスが「Remote Procedure Call (RPC)」であることがわかる。 さらに、「コントロールパネル」→「管理ツール」→「サービス」から、このサービスの詳細を調べることができる。