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

tim*_*one 27 networking netstat macos

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

netstat -XXX | grep 8080
Run Code Online (Sandbox Code Playgroud)

Sco*_*ack 55

不幸的是,在 OSX 上,您被 BSD 卡住了,netstat它不会向您显示附加到给定端口的进程 ID。你必须做的是使用lsof. 您需要使用的语法是:

lsof -i :8080
Run Code Online (Sandbox Code Playgroud)

这将打印出大量信息,其中大部分您并不关心,但这些字段已被很好地标记。例如,查看此示例输出。

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

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


小智 8

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

  • 网络
  • l 监听端口
  • 进程
  • tcp
  • 你的UDP

更多信息可以在手册页中找到。

  • OP 询问了 OSX。-p 不是 OSX 版本的 netstat 的选项。 (5认同)

Sea*_*ton 6

我正在netstatOS X 上进行修改以提供此功能,并偶然发现-v将为您提供与套接字关联的 pid的事实。