web-dev-qa-db-ja.com

プロセスPIDがリッスンしているポートをリストしますか(できればiproute2ツールを使用)?

PIDが現在リッスンしているすべてのポートを一覧表示しようとしています。

プロセスに関するこの種のデータをどのように取得することをお勧めしますか?

73
ThorSummoner

Iproute2パッケージのssを使用できます(これはnetstatに似ています):

ss -l -p -n | grep "pid=1234,"

または(古いiproute2バージョンの場合):

ss -l -p -n | grep ",1234,"

1234をプログラムのPIDに置き換えます。

64
jofel

iproute2ツールの使い方を知りません。しかし、回避策として、これを試すことができます。

lsof -Pan -p PID -i

あなたが探している情報をあなたに与えるはずです。


出力

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 Apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 Apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 Apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)

私はこのコマンドを here から取得しましたが、すべてのノートをノートに書き留めているため、正確なリンクはわかりません。しかし、そこからチェックアウトすることもできます。

60
Ramesh

これにnetstatを使用すると、各リッスンプロセスのpidを把握できます。

netstat-ネットワーク接続、ルーティングテーブル、インターフェース統計、マスカレード接続、およびマルチキャストメンバーシップを出力します

-a、--allリスニングと非リスニングの両方のソケットを表示します(TCPこれは確立された接続を意味します)ソケット。--interfacesオプションを使用すると、マークされていないインターフェースを表示します

--numeric、-nシンボリックホスト、ポート、またはユーザー名を特定する代わりに、数値アドレスを表示します。

-p、--program各ソケットが属するプログラムのPIDと名前を表示します。

次に例を示します。

# 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:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/Java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/Java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd
14
Raza

@ jofelの答え は、使用する適切なツールssを示しています。これは、iproute2の他のネットワークツールの代替品です。

非推奨のコマンドとそれらに対応するiproute2は次のとおりです。

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)

基本的なリストはウィキペディアにもあります: http://en.wikipedia.org/wiki/Iproute2

参考文献

12
slm

lsofのもう1つの方法は、PIDがわからない場合はプログラムの名前だけです。

lsof -Pa -p $(pgrep [programName]) -i
1
cryptoboy

試しましたか、これも同じです

netstat -plnt | grep 27071

success

0
TheExorcist