在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?


当前回答

对于已列出的、已建立的和已关闭的端口

sudo lsof -n -i -P | grep TCP

仅适用于LISTEN端口

sudo lsof -n -i -P | grep LISTEN

对于特定的LISTEN端口,例如:端口80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

或者,如果你只是想要一个简洁的摘要(没有描述服务/应用程序),请使用NETSTAT。好的一面是,不需要sudo

netstat -a -n | grep 'LISTEN '

解释使用的项目:

-n禁止显示主机名

-i表示IPv4和IPv6协议

-P省略端口名

-所有套接字的[over netstat]

-n[over netstat]不解析名称,将网络地址显示为数字

在High Sierra 10.13.3和Mojave 10.14.3上测试最后一个语法netstat也适用于linux

其他回答

您还可以使用:

sudo lsof -i -n -P | grep TCP

这在小牛队奏效。

对于macOS,我使用两个命令一起显示有关在机器上侦听的进程和连接到远程服务器的进程的信息。换句话说,要检查主机上的侦听端口和当前(TCP)连接,可以同时使用以下两个命令

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

我想我会添加我的输入,希望它最终能帮助某人。

直到macOS 13 Ventura,每个版本的macOS都支持此功能:

sudo lsof-iTCP-sTCP:列表-n-P

就我个人而言,我在~/.bash_profile中使用了这个简单的函数:

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

然后,listing命令为您提供了一个在某个端口上侦听的进程列表,并为某个模式侦听smthgreps。

有了这一点,很容易询问特定的进程,例如监听dropbox或端口,例如监听22。

lsof命令有一些专门的选项来询问端口、协议、进程等,但就我个人而言,我发现上面的函数更方便,因为我不需要记住所有这些低级选项。lsof是一个非常强大的工具,但不幸的是使用起来不太舒服。

对MichałKalinowski的回答稍有改进(我没有足够的声誉在那里留下评论):如果您试图发现进程正在监听一个编号为255及以下的端口,grep命令可能会打印与IP地址相关的行,而这些行与期望的结果不符。对于任何编号的端口,grep命令也可能错误地匹配设备的MAC地址或PID。为了改进这一点,我建议将命令更改为grep--color“:$1”

签出此项目/工具:procs

在MacOs上安装:brew安装过程

这允许您控制使用proc显示的内容。

要查看TCP/UDP端口,请在安装工具后将以下内容添加到~/.procs.toml。

[[columns]]
kind = "TcpPort"
style = "BrightYellow|Yellow"
numeric_search = true
nonnumeric_search = false
align = "Left"

[[columns]]
kind = "UdpPort"
style = "BrightGreen|Green"
numeric_search = false
nonnumeric_search = true
align = "Left"

以下是示例输出: