コマンド
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 を超えるポートしか開くことができません。
私は自分で小さなリストをまとめました.
私のお気に入りのいくつかは次のとおりです:
netstat -tulpn
lsof -i -n -P
開いているポートを確認するための適切で信頼できる方法は、 ss
を使用することです (非推奨の netstat
の置き換え )、昇格された特権を必要とせずにスクリプトで使用できます (つまり、 sudo
).
使い方:オプション -l
リッスン ポートの場合、オプション -n
DNS 解決をバイパスし、送信元ポート NN
のフィルター :src :NN
(NN
を置き換えます 監視するポートによって)。その他のオプションについては、man ss
を参照してください
ss -ln src :NN
例:
[[email protected] ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[[email protected] ~]# 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)