在Linux上,可以使用netstat -pntl | grep $PORT
或fuser -n tcp $PORT
命令来查找监听特定TCP端口的进程(PID)。在Mac OS X上如何获取相同的信息?
我是一个Linux的爱好者。在Linux中,使用netstat -ltpn
或任何这些字母的组合都非常容易。但在Mac OS X中,netstat -an | grep LISTEN
最为人性化。其他方法很丑陋且在故障排除时难以记住。
看一下这个项目/工具:procs
在MacOS上安装:brew install procs
这允许您使用procs
控制要显示什么内容。
要查看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"
以下是一个样例输出:
lsof -n -i | awk '{ print $1,$9; }' | sort -u
此处显示谁在做什么。去掉 -n 可以看到主机名(速度略慢)。
-sTCP:LISTEN
to lsof
- Misha Tavkhelidze这个做了我需要的事情。
ps -eaf | grep `lsof -t -i:$PORT`
我编写了一个小脚本,不仅可以查看谁在哪里收听,还可以显示已建立的连接及其所在国家。该脚本适用于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 -an |grep -i listen
对于 macOS,我使用两个命令来显示有关在机器上侦听的进程和连接到远程服务器的进程的信息。换句话说,要检查主机上的侦听端口和当前(TCP)连接,您可以同时使用以下两个命令:
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
我想添加我的意见,希望能对某人有所帮助。
lsof -i 4 -a | grep LISTEN
该命令用于列出所有正在监听 IPv4 端口的进程。这是对Michał Kalinowski的回答进行的轻微改进(我没有足够的声望在那里留下评论):如果您正在尝试查找侦听编号为255及以下的端口的进程,则grep
命令可能会打印与IP地址相关的行,而这些行不对应所需的结果。对于任何编号的端口,grep
命令也可能错误地匹配设备的MAC地址或PID。为了改进这一点,我建议将命令更改为grep --color ":$1 "
netstat -anv
显示 Mac OS X 上的端口(来源:@SeanHamiliton 的下面解决方案)。 - Curtis Yallop