例如tomcat
(PID是4739
)发起到postgress
(另一台服务器)的连接以从数据库检索数据,因为tomcat
从客户端()收到请求curl 192.168.1.12:8088/get
。在此,tomcat
使用随机 tcpsource port
进行连接postgress
。现在,有什么方法可以获取source ports
由 tomcat 创建的这些内容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>
这应该为您提供 server2 连接到 postgress 时使用的源端口。
答案2
在 Linux 上
netstat -atp
ss -atp
lsof -i tcp
将为您提供 TCP 套接字列表以及netcat
打开了 fd 的进程的 pid(以及除 之外的 fd)(您需要超级用户权限才能获取不属于您的进程的信息),但前提是他们确实有一个开放的FD。
在进程关闭其 fd 到套接字或 shutdown() 连接后,即使只是写入方向,也不再可能获取该信息。您可能仍然会在或TIME_WAIT
的输出中看到处于某种状态的套接字,但据我所知,没有办法返回到具有文件描述符的进程。netstat
ss
在这种情况下,最好的选择可能是记录所有发生的 TCP 连接,例如使用auditctl
审核日志connect()
系统调用。