猿问

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

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

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



潇湘沐
浏览 732回答 3
3回答

收到一只叮咚

在macOS High Sierra上,使用以下命令:lsof -nP -i4TCP:$PORT | grep LISTEN在旧版本上,使用以下形式之一:lsof -nP -iTCP:$PORT | grep LISTENlsof -nP -i:$PORT | grep LISTEN$PORT用端口号或逗号分隔的端口号列表替换。sudo如果您需要有关#1024以下端口的信息,请前置(后跟空格)。该-n标志用于显示IP地址而不是主机名。这使得命令执行速度更快,因为获取主机名的DNS查找可能很慢(许多主机需要几秒或一分钟)。该-P标志是用于显示原始的端口号,而不是解决的名字,如http,ftp或像更深奥的服务名称dpserve,socalia。有关更多选项,请参阅注释。

holdtom

从Snow Leopard(10.6)到Mojave(10.14),每个版本的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为某些模式greps这个。有了这个,很容易询问特定的过程,例如listening dropbox,或端口,例如listening 22。lsof命令有一些专门的选项来询问端口,协议,进程等,但我个人发现上面的功能更方便,因为我不需要记住所有这些低级选项。lsof是一个非常强大的工具,但不幸的是使用起来不那么舒服。

拉丁的传说

真的很惊讶没有人建议:lsof&nbsp;-i&nbsp;:PORT_NUMBER获得所需的基本信息。例如,检查端口1337:lsof&nbsp;-i&nbsp;:1337其他变化,取决于具体情况:sudo&nbsp;lsof&nbsp;-i&nbsp;:1337lsof&nbsp;-i&nbsp;tcp:1337您可以轻松地在此基础上提取PID本身。例如:lsof&nbsp;-t&nbsp;-i&nbsp;:1337这也与此命令等效(结果):lsof&nbsp;-i&nbsp;:1337&nbsp;|&nbsp;awk&nbsp;'{&nbsp;print&nbsp;$2;&nbsp;}'&nbsp;|&nbsp;head&nbsp;-n&nbsp;2&nbsp;|&nbsp;grep&nbsp;-v&nbsp;PID为了完整性,因为经常一起使用:杀死PID:kill&nbsp;-9&nbsp;<PID>#&nbsp;kill&nbsp;-9&nbsp;60401或作为一个班轮:kill&nbsp;-9&nbsp;$(lsof&nbsp;-t&nbsp;-i&nbsp;:1337)
随时随地看视频慕课网APP
我要回答