netstat -lat
fornisce l'elenco completo degli ascolti e stabilito porti.
Quando una porta non si trova in nessuno di questi stati non esiste per il sistema, quindi non troverai un comando che mostri l'elenco delle porte inutilizzate.
Tieni presente che ci sono 65535 porte, quindi tutto ciò che non è su netstat -lat
è una porta inutilizzata.
Il seguente script bash eseguirà una semplice scansione di tcp porte e farti sapere quali sono aperte e che sono chiusi :
#!/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
Se lo salvi come portscan.sh quindi deve essere eseguito come ./portscan.sh IP first_port last_port , ad esempio:./portscan 127.0.0.1 20 135
eseguirà la scansione dell'apparecchiatura locale dalle porte da 20 a 135
Ruby 2.x (una riga):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Sulla mia macchina in questo momento che ha stampato:
42644
Una successiva invocazione stampava:
36168
Questa tecnica fa sì che l'utente corrente richieda una porta inutilizzata (associazione alla porta "0"), quindi stampa il numero di porta fornito dal sistema operativo. E poiché l'utente corrente è quello che chiede, le porte inferiori a 1024 non verranno restituite (a meno che utente corrente =root).
Il credito è dovuto:questa soluzione viene da un commento di Franklin Yu su unix.stackexchange.com Qual è il modo più semplice per trovare una porta locale inutilizzata?
Breve script bash che genera in modo casuale un numero compreso tra 1025 e 60000 e si ripete fino a quando quel numero non viene trovato nell'elenco delle porte utilizzate. Questa è una soluzione rapida e sporca che ha una propensione per le porte più grandi:
CHECK="do while"
while [[ ! -z $CHECK ]]; do
PORT=$(( ( RANDOM % 60000 ) + 1025 ))
CHECK=$(sudo netstat -ap | grep $PORT)
done
echo $PORT