プロセス(PID)によって開始された接続を取得する方法

プロセス(PID)によって開始された接続を取得する方法

たとえば、tomcat(PIDは4739)クライアント()から要求を受信したpostgressため、データベースからデータを取得するために(他のサーバー)への接続を開始します。ここでは、任意のTCPを使用して接続します。今、tomcatで生成されたこれらのコンテンツを取得する方法はありますか?tomcatcurl 192.168.1.12:8088/gettomcatsource portpostgresssource portsPID

使いましたが接続netstat -tpできませんPIDPID私が使用したものだけがl - Listening好きですnetstat -tlpPIDソケットから読み込んで/proc/PID/fd接続しようとしましたが、/proc/net/tcp何も表示されませんでした/proc/net/tcp

メモ:トポロジは次のとおりです。

My requests(server1)<---------> tomcat(server2)<--------->postgress(server2)

アップデート1 netstat -tepn出力

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp6       0      1 172.25.30.21:36598      xx.xx.xx.91:4343     SYN_SENT    0          42955126    9661/java
tcp6       0      0 172.25.30.21:38340      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38064      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38282      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37520      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38286      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37654      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37906      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38152      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38124      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37412      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37374      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38126      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38252      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37224      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37800      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37780      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38274      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37244      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37880      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38230      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38118      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:37496      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:1099       172.25.30.21:47496      ESTABLISHED 0          42954824    4738/java
tcp6       0      0 172.25.30.21:37474      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38200      172.25.30.12:5432       TIME_WAIT   0          0           -
tcp6       0      0 172.25.30.21:38102      172.25.30.12:5432       TIME_WAIT   0          0           -

PID grep出力の編集

veeru@localhost:~/veeru# netstat -tepn | grep 4738
tcp6       0      0 127.0.1.1:41095         127.0.0.1:45180         ESTABLISHED 0          42960213    4738/java       
tcp6       0      0 172.25.30.21:1099       172.25.30.21:49984      ESTABLISHED 0          42963153    4738/java 

答え1

netstat -tep | grep <pid of server2>

これにより、postgressに接続するときにserver2が使用するソースポートが提供されます。

答え2

Linuxで

  • netstat -atp
  • ss -atp
  • lsof -i tcp

TCPソケットリストとnetcatfdが開いているプロセスのpid(およびそれ以外のfd)を提供します(自分に属していないプロセスに関する情報を取得するにはスーパーユーザー権限が必要です)。彼らは公開FDを持っています。

プロセスが fd-ソケット接続または shutdown() 接続を閉じた後、書き込み方向でのみこの情報を取得できなくなります。または、出力から一部の状態のソケットをTIME_WAIT見ることができますが、私が知っている限り、ファイル記述子を使用してプロセスに戻る方法はありません。netstatss

この場合、最良のオプションは、auditctl監査ログconnect()システムコールなどを使用して発生したすべてのTCP接続を記録することです。

関連情報