2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

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?

Antwoorden (4)

42
42
42
2011-12-23 13:11:39 +0000

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.

13
13
13
2012-10-12 06:02:01 +0000

Ik heb zelf een kleine lijst samengesteld.

Enkele van mijn favorieten zijn:

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

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)
3
3
3
2014-06-30 08:25:41 +0000

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 )