lsof 和监听端口

lsof 和监听端口

我正在尝试让所有进程在 Mac OS X 上侦听网络连接。netstat没有该-p选项,我正在尝试使用 lsof

lsof -i -sTCP:LISTEN

给了我一个公平的聆听过程列表,但不是全部。例如,我可以 telnet 到端口 10080,其中有一个进程正在侦听连接,但这没有显示在lsof.我缺少什么?

$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.

$ sudo lsof -n -i | grep 10080
$

答案1

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

... | wc -l在我经常使用的 Lion MBP 上,所有这些都返回相同的 32 个条目 ( )。

-P -n阻止lsof进行名称解析,并且它不会阻塞。缺少其中任何一个,速度都可能会非常慢。

对于 UDP:sudo lsof -iUDP -P -n | egrep -v '(127|::1)'.如果没有-n-P,则需要很长时间。

提醒:这不包括防火墙设置。

答案2

sudo lsof -nP -iTCP -sTCP:监听

此命令显示所有网络文件,并在所有开放端口上使用 TCP 协议进行侦听。

sudo lsof -nP -iTCP: 5432-sTCP:LISTEN

此命令仅显示正在侦听的端口5432


答案3

我写了这个 shell 函数,你可以把它粘贴进去,~/.bashrc它会给你一个很好的报告:

ports() {
    (
        echo 'PROC PID USER x IPV x x PROTO BIND PORT'
        (
            sudo lsof +c 15 -iTCP -sTCP:LISTEN -P -n | tail -n +2
            sudo lsof +c 15 -iUDP -P -n | tail -n +2 | egrep -v ' (127\.0\.0\.1|\[::1\]):'
        ) | sed -E 's/ ([^ ]+):/ \1 /' | sort -k8,8 -k5,5 -k1,1 -k10,10n
    ) | awk '{ printf "%-16s %-6s %-9s %-5s %-7s %s:%s\n",$1,$2,$3,$5,$8,$9,$10 }'
}

相关内容