在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?
当前回答
lsof -n -i | awk '{ print $1,$9; }' | sort -u
这显示了谁在做什么。删除-n以查看主机名(速度稍慢)。
其他回答
在macOS Big Sur和更高版本上,使用以下命令:
sudo lsof -i -P | grep LISTEN | grep :$PORT
或者只看到IPv4:
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
对于旧版本,请使用以下表单之一:
sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN
用端口号或逗号分隔的端口号列表替换$PORT。
如果需要有关#1024以下端口的信息,请在sudo前面加上空格。
-n标志用于显示IP地址而不是主机名。这使得命令执行得更快,因为获取主机名的DNS查找可能会很慢(对于许多主机来说几秒钟或一分钟)。
-P标志用于显示原始端口号,而不是解析名称(如http、ftp)或更深奥的服务名称(如dpserve、socalia)。
有关更多选项,请参见注释。
为了完整,因为经常一起使用:
要终止PID:
sudo kill -9 <PID>
# kill -9 60401
我做了一个小脚本,不仅要看谁在哪里听,还要看与哪些国家建立的联系。在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)
这可能有助于检查您是否连接到朝鲜!;-)
灵感来自用户Brent Self:
lsof-i 4-a | grep列表
在macOS上,这里有一个简单的方法,可以通过netstat获取监听特定端口的进程ID。此示例查找端口80上提供内容的进程:
查找端口80上运行的服务器
netstat -anv | egrep -w [.]80.*LISTEN
样本输出
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
最后一列的第二个是PID。在上面,它是715。
选项
-a-显示所有端口,包括服务器使用的端口
-n-显示数字,不要查找名称。这使命令更快
-v-verbose输出,以获取进程ID
-w-搜索单词。否则,命令将返回端口8000和8001的信息,而不仅仅是“80”
LISTEN-仅为LISTEN模式下的端口(即服务器)提供信息
在最新的macOS版本上,可以使用以下命令:
lsof -nP -i4TCP:$PORT | grep LISTEN
如果你觉得很难记住,那么也许你应该创建一个bash函数,并用一个更友好的名称来导出它
vi ~/.bash_profile
然后将以下行添加到该文件并保存。
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
现在,您可以在终端中键入listening_on 80,并查看哪个进程正在侦听端口80。
推荐文章
- Linux相当于Mac OS X的“open”命令
- 如何在Mac上的命令行安装JQ ?
- 在Mac OS X上安装/升级gradle
- 如何在终端中提高光标速度?
- Objective-C中的自动引用计数不能防止或减少什么样的泄漏?
- 如何在Mac OS安装时停止MySQL ?
- PIP成功安装包,但在命令行中找不到可执行文件
- 无法在Mac OS X 10.9上安装Lxml
- 在OS X上使用sed进行就地编辑
- MacVim和普通Vim有什么区别?
- 查看保存的NSUserDefaults的简单方法?
- (Mac) -bash: __git_ps1:命令未找到
- 如何创建Bash别名?
- Java/JDK的苹果硅芯片
- Virtualenvs中的破引用