web-dev-qa-db-ja.com

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

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

28
Codebeef

「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/named 
37
Caterpillar

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

netstat -lnt

...しかし、これはより多くの制御を提供します(速度を犠牲にして(時には速度を大幅に))...

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

上記の例は、すべてのTCPポートが開いており、LISTEN状態で、かつ(-a)Apache(www-data)ユーザー。

13
Xerxes

すべての良い答え。

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

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

初心者のために試してください:

nmap -Otarget

amap も、バナーページを取得してサーバーソフトウェアを推測しようとする優れた選択肢です。

初心者のために試してください:

amaptarget1-6000

8
Matthew

試す

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)
7
Dave Cheney
netstat -tlnp  

tisteningであるlcpポートを表示し、numbersのみを表示し(名前を解決しない-高速化)、実行中のprocessを表示しますリスニング(pはrootである場合にのみ機能します)

netstat -ulnp  

uistingであるldpポートを表示し、numbersのみを表示し(名前を解決しない-高速化)、実行中のprocessを表示しますリスニング(pはrootである場合にのみ機能します)

netstat -unp  

開いているがリッスンしていないudpポートを表示し、numbersのみを表示し(名前を解決しない-高速化)、リスニングを実行しているprocessを表示します( pはrootである場合にのみ機能します)

netstat -an

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

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

例えば

lsof -i tcp@localhost:25

ポートlocalhost 25/TCPで待機しているものがあるかどうかを確認する、または

lsof -i [email protected]:636 

ローカルまたはリモートのいずれかのソケットが存在するかどうかを確認するために、任意のホスト/インターフェースをリスニング(ローカル)または接続(ローカルまたはリモート)します。

4
Jason Tan

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

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

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

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

2
Jamie

fuserを使用します(psmiscパッケージ内):

fuser -n tcp PORT

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

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

telnet 127.0.0.1 PORT

2
Oct

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

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

nc -l [-s a.b.c.d] -p NN

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

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

nc [-u] a.b.c.d NN

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

2
colmmacc

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

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

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

2
Josiah Johnston

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

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

0
Alex028502