如何使用netstat显示正在侦听端口的进程


27

我在OS X Mountain Lion笔记本电脑上,上面有几个Vagrant盒子。我试图弄清楚哪个进程正在监听8080端口。我的变化产生了大约一百行,但是没有特定的端口号。我假设是这样的:

netstat -XXX | grep 8080

这是在家庭环境还是专业环境中?
卢卡斯·考夫曼

好了,在本地重新创建服务器环境。如果您想移至其他站点,那很好。不同版本的netstat支持不同的参数。
timpone

好的,先生,这里的一切似乎井井有条,请继续并祝您愉快。
卢卡斯·考夫曼

Answers:


52

不幸的是,在OSX上,您受困于BSD netstat,后者不会显示附加到给定端口的进程ID。您要做的是使用lsof。您需要使用的语法是:

lsof -i :8080

这将打印出大量信息,您不需要关心其中的大部分信息,但是这些字段都带有正确的标签。例如,查看此示例输出。

lsof -i :53237
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GoogleTal 927 guest   29u  IPv4 0x2c3f7f95244855c3      0t0  TCP localhost:53237 (LISTEN)

这告诉我进程ID 927正在使用端口53237。读取COMMAND字段时,请记住此输出将被截断,实际上二进制文件的全名是GoogleTalkPlugin。


谢谢,这使我更接近了,VBoxHeadl要讲的很一般-有什么方法可以查看哪个VirtualBox实例(现在有两个),或者我问得太多(可能是后者)。thx
timpone 2013年

@timpone:我对VirtualBox的了解不足,无法帮助您走这条路。您可以检查流程命令行以查看是否在其中列出,或者使用lsof -p PID并浏览打开的文件列表,直到找到它为止。
Scott Pack


8

这是我在查找侦听端口的PID时喜欢使用的东西。对于Linux使用:netstat -tunlp

  • 网络
  • l监听端口
  • p过程
  • t tcp
  • üUDP

其他信息可以在手册页中找到。


-p没有列出程序的参数。我怎么看?
jameshfisher

4
OP询问了OSX。-p在netstat的OSX版本上不是一个选项。
泰德·比格姆

-p在OSX上是port。我讨厌开发人员为OSX和Linux做出不同论点的决定……
Daniel W.


4

对我而言,以下两行最适合显示哪些应用程序已打开侦听端口,并且隧道,lsof是完全跨平台的:

netstat -Watn | grep LISTEN
lsof -Pnl +M -i -cmd | grep LISTEN

1

要查找特定端口,请在netstat命令下面使用

  netstat -an | grep ':8080'

3
OP询问有关获取流程的信息。这不显示进程ID。
Ted Bigham 2015年

1

来自man netstat

-p,--program显示每个套接字所属的程序的PID和名称。

我通常只是这样做:netstat -antup | grep 8080


嗯...这听起来像我想要的,但这给了我OS X上-p的不同选择-p protocol Show statistics about protocol, which is either a well-known name
音2013年

@timpone:-p显示PID的是GNU netstat命令,而OSX使用BSD netstat。
Scott Pack

-p没有列出程序的参数。我怎么看?
jameshfisher

1
OP询问了OSX。-p在netstat的OSX版本上不是一个选项。
泰德·比格姆

-p在OSX上是port。我讨厌开发人员为OSX和Linux做出不同论点的决定……
Daniel W.

0

以下命令显示了连接:

netstat -antop | grep :8080

要实时查看完整的流程,可以使用watch

watch -d -t -n 1 'lsof -n -i :8080'
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.