首页 文章

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

提问于
浏览
1032

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

15 回答

  • 0

    Update January 2016

    真的很惊讶没有人建议:

    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)
    
  • 2
    lsof -n -i | awk '{ print $1,$9; }' | sort -u
    

    这表明谁在做什么 . 删除-n以查看主机名(稍慢) .

  • 79

    这就是我需要的 .

    ps -eaf | grep `lsof -t -i:$PORT`
    
  • 0

    我制作了一个小剧本,不仅要看谁在哪里听,还要看到已 Build 的联系以及哪些国家 . 适用于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)
    

    这可能有助于检查您是否连接到朝鲜! ;-)

  • 7

    在OS X上,您可以使用netstat的-v选项来提供关联的pid .

    类型:

    netstat -anv | grep [.]PORT
    

    输出将如下所示:

    tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0
    

    PID是最后一列之前的数字,对于这种情况是3105

  • 377

    在macOS High Sierra上,使用以下命令:

    lsof -nP -i4TCP:$PORT | grep LISTEN
    

    在旧版本上,使用以下形式之一:

    lsof -nP -iTCP:$PORT | grep LISTEN
    lsof -nP -i:$PORT | grep LISTEN
    

    用端口号或逗号分隔的端口号列表替换 $PORT .

    如果您需要有关#1024以下端口的信息,请前置 sudo (后跟空格) .

    -n 标志用于显示IP地址而不是主机名 . 这使得命令执行得更快,因为获取主机名的DNS查找可能很慢(对于许多主机来说,几秒或一分钟) .

    -P 标志用于显示原始端口号而不是像 httpftp 这样的已解析名称或更多深奥的服务名称,如 dpservesocalia .

    有关更多选项,请参阅注释 .

  • 28

    这适用于Mavericks(OSX 10.9.2) .

    sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
    
  • 397

    这是macOS High Sierra的好方法:

    netstat -an |grep -i listen
    
  • 239

    我是一个Linux人 . 在Linux中,使用 netstat -ltpn 或这些字母的任意组合非常容易 . 但在Mac OS X中 netstat -an | grep LISTEN 是最人性化的 . 其他人非常难看,在排除故障时很难记住 .

  • 1562

    您还可以使用:

    sudo lsof -i -n -P | grep TCP
    

    这适用于小牛队 .

  • 12

    在macOS上,这里's an easy way to get the process ID that'用netstat监听特定端口 . 此示例查找在端口80上提供内容的进程:

    查找在端口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 - 仅为LISTEN模式下的端口提供信息,即服务器

  • 30

    在最新的macOS版本上,您可以使用此命令:

    lsof -nP -i4TCP:$PORT | grep LISTEN
    

    如果您发现很难记住,那么也许您应该创建一个 bash 函数并将其导出为更友好的名称,如此

    vi ~/.bash_profile
    

    然后将以下行添加到该文件并保存 .

    function listening_on() {
        lsof -nP -i4TCP:"$1" | grep LISTEN
    }
    

    现在,您可以在终端中键入 listening_on 80 ,并查看哪个进程正在侦听端口 80 .

  • 1

    在Snow Leopard(OS X 10.6.8)上,运行'man lsof'产生:

    lsof -i 4 -a
    

    (实际手动输入是'lsof -i 4 -a -p 1234')

    之前的答案对Snow Leopard没有用,但是我试图使用'netstat -nlp',直到我看到pts在答案中使用'lsof' .

  • 10

    对于LISTEN,ESTABLISHED和CLOSED端口

    sudo lsof -n -i -P | grep -i TCP
    

    仅适用于LISTEN端口

    sudo lsof -n -i -P | grep -i LISTEN
    

    对于特定的LISTEN端口,例如:端口80

    sudo lsof -n -i -P | grep -i ":80 (LISTEN)"
    

    或者,如果您只是想要一个紧凑的摘要[没有描述服务/应用]

    netstat -an | grep -i listen
    

    在High Sierra 10.13.3上进行测试

  • 15

    自Yosemite(10.10), up to Mojave (10.14) 以来,每个版本的macOS都支持:

    sudo lsof -iTCP -sTCP:LISTEN -n -P
    

相关问题