Hoe kan ik controleren welke poorten bezet zijn en welke vrij op mijn Linux machine?
Is er een commandoregelopdracht of een andere manier om de bezette en vrije poortnummers op mijn Linux-machine te vinden en op te sommen?
Is er een commandoregelopdracht of een andere manier om de bezette en vrije poortnummers op mijn Linux-machine te vinden en op te sommen?
Het commando
netstat -antu
toont alle in gebruik zijnde tcp en udp poorten. De uitvoer zal er ongeveer zo uitzien:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Het getal achter de dubbele punt in het Local Address veld geeft de poort aan die in gebruik is. Als de status “LISTEN” is, betekent dit een poort die wordt gebruikt voor inkomende verbindingen. Als het IP adres in het Local Address
veld 0.0.0.0
is betekent dit dat inkomende verbindingen worden geaccepteerd op elk IP adres dat aan een interface is toegewezen - dit betekent dus van verbindingen die van buiten uw machine komen.
Als het localhost
of 127.0.0.1
zou zijn, dan zou het alleen verbindingen van uw machine accepteren.
Bovendien, als je de parameter -p
toevoegt, en het als root uitvoert, zal het het proces laten zien dat de poort geopend heeft:
$ 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
Alles wat niet getoond wordt als in gebruik is vrij, maar gebruikers (ongeprivilegieerde accounts) kunnen alleen poorten boven 1023 openen.
Een goede en betrouwbare manier om te controleren op geopende poorten is het gebruik van ss
(vervanging voor de deprecated netstat
), het is bruikbaar in een script zonder dat er verhoogde rechten voor nodig zijn (d.w.z. sudo
).
Gebruik: optie -l
voor luisterpoorten, optie -n
om DNS-resolutie te omzeilen, en het filter op bronpoort NN
: src :NN
(vervang NN
door de poort die u wilt monitoren). Voor meer opties, zie man ss
ss -ln src :NN
Voorbeelden:
[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
En in een script, met grep, kunnen we testen of de uitvoer de poort bevat die we gevraagd hebben. Voorbeeld met poort 80 in gebruik (zie boven):
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)
Voorbeeld met poort 81 niet in gebruik (zie boven)
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)
Een andere manier:
telnet localhost <PORT_NUMBER>
Als de poort vrij is krijg je een foutmelding. Als de poort in gebruik is zal telnet verbinding maken.
(gevonden op http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )