回答:
コマンド
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
フィールドのIPアドレスが0.0.0.0
それである場合、インターフェースに割り当てられたIPアドレスで着信接続が受け入れられることを意味します。つまり、これはマシンの外部から発信された接続からのものを意味します。
それが言った場合、localhost
または127.0.0.1
あなたのマシンからの接続のみを受け入れる場合。
さらに、-p
パラメーターを追加してルートとして実行すると、ポートを開いたプロセスが表示されます。
$ 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を超えるポートのみを開くことができます。
-antu
と書くことができる-tuna
🐟
開いているポートを確認するための優れた信頼性の高い方法は、使用することss
(非推奨の 代替netstat
)であり、昇格した特権を必要とせずにスクリプトで使用できます(例:)sudo
。
使用法:-l
ポートをリッスンするオプション-n
、DNS解決をバイパスするオプション、およびソースポートのフィルター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)
別の方法:
telnet localhost <PORT_NUMBER>
ポートが空いている場合、エラーが発生します。ポートが使用中の場合、telnetが接続します。