netstat -lat
リスニングの完全なリストを提供します そして確立 ポート。
ポートがこれらの状態のいずれにもない場合、システムには存在しないため、未使用のポートのリストを表示するコマンドは見つかりません。
65535 個のポートがあることに注意してください。したがって、netstat -lat
にないものはすべて は未使用のポートです。
次の bash スクリプトは tcp の単純なスキャンを行います どのポートが開いているかを知らせてくれます 閉じている :
#!/bin/bash
IP=$1
first_port=$2
last_port=$3
function scanner
{
for ((port=$first_port; port<=$last_port; port++))
do
(echo >/dev/tcp/$IP/$port)> /dev/null 2>&1 && echo $port open || echo "$port closed"
done
}
scanner
portscan.sh として保存する場合 ./portscan.sh IP first_port last_port として実行する必要があります。 、例:./portscan 127.0.0.1 20 135
ポート 20 から 135 までのローカル機器をスキャンします
Ruby 2.x (ワンライナー):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
現在、私のマシンでは次のように印刷されています:
42644
印刷された後続の呼び出し:
36168
この手法では、現在のユーザーが未使用のポートを要求し (ポート "0" にバインド)、オペレーティング システムが提供するポート番号を出力します。また、現在のユーザーが要求しているため、1024 未満のポートは返されません (現在のユーザー =root でない限り)。
クレジットが必要な場合のクレジット - このソリューションは、unix.stackexchange.com の未使用のローカル ポートを見つける最も簡単な方法は何ですか?
1025 から 60000 の間の番号をランダムに生成し、その番号が使用ポートのリストに見つからなくなるまでループする短い bash スクリプト。これは、より大きなポートに偏っている簡単で汚いソリューションです:
CHECK="do while"
while [[ ! -z $CHECK ]]; do
PORT=$(( ( RANDOM % 60000 ) + 1025 ))
CHECK=$(sudo netstat -ap | grep $PORT)
done
echo $PORT