在Linux上,我可以使用netstat -pntl | grep $PORT
或fuser -n tcp $PORT
找出哪个进程(PID)在指定的TCP端口上侦听。如何在Mac OS X上获得相同的信息?
netstat -anv
显示Mac OS X上的端口(来源:@SeanHamiliton的解决方案)
在Linux上,我可以使用netstat -pntl | grep $PORT
或fuser -n tcp $PORT
找出哪个进程(PID)在指定的TCP端口上侦听。如何在Mac OS X上获得相同的信息?
netstat -anv
显示Mac OS X上的端口(来源:@SeanHamiliton的解决方案)
Answers:
在macOS High Sierra及更高版本上,使用以下命令:
lsof -nP -iTCP:$PORT | grep LISTEN
或仅查看IPv4:
lsof -nP -i4TCP:$PORT | grep LISTEN
在旧版本上,使用以下形式之一:
lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN
$PORT
用端口号或逗号分隔的端口号列表代替。
sudo
如果需要有关#1024以下端口的信息,请加前缀(后跟空格)。
该-n
标志用于显示IP地址而不是主机名。这使命令执行起来快得多,因为获取主机名的DNS查找可能很慢(对于许多主机来说,是几秒钟或一分钟)。
该-P
标志用于显示原始端口号,而不是已解析的名称(例如http
,ftp
或更深奥的服务名称,例如dpserve
)socalia
。
请参阅注释以获取更多选项。
为完整起见,因为经常一起使用:
杀死PID:
kill -9 <PID>
# kill -9 60401
sudo
以查看您不拥有的进程。
sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
从Snow Leopard(10.6)到Mojave(10.14)和Catalina(10,15),每个macOS版本都支持以下功能:
sudo lsof -iTCP -sTCP:LISTEN -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
}
然后,listening
命令为您提供了在某个端口上侦听的进程列表,并listening smth
针对某些模式对此进行了摸索。
有了这个,就很容易询问特定的过程,例如listening dropbox
或端口,例如listening 22
。
lsof
命令有一些用于询问端口,协议,进程等的专用选项。但是我个人发现上述功能更为方便,因为我不需要记住所有这些低级选项。lsof
是一个非常强大的工具,但不幸的是使用起来并不方便。
-pntl
,它将列出所有服务。接受的答案要求指定一个或多个端口号,这与远程端口号不同。
您还可以使用:
sudo lsof -i -n -P | grep TCP
这适用于小牛。
-i
选项使其速度大大提高。0.02秒vs 2秒 在我的应用程序中,差异很大。
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
或作为一个班轮:
kill -9 $(lsof -t -i :1337)
lsof -t -i :1338
。-t
将返回进程ID,因此您不必awk / head。
kill -9 $(lsof -t -i :5000)
在埃尔卡皮坦
whatsonport() { ps -ef | grep `lsof -t -i :$1` }
,所以:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
为我做了一份工作。
这在Mavericks(OSX 10.9.2)中有效。
sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
对于LISTEN,ESTABLISHED和CLOSED端口
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省略端口名称
-a [通过netstat]用于所有套接字
-n [通过netstat]不解析名称,将网络地址显示为数字
在High Sierra 10.13.3和Mojave 10.14.3 上测试
- 最后一种语法netstat在Linux上也适用
在macOS上,这是一种使用netstat获取在特定端口上侦听的进程ID的简便方法。本示例查找在端口80上提供内容的进程:
netstat -anv | egrep -w [.]80.*LISTEN
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
最后一列的第二个是PID。在上面是715。
-a
-显示所有端口,包括服务器使用的端口
-n
-显示数字,不要查找姓名。这使命令快很多
-v
-详细输出,以获取进程ID
-w
-搜索词。否则,该命令将返回端口8000和8001的信息,而不仅仅是“ 80”
LISTEN
-仅提供侦听模式下的端口信息,即服务器
lsof -n -i | awk '{ print $1,$9; }' | sort -u
这显示谁在做什么。删除-n以查看主机名(慢一点)。
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
至lsof
我编写了一个小脚本,不仅可以查看谁在哪里监听,还可以显示已建立的联系以及与哪些国家的联系。在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)
这对于检查您是否已连接到朝鲜很有用!;-)
netstat -p tcp | grep $PORT
由于Mac OS X上的netstat无法显示PID,因此不会显示PID。