たとえば、tomcat
(PIDは4739
)クライアント()から要求を受信したpostgress
ため、データベースからデータを取得するために(他のサーバー)への接続を開始します。ここでは、任意のTCPを使用して接続します。今、tomcatで生成されたこれらのコンテンツを取得する方法はありますか?tomcat
curl 192.168.1.12:8088/get
tomcat
source port
postgress
source ports
PID
使いましたが接続netstat -tp
できませんPID
。PID
私が使用したものだけがl - Listening
好きですnetstat -tlp
。PID
ソケットから読み込んで/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ソケットリストとnetcat
fdが開いているプロセスのpid(およびそれ以外のfd)を提供します(自分に属していないプロセスに関する情報を取得するにはスーパーユーザー権限が必要です)。彼らは公開FDを持っています。
プロセスが fd-ソケット接続または shutdown() 接続を閉じた後、書き込み方向でのみこの情報を取得できなくなります。または、出力から一部の状態のソケットをTIME_WAIT
見ることができますが、私が知っている限り、ファイル記述子を使用してプロセスに戻る方法はありません。netstat
ss
この場合、最良のオプションは、auditctl
監査ログconnect()
システムコールなどを使用して発生したすべてのTCP接続を記録することです。