2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

Linuxマシンでどのポートがビジー状態でどのポートが空いているかを確認するにはどうすればいいですか?

私のLinuxマシン上のビジーポート番号とフリーポート番号を検索してリストアップするコマンドラインコマンドや他の方法はありますか?

回答 (4)

42
42
42
2011-12-23 13:11:39 +0000

コマンド

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

ローカルアドレスフィールドのコロンの後の数字は、使用中のポートを示します。状態が “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以上のポートしか開けません。

13
13
13
2012-10-12 06:02:01 +0000

(http://adhocshare.blogspot.com/2012/10/find-list-of-open-ports-listening-ports.html)自分で編纂した[ 小さなリスト ]0x3&。

私のお気に入りは以下の通りです。

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

開かれたポートをチェックする良い確実な方法は、ss ( 非推奨 netstat の代替) を使うことで、スクリプト内で高度な権限を必要とせずに使用できます (つまり sudo)。

使用法: リスニングポート用のオプション-l、DNS解決をバイパスするためのオプション-n、ソースポートNNのフィルタ。src :NN (NN を監視したいポートに置き換えてください)。その他のオプションについては、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)
3
3
3
2014-06-30 08:25:41 +0000

別の方法:

telnet localhost <PORT_NUMBER>

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

( http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html で見つけた)

関連する質問

6
10
7
5
7