Mac OS Xの特定のTCPポートでリッスンしているのは誰ですか?


1382

Linuxでは、netstat -pntl | grep $PORTまたはfuser -n tcp $PORTを使用して、指定されたTCPポートでリッスンしているプロセス(PID)を見つけることができます。Mac OS Xで同じ情報を取得するにはどうすればよいですか?


27
申し訳ありませんが、netstat -p tcp | grep $PORTMac OS Xでのnetstatは、PIDを表示することができないため、PIDを表示しません。
pts

12
netstat -anvMac OS X上のポートを表示します(ソース:@SeanHamilitonによる以下のソリューション)
Curtis Yallop

回答:


2049

macOS High Sierra以降では、次のコマンドを使用します。

lsof -nP -iTCP:$PORT | grep LISTEN

またはIPv4のみを表示するには:

lsof -nP -i4TCP:$PORT | grep LISTEN

古いバージョンでは、次のいずれかの形式を使用します。

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

代入$PORTポート番号またはポート番号のカンマ区切りのリストで。

sudo#1024未満のポートに関する情報が必要な場合は、先頭にスペースを入れてください。

この-nフラグは、ホスト名の代わりにIPアドレスを表示するためのものです。これにより、ホスト名を取得するためのDNSルックアップが遅くなる可能性があるため(多くのホストでは数秒または1分)、コマンドの実行がはるかに速くなります。

この-Pフラグは、のような解決された名前やhttp、のようなftpより難解なサービス名の代わりに、未加工のポート番号を表示するためのものdpserveですsocalia

その他のオプションについては、コメントを参照してください。

完全性のため、頻繁に一緒に使用されるため:

PIDを強制終了するには:

kill -9 <PID>
# kill -9 60401

154
このプレフィックスを前に付けて、sudo所有していないプロセスを表示します。
Gordon Davisson、

30
ライオンに変更を加えて作業sudo lsof -i TCP:$PORT | grep LISTEN
dhaval

58
マウンテンライオンでは、あなたが必要としないgrepsudo lsof -iTCP:$PORT -sTCP:LISTEN
シウチンポン-Asuka Kenji-

16
非常に多くの検索の後、これは最高です。コマンドを直接コピーしたい人は、$ PORTを実際のポート番号に置き換えるか、変数PORTを定義する必要があります。次のような複数のポートについても同様です。export PORT = 8080,4433; lsof -n -i4TCP:$ PORT
siddhusingh 2014年

2
調査するポートが1024を超えている場合は、1つは、sudoを必要としない
stigkj

626

Snow Leopard(10.6)以降、Mojave(10.14)およびCatalina(10,15)まで、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これをいくつかのパターンについて調べます。

これがあれば、特定のプロセス(例listening dropbox)やポート(例)について簡単に尋ねることができlistening 22ます。

lsofコマンドには、ポート、プロトコル、プロセスなどについて尋ねるための特別なオプションがいくつかありますが、これらの低レベルのオプションをすべて覚える必要がないので、個人的には上記の機能がはるかに便利であることがわかりました。lsofは非常に強力なツールですが、残念ながらそれほど快適に使用できません。


7
これは私のドットファイルで起こっています。私は数か月ごとに検索し、常にこの答えに出くわします。
danemacmillan

1
OPが言ったように-pntl、これは受け入れられるべき答えだと私は感じています。受け入れられた回答は、リモートで同じではない1つ以上のポート番号の指定を要求します。
seeafish、

440

次のものも使用できます。

sudo lsof -i -n -P | grep TCP

これはマーベリックスで動作します。


3
-iオプションでは、それはかなり速くなります。0.02秒vs 2秒。私のアプリケーションでは、これがかなりの違いを生みました。
Eric Boehs 14

これらの特定のフラグは-i、-n、-Pで何をしますか。私はそれらが正確に何を意味するのかどこにも見つけることができません
チャドワトキンス

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

「| grep $ PORT」または「| grep LISTEN」を追加することをお勧めします
KC Baltz 2018年

すごい!Mojaveでも動作します。
Gefilte Fish

291

2016年1月の更新

本当に驚いた人は誰も提案していません:

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
このコマンドは、リスナー以外のPIDと、リスナーのみに明示的に求められる質問も表示します。
2016年

3
を実行することもできますlsof -t -i :1338-tプロセスIDを返すので、awk / headする必要はありません。
KFunk 2016

kill -9 $(lsof -t -i :5000)el capitan 以外は何も機能しません
goksel

これは素晴らしい。私はそれを殺す前に何があるかを知りたいので、(これに基づいて)bashrcに追加しました:なのでwhatsonport() { ps -ef | grep `lsof -t -i :$1` }⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
ありがとう、lsof -i :PORT_NUMBER私のために仕事をしました。
marika.daboja


48

LISTEN、ESTABLISHEDおよびCLOSEDポートの場合

sudo lsof -n -i -P | grep TCP

LISTENポートのみ

sudo lsof -n -i -P | grep LISTEN

特定のLISTENポートの場合、例:ポート80

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

または、簡潔な要約だけが必要な場合(サービス/アプリについては説明しません)、NETSTATを使用してください。ここでの良い面は、sudoが必要ないことです。

netstat -a -n | grep 'LISTEN '

使用されているアイテムの説明:

-nホスト名を抑制します

-i(IPv4およびIPv6プロトコルの場合)

-Pポート名を省略

-a [netstatを介して]すべてのソケット

-n [netstatを介して]名前を解決せず、ネットワークアドレスを数値として表示します

High Sierra 10.13.3およびMojave 10.14.3でテスト済み

  • 最後の構文netstatはLinuxでも動作します

詳細な説明は、私のような初心者にとって実際に非常に役立ちます。感謝の@PYK
Tomaz王

46

OS Xでは、netstatの-vオプションを使用して、関連するpidを指定できます。

タイプ:

netstat -anv | grep [.]PORT

出力は次のようになります。

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

PIDは最後の列の前の番号で、この場合は3105です。


grep LISTENリスナーのみを表示するように追加する必要もあります。
2016年

3
これは私が必要なものです!lsofポートが見つかりませんでした。しかしnetstat、それはオープンであることを示しました。-v私が欠けていた秘密のソースでした。
アーロンマクミリン2017年

32

macOSでは、netstatを使用して特定のポートでリッスンしているプロセスIDを取得する簡単な方法を次に示します。この例では、ポート80でコンテンツを提供するプロセスを探します。

ポート80で実行されているサーバーを見つける

netstat -anv | egrep -w [.]80.*LISTEN

出力例

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

最後の列から2番目はPIDです。上記では、それは715です。

オプション

-a -サーバーが使用するポートを含むすべてのポートを表示する

-n-番号を表示し、名前を調べないでください。これにより、コマンドがはるかに速くなります

-v -プロセスIDを取得するための詳細な出力

-w-検索語。それ以外の場合、コマンドは「80」だけでなくポート8000​​および8001の情報を返します

LISTEN -LISTENモードのポート、つまりサーバーのみに情報を提供する


2
-vフラグで
成功

18

最新のmacOSバージョンでは、次のコマンドを使用できます。

lsof -nP -i4TCP:$PORT | grep LISTEN

覚えにくい場合は、bash関数を作成して、わかりやすい名前でエクスポートしてください。

vi ~/.bash_profile

次に、そのファイルに次の行を追加して保存します。

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

これlistening_on 80で、ターミナルに入力して、どのプロセスがポートをリッスンしているかを確認できます80


13

Snow Leopard(OS X 10.6.8)では、「man lsof」を実行すると次の結果が得られます。

lsof -i 4 -a

(実際の手動入力は「lsof -i 4 -a -p 1234」です)

以前の回答はSnow Leopardでは機能しませんでしたが、ptsの回答で「lsof」の使用を確認するまで「netstat -nlp」を使用しようとしました。


10

私はLinuxの人です。Linuxではnetstat -ltpn、これらの文字の組み合わせやそれらの組み合わせは非常に簡単です。しかし、Mac OS X netstat -an | grep LISTENでは最も人道的です。他のものは非常に醜く、トラブルシューティング時に覚えるのが非常に困難です。


2
特定のTCPポートを明示的に要求する質問では、コマンドはすべてのポートのリスナーを表示します。
2016

7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

誰が何をしているかを表示します。ホスト名を表示するには-nを削除します(少し遅い)。


1
あなたの答えは悪くありませんが、それはいくつかの非常に支持された答えと、数年前から受け入れられた答えのある質問です。今後は、最近の質問、特にまだ回答されていない質問に焦点を当ててみてください。

このコマンドは非TCPポートと非リスナーも表示しますか?この質問では、TCPポートのリスナーのみを明示的に要求します。
2014年

lsof(8)のマニュアルページのとおり: If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Misha Tavkhelidze '

@Misha Tavkhelidze:リスナー以外も表示するので、質問には答えません。
2016年

追加-sTCP:LISTENlsof
ミーシャTavkhelidze

3

これは私が必要としたことをしました。

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

1

誰がどこで聞いているかだけでなく、確立されたつながりや国を表示するために小さなスクリプトを作成しました。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)

これは、北朝鮮に接続しているかどうかを確認するのに役立ちます。;-)


0

これはmacOS High Sierraでの良い方法です:

netstat -an |grep -i listen

正解です。受け入れられた答えは実際には正しい方法です... Mac OS Xのnetstatはpidからポートへのマッピングを表示しません。
tr4nc3


0

macOSの場合、2つのコマンドを一緒に使用して、マシンでリッスンしているプロセスとリモートサーバーに接続しているプロセスに関する情報を表示します。つまり、ホストのリスニングポートと現在の(TCP)接続を確認するには、次の2つのコマンドを一緒に使用します。

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

私は私の入力を追加すると思いましたが、うまくいけば、それは誰かを助けることになるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.