Linuxマシンで使用中のポート番号と空きポート番号を見つけて一覧表示するためのコマンドラインコマンドやその他の方法はありますか?
コマンド
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を超えるポートしか開くことができません。
開かれたポートを確認するための良い信頼できる方法はss
( deprecatednetstat
の代わりに使う)を使うことです。 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)