在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?
当前回答
我是一个Linux人。在Linux中,使用netstat-ltpn或这些字母的任何组合都非常容易。但在Mac OS X netstat中,grep LISTEN是最人性化的。其他的非常难看,在排除故障时很难记住。
其他回答
直到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是一个非常强大的工具,但不幸的是使用起来不太舒服。
您还可以使用:
sudo lsof -i -n -P | grep TCP
这在小牛队奏效。
我做了一个小脚本,不仅要看谁在哪里听,还要看与哪些国家建立的联系。在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)
这可能有助于检查您是否连接到朝鲜!;-)
在OS X上,可以使用netstat的-v选项来提供相关的pid。
类型:
netstat -anv | grep [.]PORT
输出将如下所示:
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0
PID是最后一列之前的数字,在本例中为3105
这是我所需要的。
ps -eaf | grep `lsof -t -i:$PORT`
推荐文章
- 警告用户/local/mysql/data目录不属于mysql用户
- UDP和TCP比起来快多少?
- 在Mac OS X上使用鼠标聚焦(加上自动提升)
- 我在哪里可以找到Mac OS X Lion的“make”程序?
- 当我没有Mac的时候,在Mac/Safari上测试web应用程序
- 在Mac上安装MySQL后,使用ALTER USER语句重置MySQL root密码
- my.cnf文件在macOS上的位置
- 如何从Mac OS X上卸载MySQL ?
- 查找当前可执行文件的路径,不包含/proc/self/exe
- 在Mac上安装R -警告消息:设置LC_CTYPE失败,使用“C”
- 为什么cURL返回错误“(23)Failed writing body”?
- 节点和错误:EMFILE,打开的文件太多
- TCP连接的最大数据包大小
- 如何使用命令行工具为Mac OS X创建一个漂亮的DMG ?
- 由于环境错误无法安装包:[Errno 13]