如何确定给定进程(linux)正在打开哪些 TCP/UDP 端口?

如何确定给定进程(linux)正在打开哪些 TCP/UDP 端口?

我知道如何使用 lsof 或 netstat 做相反的事情(找出哪个进程打开了给定的端口),但是在 Google 上进行广泛的研究并没有帮助我解决相反的问题。

我知道我可以将“netstat -np”与一些 grep 和 sed 结合使用,但这似乎有点不靠谱。有没有“lsof -i tcp:80”的反向版本可以显示给定进程打开的所有本地端口?

答案1

查看手册页,您会发现可以使用-p选项指定进程 ID,以及选项-i将显示限制为 Internet 域套接字(-i4仅适用于 ipv4 和-i6仅适用于 ipv6)。所以如果你把它们串在一起...

lsof -p <pid> -i

...你得到的并不是你想要的,因为默认情况lsof或者合并您的请求。因此添加-a() 旗帜...

lsof -p <pid> -a -i

...您将获得由指定进程 ID 打开的 IPv4 套接字列表。

答案2

我知道我可以netstat -np结合使用一些 grep 和 sed,但这似乎很不方便。

这个怎么样:

# netstat --inet -nlp | grep <processname>

是否有一个反向版本lsof -i tcp:80可以向我显示给定进程打开的所有本地端口?

# lsof -c <processname> | grep LISTEN

相关内容