netstat -lat
gibt die vollständige Liste von Zuhören und etabliert Häfen.
Wenn sich ein Port in keinem dieser Zustände befindet, existiert er für das System nicht, sodass Sie keinen Befehl finden werden, der die Liste der nicht verwendeten Ports anzeigt.
Denken Sie daran, dass es 65535 Ports gibt, also alles, was nicht auf netstat -lat
ist ist ein ungenutzter Port.
Das folgende Bash-Skript führt einen einfachen Scan von tcp durch Ports und lassen Sie wissen, welche offen sind und die geschlossen sind :
#!/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
Wenn Sie es als portscan.sh speichern dann muss es als ./portscan.sh IP first_port last_port ausgeführt werden , zum Beispiel:./portscan 127.0.0.1 20 135
scannt die lokale Ausrüstung von den Ports 20 bis 135
Ruby 2.x (Einzeiler):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Auf meiner Maschine wurde gerade Folgendes gedruckt:
42644
Ein nachfolgender Aufruf gedruckt:
36168
Diese Technik bewirkt, dass der aktuelle Benutzer einen unbenutzten Port anfordert (an Port „0“ binden) und dann die vom Betriebssystem bereitgestellte Portnummer ausgibt. Und da der aktuelle Benutzer derjenige ist, der nachfragt, werden Ports unter 1024 nicht zurückgegeben (außer aktueller Benutzer =root).
Ehre, wem Ehre gebührt – diese Lösung stammt aus einem Kommentar von Franklin Yu auf unix.stackexchange.com:„Was ist der einfachste Weg, einen ungenutzten lokalen Port zu finden?“
Kurzes Bash-Skript, das zufällig eine Zahl zwischen 1025 und 60000 generiert und so lange wiederholt, bis diese Zahl nicht in der Liste der verwendeten Ports gefunden wird. Dies ist eine Quick-and-Dirty-Lösung, die größere Ports bevorzugt:
CHECK="do while"
while [[ ! -z $CHECK ]]; do
PORT=$(( ( RANDOM % 60000 ) + 1025 ))
CHECK=$(sudo netstat -ap | grep $PORT)
done
echo $PORT