lsofおよびリスニングポート

lsofおよびリスニングポート

Mac OS Xでネットワーク接続を受信するためにすべてのプロセスを取得しようとしています。netstatそのオプションがない場合は、-plsofを使用しようとします。

lsof -i -sTCP:LISTEN

私にリスニングセッションの公正なリストを提供しましたが、すべてではありません。たとえば、接続をリッスンするプロセスがあるポート10080にTelnetを接続できますが、これは表示されません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

私はこのシェル関数を書いた。これを貼り付けると、~/.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 }'
}

関連情報