Linuxで開いているポートのリストを取得する


191

アプリケーションで使用するためにすべての空きオープンポートを一覧表示するにはLinuxコマンドが必要です

lsof -i TCP| fgrep LISTEN

リストされているポートは必ずしも無料で使用できるわけではないため、役立っているとは思われません。使用されていない空きオープンポートを一覧表示するにはどうすればよいですか?

回答:


258
netstat -lntu

@askmishが返信したように、tcpポートとudpポートでシステムで実行されているサービスのリストが表示されます。

  • -l =あるポートでリッスンしているサービスのみ
  • -n =ポート番号を表示、サービス名を解決しようとしない
  • -t = TCPポート
  • -u = udpポート
  • -p =プログラムの名前

どのポートが空いていて、どのプログラムが実行されているかを取得することにのみ関心があるため、「p」パラメーターは必要ありません。

ただし、これはシステム上のどのポートが使い果たされているかのみを示します。これは、NATの背後にいて、一部のサービスに外部からアクセスできるようにする場合など、ネットワークのステータスを通知しません。または、ファイアウォールが外部訪問者のポートをブロックしている場合。その場合、nmapが助けになります。警告:nmapは、管理下にあるネットワークでのみ使用してください。また、nmap pingをブロックできるファイアウォールルールがあります。正しい結果を得るには、オプションをいじる必要があります。


19
これnetstatは多くのシステムで非推奨であり、ss代わりに使用する必要があることに注意してください。
-Johu

1
ただし、busyboxを使用している場合ssは含まれません
jcollum

90

以来net-tools廃止されて、あなたが使用できるssコマンドを代わりにnetstatあればnetstatあなたのマシン上に存在しません。

ss -lntu

と同様に動作するはずです

netstat -lntu

組み込みのヘルプによると:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
もう1つの便利なフラグは、ソケットのプロセスIDを示す-pです。
Talespin_Kit

21

このコマンドは、開いているネットワークポートとそれらを所有するプロセスを一覧表示します。

netstat -lnptu

その後、結果を正確な仕様に合わせてフィルタリングできます。

nmapポートに関するより詳細な結果を得るためにも使用できます。


2
-pフラグは一部のプロセスにルート権限を必要とするため、次のようになりますsudo netstat -lnptu
klaus se 14年

5

応答トラフィックを含む開いているすべてのポート:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
リストだけ:固有のポート番号と、IPv4のみnetstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
アーロンC.デBruyn

結果から数値をフィルタリングして抽出する方法を示すために+1。netstatからstderr出力を削除するように編集されました(Ubuntuの結果にヘッダーが追加されます)。
データシャマン16

うーん、考え直して。質問に答えない場合は-1。
データシャマン16

1

元の質問に対する私の見解は、現在サービスに接続されているポートではなく、未使用のポートについて尋ねていたことです。この場合、使用されているポートをリストし、他のポートが未使用であると想定する以外に、それらをリストする特定の方法はありません。

留意すべきもう1つのポイントは、ユーザーとして1024未満のポートを開くことはできないということです(そのためにはroot権限が必要です)。


0

次のコマンドは、Ubuntu / Debianと同じ形式で出力されるUnixで機能します。ローカルアドレスは4列目にあり、出力の上部に2行のヘッダーが含まれています。これらの数値のいずれかが異なる場合、以下のawkコマンドを微調整します。

IPv4のみが必要な場合:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

IPv6のみが必要な場合:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

両方を一緒にしたい場合:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

このコマンドは、すべてのインターフェースでリッスンしているポート番号のリストを出力します。localhostインターフェイスでリッスンしているすべてのポートを一覧表示する場合は、次のようなものを使用します。

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

試してみる

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

これを見てください。

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