netstat -lat
poskytuje úplný seznam poslechu a založena porty.
Když port není v žádném z těchto stavů, systém pro systém neexistuje, takže nenajdete příkaz, který by zobrazil seznam nepoužívaných portů.
Mějte na paměti, že existuje 65535 portů, takže vše, co není na netstat -lat
je nepoužívaný port.
Následující bash skript provede jednoduchou kontrolu tcp porty a dejte vám vědět, které jsou otevřené a které jsou zavřené :
#!/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
Pokud jej uložíte jako portscan.sh pak musí být spuštěn jako ./portscan.sh IP first_port last_port , například:./portscan 127.0.0.1 20 135
bude skenovat místní zařízení z portů 20 až 135
Ruby 2.x (one-liner):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Na mém počítači právě vytištěno:
42644
Vytištěno následné vyvolání:
36168
Tato technika způsobí, že aktuální uživatel požádá o nepoužívaný port (svázání s portem "0") a poté vytiskne číslo portu poskytnuté operačním systémem. A protože se ptá aktuální uživatel, porty pod 1024 nebudou vráceny (pokud aktuální uživatel =root).
Kredit tam, kde je splatný kredit – toto řešení pochází z komentáře Franklina Yu na unix.stackexchange.com's Jaký je nejjednodušší způsob, jak najít nepoužívaný místní port?
Krátký bash skript, který náhodně generuje číslo mezi 1025 a 60000 a opakuje se, dokud toto číslo není nalezeno v seznamu použitých portů. Toto je rychlé a špinavé řešení, které má sklon k větším portům:
CHECK="do while"
while [[ ! -z $CHECK ]]; do
PORT=$(( ( RANDOM % 60000 ) + 1025 ))
CHECK=$(sudo netstat -ap | grep $PORT)
done
echo $PORT