谁正在监听Mac OS X上给定的TCP端口?

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

根据您的Mac OS X版本,使用下列之一:

 lsof -n -i4TCP:$PORT | grep LISTEN lsof -n -iTCP:$PORT | grep LISTEN lsof -n -i:$PORT | grep LISTEN 

使用端口号或逗号分隔的端口号列表replace$PORT

如果您需要#1024以下端口的信息,请预先安装sudo (后跟一个空格)。

-n标志用于显示IP地址而不是主机名。 这使命令执行速度更快,因为DNS查找获取主机名可能很慢(对于许多主机而言,几秒钟或一分钟)。

请参阅评论以获取更多选项。

你也可以使用:

 sudo lsof -i -n -P | grep TCP 

这在小牛队工作。

自从优胜美地(10.10)以来,每个版本的macOS都支持这一点:

 sudo lsof -iTCP -sTCP:LISTEN -n -P 

2016年1月更新

真的很惊讶没有人提出过:

 lsof -i :PORT_NUMBER 

获得所需的基本信息。 例如,检查端口1337:

 lsof -i :1337 

其他变化,根据情况:

 sudo lsof -i :1337 lsof -i tcp:1337 

您可以轻松地在此基础上提取PID本身。 例如:

 lsof -t -i :1337 

这也相当于这个命令的结果:

 lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID 

快速插图:

在这里输入图像描述

为了完整性,因为经常一起使用:

要杀死PID:

 kill -9 <PID> # kill -9 60401 

或作为一个class轮:

 kill -9 $(lsof -t -i :1337) 

这在小牛(OSX 10.9.2)中有效。

 sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN 

在OS X上,您可以使用netstat的-v选项给出关联的pid。

types:

 netstat -anv | grep [.]PORT 

输出将如下所示:

 tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0 

PID是最后一列之前的数字,3105是这种情况

在雪豹(OS X 10.6.8)上运行'man lsof'会产生:

 lsof -i 4 -a 

(实际手动input是'lsof -i 4 -a -p 1234')

以前的答案在Snow Leopard上不起作用,但是我试图使用“netstat -nlp”,直到我在“答案”中看到“lsof”的使用。

 lsof -n -i | awk '{ print $1,$9; }' | sort -u 

这显示谁在做什么。 删除-n查看主机名(有点慢)。

我是一个Linux的家伙。 在Linux中,使用netstat -ltpn或这些字母的任何组合都非常容易。 但是在Mac OS X中, netstat -an | grep LISTEN netstat -an | grep LISTEN是最人性化的。 其他人在进行故障排除时非常难看,非常难记。

这做了我所需要的。

 ps -eaf | grep `lsof -t -i:$PORT` 

我做了一个小小的脚本,不仅可以看到谁在监听,还可以显示已build立的连接和哪个国家。 适用于OSX Siera

 #!/bin/bash printf "\nchecking established connections\n\n" for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | cut -d ">" -f2 | cut -d"<" -f1 done printf "\ndisplaying listening ports\n\n" sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35 #EOF 

 Sample output checking established connections 107.178.244.155 : United States 17.188.136.186 : United States 17.252.76.19 : United States 17.252.76.19 : United States 17.188.136.186 : United States 5.45.62.118 : Netherlands 40.101.42.66 : Ireland 151.101.1.69 : United States 173.194.69.188 : United States 104.25.170.11 : United States 5.45.62.49 : Netherlands 198.252.206.25 : United States 151.101.1.69 : United States 34.198.53.220 : United States 198.252.206.25 : United States 151.101.129.69 : United States 91.225.248.133 : Ireland 216.58.212.234 : United States displaying listening ports mysqld TCP *:3306 (LISTEN) com.avast TCP 127.0.0.1:12080 (LISTEN) com.avast TCP [::1]:12080 (LISTEN) com.avast TCP 127.0.0.1:12110 (LISTEN) com.avast TCP [::1]:12110 (LISTEN) com.avast TCP 127.0.0.1:12143 (LISTEN) com.avast TCP [::1]:12143 (LISTEN) com.avast TCP 127.0.0.1:12995 (LISTEN) com.avast [::1]:12995 (LISTEN) com.avast 127.0.0.1:12993 (LISTEN) com.avast [::1]:12993 (LISTEN) Google TCP 127.0.0.1:34013 (LISTEN) 

这可能是有用的,以检查你是否连接到朝鲜! 😉

Interesting Posts