GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu zkontrolovat, které porty jsou na mém počítači se systémem Linux obsazené a které volné?

Příkaz

netstat -antu

zobrazí všechny používané porty tcp a udp. Výstup bude vypadat nějak takto:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

Číslo za dvojtečkou v poli Místní adresa ukazuje používaný port. Pokud je stav "LISTEN", znamená to port, který se používá pro příchozí připojení. Pokud je IP adresa v Local Address pole je 0.0.0.0 to znamená, že příchozí připojení budou přijímána na jakékoli IP adrese přiřazené k rozhraní – to znamená z připojení pocházejících mimo váš počítač.

Pokud je tam uvedeno localhost nebo 127.0.0.1 bude přijímat pouze připojení z vašeho počítače.

Navíc, pokud přidáte -p a spusťte jej jako root, zobrazí se proces, který otevřel port:

$ 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

Vše, co není uvedeno jako používané, je zdarma, ale uživatelé (neprivilegované účty) mohou otevřít pouze porty nad 1023.


Sám jsem sestavil malý seznam.

Některé z mých oblíbených jsou:

netstat -tulpn
lsof -i -n -P

Dobrým a spolehlivým způsobem kontroly otevřených portů je použití ss (náhrada za zastaralé netstat ), je použitelný ve skriptu bez nutnosti zvýšených oprávnění (např. sudo ).

Použití:volba -l pro naslouchací porty, volba -n obejít překlad DNS a filtr na zdrojovém portu NN :src :NN (nahraďte NN podle portu, který chcete monitorovat). Další možnosti viz man ss

ss -ln src :NN

Příklady:

[[email protected] ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[[email protected] ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

A ve skriptu pomocí grep můžeme otestovat, zda výstup obsahuje port, který jsme požadovali. Příklad s používaným portem 80 (viz výše):

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)

Příklad s nepoužívaným portem 81 (viz výše)

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)

Linux
  1. Jak zkontrolovat, které moduly Apache jsou povoleny/načteny v Linuxu

  2. Jak zkontrolovat moduly PHP a Apache, které jsou nainstalovány v systému Linux?

  3. Jak zjistit, které časové pásmo v Linuxu?

  1. Jak zkontrolovat otevřené porty v Linuxu pomocí netstat, lsof a nmap

  2. Jak zkontrolovat verzi OS a Linuxu

  3. Zkontrolujte, která služba na daném portu linux naslouchá

  1. Zkontrolujte, jaké porty a procesy běží v Ubuntu

  2. Jak otestovat, na kterém portu MySQL běží a zda se k němu lze připojit?

  3. Jak mohu zkontrolovat, zda je PostgreSQL nainstalován nebo ne prostřednictvím skriptu Linux?