netstatで開いているネットワークポートを一覧表示するにはどうすればよいですか?


206

ターミナルに開いているネットワークポートを組み込みコマンドで一覧表示したいと思います。私が知っているように、netstat使用するコマンドです。しかし、私はそこから有用な情報を得るのに苦労しています。

開いているポートを一覧表示するにはどうすればよいnetstatですか?この場合に役立つ特定のフラグはありますか?

回答:


309
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)

2
ありがとう!ただし、出力を読むのは非常に難しいlsofですが、感謝します。
ジョナス14年

12
を使用する必要がありますsudo lsof ...。sudoがない場合、lsofは自分が所有するプロセスのみを表示できるため、システムプロセスによって開かれたポートは表示されません。また、lsofにLISTEN状態のポートのみを表示するように指示することにより、grepコマンドをスキップできますsudo lsof -PiTCP -sTCP:LISTEN
ゴードンデイヴィソン14年

1
→grgarside:grep -i "listen"2つの例の中の効果に注意してください。
ダン14年

1
GNU netstatでは、オプションで各ポートを開いたプロセスのpidをリストできます。BSD netstatでもその動作を得る方法はありますか?
クリス

2
私はちょうど、-vフラグがそれをオンにすることが判明しました。pidは最後から2番目の列にあります。
クリス

64

多分あなたはlsofを使用することができます:

lsof -Pn -i4

-i4は、ipv4アドレスとポートのみを表示することを意味します-Pおよび-n高速出力

このような出力

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)

2
このコマンドは何をしますか?
nohillsideの

3
lsof開いているファイルをリストします。ネットワークソケットはファイルとしてカウントされるため、開いている各ネットワークソケット(リッスンまたはアクティブに使用中)はにリストされlsofます。
クレイグトレーダー

それはまた、プロセスIDを示す(netstatのしない)
LIB

1
lsof -Pn -i6IPV6
Jared Burrows

2
少なくとも私のマシンでは、この答えは0.1秒かかりますが、@ grgarsideは28秒以上です。違いは-i4スイッチで、IPv4アドレスのみを確認します。
デイバーCubranic

8

最も簡単な方法は以下を使用することnetstatです:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

…追加のフィルタリングなしで、正しいヘッダーを取得し、両方のサーバーがリッスンし、接続がすでに両方向で確立されていることを確認します。この例では、最初の行は、私のMacからに向けた接続を示してい 17.172.233.109ます。

whois 17.172.233.109

アップルにあると教えてくれました。


6

まず、私はBSDの専門家ではありませんが、OPのように、* nixボックス、またはそれに近いもので次を実行するのと大体同じことを望みました。

netstat -tulpn

MacOSでlsof *およびnetstat *を提供する他の質問/回答を読みましたが、出力がさらにコンパクトなものが必要でした。だから、これは私が簡単にまとめたものです:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

ちょっとやり過ぎですので、適切な測定のために出力に色を追加しました。私はこの巨人を覚えることができないか、タイプしたくないので。それをbash関数に入れて、必要なときに呼び出すだけです。bash関数は次のとおりです。

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

〜/ .bash_profileまたは〜/ .zshrcをソースとするファイルにこれらの便利な関数の小さなコレクションがあります。これはコレクションに追加されています。この見栄えを良く/細かくする他の機会を見るのは面白いでしょう。

サンプル出力:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service

ここにコードとしてフォーマットされたテキストを貼り付けるターミナルボットのgifを投稿しないでください。コピーが難しく、大きなフォントが必要な場合は読みにくい
user151019

画像はgifではなく、単に出力を表示する画面です。クリックスルーすると、PNGであることがわかります。imgur。でホストされていますが、StackExchangeのデフォルトはこれだと思います。とにかく、あなたが別のスクリーンショットを探しているなら、私は再びつかむことができます。
kroolk

コメントでGIFをスクリーンショットに置き換えます。どの形式でも構いません。ポイントは、それがテキストであるべきである
user151019

サンプル出力から長いコマンドを削除してから、実際にスクリーンショットとして機能するようになりました。コピーする必要のあるものは何もないので、以前よりもうまくトリミングできるからです。
mwfearnley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.