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


68

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

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


奇妙なことにss、netlinkソケットを除き、PIDでのフィルタリングはありません。
poige

回答:


56

ssiproute2パッケージから使用できます(これはに似ていますnetstat)。

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

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

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

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


3
あります-u-tUDBまたはTCPだけのために。:1:これらはすべてのようにのように積み重ねることができます:ss -tlnp、幅出力、埋める排除するために、私は迷惑を見つける猫以下またはW / Eかかわらすることができますパイプ:ss -tlnp | cat
ThorSummoner

1
私は習慣になりました。ss -nlp | cat大まかに言って、リスニングプロセス(-l)、ポート番号(-n)、およびプロセス情報(-p)を表示し、出力をシェルに合わせようとしないでください| cat(またはそれ以下)。それに慣れるのにたった2年しかかかりませんでした:D
ソーサマー

(Debian 9で)私のために働きませんでした。そこで、 "、pid = 1234、"をgrepする必要があります
-ofrommel

@ofrommelはヒントをありがとう-私は答えを適合させました。
ジョフェル

また、これはルート権限でのみ機能します:)
ofrommel

56

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)

ここからこのコマンドを取得しましたが、ノートブックにすべてのメモが記載されているため、正確なリンクはわかりません。しかし、そこからもチェックアウトできます。


13

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

1
netstatiproute2ツールによって非推奨になったことを知らされましたが、それを避けたいと思っています。
ThorSummoner 14

12

@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)

:基本的なリストはWikipediaでここにもあるhttp://en.wikipedia.org/wiki/Iproute2

参照資料


1

lsofPIDを知らず、プログラムの名前だけを知っている場合の別の方法:

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

動作しませんlsofUbuntuの16.04で4.89
palik

1
それは、プログラムが複数のプロセスを生成した場合に当てはまります。その場合、lsofコマンドを実行するときに特定のPIDを指定する必要があります。 pgrep <program name>次に、上記のコマンドに必要なPIDを選択します。交換$(pgrep [programName])のPID#で
cryptoboy

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.