web-dev-qa-db-ja.com

Linuxマシンでどのポートが使用中で、どのポートが空いているかを確認するにはどうすればよいですか?

Linuxマシンで使用中のポート番号と空きポート番号を見つけて一覧表示するためのコマンドラインコマンドやその他の方法はありますか?

28
Jeegar Patel

コマンド

netstat -antu

使用中のすべてのTCPおよびUDPポートを表示します。出力は次のようになります。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

Local Addressフィールドのコロンの後の番号は、使用中のポートを示します。状態が「LISTEN」の場合は、着信接続に使用されているポートを意味します。 Local AddressフィールドのIPアドレスが0.0.0.0の場合、それは着信接続がインターフェースに割り当てられた任意のIPアドレスで受け入れられることを意味します - したがってこれはあなたのマシンの外側から始まる接続からの意味です。

localhostまたは127.0.0.1と言っていても、あなたのマシンからの接続しか受け付けていないでしょう。

さらに、-pパラメータを追加してrootとして実行すると、ポートを開いたプロセスが表示されます。

$ Sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN      860/rpc.statd

使用中として示されていないものは無料ですが、ユーザー(非特権アカウント)は1023を超えるポートしか開くことができません。

41
Paul

私は 小さなリスト を自分でコンパイルしました。

私のお気に入りの中には:

netstat -tulpn
lsof -i -n -P
13
robin

開かれたポートを確認するための良い信頼できる方法はssdeprecatednetstatの代わりに使う)を使うことです。 Sudo)。

使用法:リスニングポート用のオプション-l、DNS解決を回避するためのオプション-n、およびソースポートNN上のフィルター:src :NNNNをモニターしたいポートに置き換えます)。その他のオプションについては、man ssを参照してください。

ss -ln src :NN

例:

[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

そしてスクリプトで、grepを使って、出力が要求したポートを含んでいるかどうかをテストすることができます。使用中のポート80の例(上記を参照)

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

ポート81が使用されていない例(上記参照)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)
7
Thomas

別の方法:

telnet localhost <PORT_NUMBER>

ポートが空いているとエラーになります。ポートが使用中の場合はtelnetが接続します。

で見つけられますnot.html

3
Algiz