web-dev-qa-db-ja.com

誰がMac OS Xの特定のTCPポートをクリックしていますか?

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

1141
pts

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ルックアップが遅くなる可能性があるため(多くのホストでは数秒または1分)、コマンドの実行速度が大幅に向上します。

-Pフラグは、httpftpなどの解決された名前、またはdpservesocaliaなどの非公式のサービス名の代わりに、未加工のポート番号を表示するためのものです。

他のオプションについてはコメントを見てください。

1727
pts

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コマンドはあるポートでlistenしているプロセスのリストをあなたに与え、そしてlistening smthはあるパターンに対してこれをgrepsします。

これがあると、特定のプロセスについて尋ねるのはとても簡単です。 listening dropbox、またはport、例えばlistening 22

lsofコマンドには、ポート、プロトコル、プロセスなどについて尋ねるための特殊なオプションがいくつかありますが、これらの低レベルのオプションをすべて覚えておく必要はないので、個人的に上記の関数ははるかに便利です。 lsofは非常に強力なツールですが、残念ながらあまり使い勝手がよくありません。

441

また使用することができます:

Sudo lsof -i -n -P | grep TCP

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

415
Rog182

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

クイックイラスト:

enter image description here

完全性のために、しばしば一緒に使われるので:

PIDを殺すには:

kill -9 <PID>
# kill -9 60401

またはワンライナーとして:

kill -9 $(lsof -t -i :1337)
261
arcseldon

これはMavericks(OSX 10.9.2)で動作します。

Sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
Charley Wu

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

タイプ:

netstat -anv | grep [.]PORT

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

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

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

35
Sean Hamilton

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モードのポート、すなわちサーバの情報のみを表示します

31
johntellsall

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はホスト名を抑制します

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

- Pポート名を省略

すべてのソケットで - a[over netstat]

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

High Sierra10.13.3およびモハーベ10.14.3でテスト済み

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

  • lsofDebianベースで試すことができます。apt-get install lsof

26
PYK

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

lsof -nP -i4TCP:$PORT | grep LISTEN

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

vi ~/.bash_profile

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

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

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

17
arturgrigor

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'を使用しようとしていました。

12
Brent Self

私はLinuxの人です。 Linuxでは、netstat -ltpnまたはそれらの文字の任意の組み合わせで非常に簡単です。しかし、Mac OS Xではnetstat -an | grep LISTENが最も人道的です。トラブルシューティングの際に覚えておくのが非常に醜くて非常に難しいものもあります。

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

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

7

これで私は必要なことができました。

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

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

netstat -an |grep -i listen
0
tr4nc3

私は、誰がどこで聞いているのかだけでなく、確立された接続とどの国への接続を表示するのかを確認するための小さなスクリプトを作成しました。 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
0x00

ユーザーBrent Selfに触発された:

lsof -i 4 -a | grep LISTEN

0
Punnerud

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

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

私は自分の意見を付け加えると思っていましたが、うまくいけばそれは誰かを助けることになる可能性があります。

0
Boschko