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


回答:


41

コマンド

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を超えるポートのみを開くことができます。


これは、インターフェイスに割り当てられたIPアドレスで着信接続が受け入れられることを意味します。つまり、これは、マシンの外部からの接続からのもので、ここでエラーが発生しなかったことを意味します。おそらく、接続が特定のインターフェイスに割り当てられたアドレスに到達した場合、その発信元に関係なく、接続が受け入れられることを意味していました。着信接続の発信元は、おそらく次の列「外部アドレス」で指定されます。ですから、値として0.0.0.0があれば、マシンの外部を含むどこからでも接続が受け入れられることを意味します
-user907860

1
@ user907860明確ではないかもしれませんが、私が行っている違いは0.0.0.0と127.0.0.1の間です。後者は未ルーティングのIPアドレスでリッスンしているため、マシンからの接続のみを受け入れます。0.0.0.0はマシン上の任意のアドレスを意味するため、ルーティングされる場合は、他のマシンから接続できます。
ポール

ちょうどFYI、-antuと書くことができる-tuna🐟
Abdennour TOUMI


7

開いているポートを確認するための優れた信頼性の高い方法は、使用すること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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.