Ubuntu 8.04でポートが使用可能かどうかを確認するにはどうすればよいですか?


28

ポートが既に開いているかどうかを教えてくれるbashから実行できるコマンドはありますか?

回答:


37

「netstat」を使用して、現在使用しているポートを確認します。

netstat -antp

Proto Recv-Q Send-Qローカルアドレス外部アドレス状態PID /プログラム名
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 /名前付き     

2
「netstat -antp | grep 80」80は検索するポート番号です。
Umair A.

13

これ(netstat)は最速のソリューションです...

netstat -lnt

...しかし、これにより、より多くの制御が可能になります(速度を犠牲にして(場合によってはかなりの速度))...

lsof -n -i -a -u www-data

たとえば、上記の例では、すべてのTCPポートが開いており、Apache()ユーザーに属するLISTENAND(-a)状態になっていwww-dataます。


8

すべての良い答え。

ただし、問題のコンピューターにログオンしているかどうかは言及しません。; P

そうでない場合は、nmapがあなたの友達です。

手始めに:

nmap -Otarget

また、amapは、バナーページを取得してサーバーソフトウェアを推測しようとする場合にも適しています。

手始めに:

amaptarget1-6000


7

試して

lsof -i :<port number>

結果が得られた場合、何かがリスニングされバインドされています。例えば

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

4
netstat -tlnp  

isteningのtcpポートを表示しlnumbersのみを表示し(名前を解決しない-高速にします)、plistenを実行しているプロセスを表示しpます(rootの場合のみ機能します)

netstat -ulnp  

isteningのudpポートを表示しlnumbersのみを表示し(名前を解決しない-高速になります)、plistenを実行しているプロセスを表示しpます(rootの場合のみ機能します)

netstat -unp  

u開いているがリッスンしていないnDP ポートを表示し、アンバーのみを表示し(名前を解決しないでください-高速になります)、pリッスンしているプロセスを表示しpます(ルートの場合のみ機能します)

netstat -an

a使用中のllポートを表示、numbersのみを表示-名前を解決しない

lsof -i <proto>@<host>:<port>

例えば

lsof -i tcp@localhost:25

ポートlocalhost 25 / TCPでリッスンしているかどうかを確認する、または

lsof -i tcp@0.0.0.0:636 

ホスト/インターフェースをリッスン(ローカル)または接続(ローカルまたはリモート)しているローカルまたはリモートのソケットがあるかどうかを確認する


2

lsof(開いているファイルを一覧表示する)は、プロセスがポートでリッスンしているかどうかを確認するのに適したツールです

lsof -P | grep:<ポート番号>

netstatは、アクティブな接続があるかどうかを確認するのに適したツールです。

netstat -n | grep:<ポート番号>


2

使用するプロトコル、つまりTCPまたはUDPについては言及しません。また、「ポート」は、システムがソケットを明確にするためにサポートするほど細かくはないことを認識することも重要です。たとえば、システムに複数のIPアドレスがある場合、ポート80はすべてのIPアドレスで使用されている可能性があります(アプリケーションが「0.0.0.0」または「::」にバインドされているか、各IPアドレスに連続してバインドされている)、またはこれらのIPアドレスのサブセットでのみ使用してください。

ポート/アドレスが空いていて利用可能かどうかを判断する最善かつ確実な方法は、ポート/アドレスにバインドすることです。Netcatはこれに便利です。

nc -l [-s abcd] -p NN

TCPポートNNにバインドしようとします(オプション、デフォルトはすべてのアドレスになります)abcd UDPで同じことを行うには、-uオプションを追加します。

次に、ポートが本当に「開いている」かどうかを確認するために、潜在的なファイアウォールルールを確認する必要があります。繰り返しますが、最も簡単なことは、ポートへの接続を試みることです。上記のようにサーバー上でnetcatを使用し、クライアントからnetcatを使用して、開いたポートへの接続を試みます。

nc [-u] abcd NN

-uフラグが指定されている場合、UDPを使用して、abcdのポートNNに接続します。その後、クライアントエンドに入力を入力すると、サーバーに入力が表示されます。そうでない場合は、システムおよびネットワーク固有のツールを調べる必要があります。


2

フューザー(psmiscパッケージ)を使用します。

fuser -n tcp PORT

このポートにバインドされているプロセスのPIDを戻します。

これがポートがリッスンしているかどうかを知ることである場合、古き良きtelnetがトリックを行います:)

telnet 127.0.0.1ポート


2

このワンライナーは、使用中のすべてのTCPポートのリストを取得します。UbuntuおよびOS Xのbashで動作します。

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

リストには、追加情報なしで1行に1つのポートがあります。


大好きです!bashスクリプトのグレットドロップ、たとえば:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki

0

Linuxやosxで動作しなかったり、Dockerが使用するポートやルートが所有するプロセスが表示されなかったりするため、多くの方法で問題が発生しました。今、私はこのjavascriptプログラムを使用しています:

(ノードがインストールされていることを確認し、それが機能するnodeだけでなくnodejs、それに応じてプログラムを変更する)

check-portパスまたはプロジェクトで呼び出されるファイルに以下を保存します

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

許可を設定する

chmod +x path/to/check-port

あなたの道から走る

check-port 8080

または同じディレクトリから実行する

./check-port 8080

これまでのところ、かなりうまく機能しています。

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