如何知道某些PID监听哪些端口?


13

我有某个进程的PID侦听OS X上的某些端口,我需要知道该进程侦听了哪些端口。我该怎么做?

我知道我可以lsof用来了解哪个进程正在监听某个端口,但是我需要执行逆操作。

谢谢。

UPD

OS X使用BSD实用程序,所以我有BSD netstat而不是Linux netstat。Linux netstat-p显示PID的选项,BSD netstat用于-p指定端口,没有显示PID的选项。


您是说要查找进程正在侦听的端口吗?netstat可以为您做到这一点。grep如果要过滤netstat
Centimane

lsof使用不只有一条路。你可以做类似的事情lsof|grep ${PID}。这将粗略地丢弃所有内容,grep并选择其中带有PID的行。由于PID编号错误地匹配了其他值,因此可能会列出一条无关紧要的行,但机会
微乎其微

@戴夫,是的,你正确地跟随我。如我所见,Alack的BSD版本netstat无法显示PID。
shau-kote '16

@MelBurslan,它看起来不是一个很好的解决方案。此外,它并不快-我的MBP需要一些时间。
shau-kote '16

Answers:


13

通过深入阅读,我自己找到了解决方案man lsof。(是的,RT * M仍然有帮助。)感谢@Gilles的瞄准。

解决方法如下: lsof -aPi -p 555(555是PID)。

说明:

  1. -p 指定PID号;
  2. -i 仅显示网络设备;
  3. -a 符合AND以上两个条件(否则将进行“或”运算);
  4. -P 显示端口号(默认情况下为端口名称)。

此外,相应地,一个地址只能使用lsof -aPi4 -p 555lsof -aPi6 -p 55用于IPv4或IP6地址。

如果输出将被另一个程序解析,则-Fn可能会有所帮助。使用此选项lsof将产生“其他程序的输出”,而不是格式化后的输出。lsof -aPi4 -Fn -p 555将输出如下内容:

p554
nlocalhost:4321

PS 我已经在OS X El Capitan上测试了所有功能,但是据我所知,它也可以在Linux上运行。


6

lsof提供有关进程打开的文件的信息,包括网络端口。几乎所有的Unix系统(包括OSX)都可以使用它。

用于UnixRosetta Stone没有列出任何其他工具来在OSX上“将进程匹配到文件或端口”。

要列出监听TCP端口的进程,可以使用

lsof -iTCP -sTCP:LISTEN

lsof -iUDP列出打开了UDP套接字的进程。lsof -i列出所有打开的网络套接字(TCP客户端,TCP服务器和其他IP协议)。


0

如果您想知道哪个端口正在监听,可以使用netstat的-p选项。您需要成为超级用户:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

如果您想了解更多信息,请尝试此链接


关于GNU netstat,我有OS X,因此使用BSD netstat。它用于-p指定TCP / IP端口,并且没有显示PID的选项。
shau-kote '16

0

在FreeBSD上,您可以使用sockstat此信息。我不确定OS X是否具有sockstat,因为我没有Mac。

例如,要查看所有TCPv4连接:

sockstat -4


Alack,sockstat我的Mac上没有命令。:(
shau-kote '16

0

您可以将netstat与grep,awk和sed连接起来,以在Linux和Cygwin上显示端口及其相应的pid:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

更多细节

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.