GNU/Linux >> Linux Esercitazione >  >> Linux

Come controllare le porte di ascolto in Linux (porte in uso)

Durante la risoluzione dei problemi di connettività di rete o di problemi specifici dell'applicazione, una delle prime cose da controllare dovrebbe essere quali porte sono effettivamente in uso sul tuo sistema e quale applicazione è in ascolto su una porta specifica.

Questo articolo spiega come utilizzare netstat , ss e lsof comandi per scoprire quali servizi sono in ascolto su quali porte. Le istruzioni sono applicabili a tutti i sistemi operativi basati su Linux e Unix come macOS.

Cos'è la porta di ascolto #

La porta di rete è identificata dal numero, dall'indirizzo IP associato e dal tipo di protocollo di comunicazione, come TCP o UDP.

La porta di ascolto è una porta di rete su cui un'applicazione o un processo è in ascolto, fungendo da endpoint di comunicazione.

Ciascuna porta di ascolto può essere aperta o chiusa (filtrata) utilizzando un firewall. In termini generali, una porta aperta è una porta di rete che accetta i pacchetti in arrivo da posizioni remote.

Non puoi avere due servizi in ascolto sulla stessa porta sullo stesso indirizzo IP.

Ad esempio, se stai eseguendo un server Web Apache in ascolto sulle porte 80 e 443 e provi a installare Nginx, il successivo non si avvierà perché le porte HTTP e HTTPS sono già in uso.

Controlla le porte di ascolto con netstat #

netstat è uno strumento da riga di comando in grado di fornire informazioni sulle connessioni di rete.

Per elencare tutte le porte TCP o UDP su cui sono in ascolto, inclusi i servizi che utilizzano le porte e lo stato del socket, utilizzare il comando seguente:

sudo netstat -tunlp

Le opzioni utilizzate in questo comando hanno il seguente significato:

  • -t - Mostra le porte TCP.
  • -u - Mostra le porte UDP.
  • -n - Mostra gli indirizzi numerici invece di risolvere gli host.
  • -l - Mostra solo le porte di ascolto.
  • -p - Mostra il PID e il nome del processo dell'ascoltatore. Queste informazioni vengono mostrate solo se esegui il comando come root o sudouser.

L'output sarà simile a questo:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      929/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      534/mysqld          
tcp6       0      0 :::80                   :::*                    LISTEN      515/apache2         
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd            
tcp6       0      0 :::25                   :::*                    LISTEN      929/master          
tcp6       0      0 :::33060                :::*                    LISTEN      534/mysqld          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           966/dhclient  

Le colonne importanti nel nostro caso sono:

  • Proto - Il protocollo utilizzato dal socket.
  • Local Address - L'indirizzo IP e il numero di porta su cui è in ascolto il processo.
  • PID/Program name - Il PID e il nome del processo.

Se vuoi filtrare i risultati, usa il grep comando. Ad esempio, per trovare quale processo è in ascolto sulla porta TCP 22, digitare:

sudo netstat -tnlp | grep :22

L'output mostra che su questa macchina la porta 22 è utilizzata dal server SSH:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd

Se l'output è vuoto significa che nulla è in ascolto sulla porta.

Puoi anche filtrare l'elenco in base a criteri, ad esempio PID, protocollo, stato e così via.

netstat è obsoleto e sostituito con ss e ip , ma è comunque uno dei comandi più utilizzati per controllare le connessioni di rete.

Controlla le porte di ascolto con ss #

ss è il nuovo netstat . Manca parte del netstat funzionalità, ma espone più stati TCP ed è leggermente più veloce. Le opzioni di comando sono per lo più le stesse, quindi la transizione da netstat a ss non è difficile.

Per ottenere un elenco di tutte le porte in ascolto con ss dovresti digitare:

sudo ss -tunlp

L'output è quasi lo stesso di quello riportato da netstat :

State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                        
LISTEN   0        128              0.0.0.0:22             0.0.0.0:*      users:(("sshd",pid=445,fd=3))                                                        
LISTEN   0        100              0.0.0.0:25             0.0.0.0:*      users:(("master",pid=929,fd=13))                                                     
LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=534,fd=30))                                                     
LISTEN   0        128                    *:80                   *:*      users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))   
LISTEN   0        128                 [::]:22                [::]:*      users:(("sshd",pid=445,fd=4))                                                        
LISTEN   0        100                 [::]:25                [::]:*      users:(("master",pid=929,fd=14))                                                     
LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=534,fd=33))

Controlla le porte di ascolto con lsof #

lsof è una potente utilità della riga di comando che fornisce informazioni sui file aperti dai processi.

In Linux, tutto è un file. Puoi pensare a un socket come a un file che scrive sulla rete.

Per ottenere un elenco di tutte le porte TCP in ascolto con lsof digita:

sudo lsof -nP -iTCP -sTCP:LISTEN

Le opzioni utilizzate sono le seguenti:

  • -n - Non convertire i numeri di porta in nomi di porta.
  • -p - Non risolvere nomi host, mostrare indirizzi numerici.
  • -iTCP -sTCP:LISTEN - Mostra solo i file di rete con stato TCP LISTEN.
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)
sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)
apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)
apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)
master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)

La maggior parte dei nomi delle colonne di output sono autoesplicativi:

  • COMMAND , PID , USER - Il nome, il pid e l'utente che esegue il programma associato alla porta.
  • NAME - Il numero di porta.

Per trovare quale processo è in ascolto su una porta particolare, ad esempio, porta 3306 useresti:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

L'output mostra che il server MySQL utilizza la porta 3306 :

COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)

Per ulteriori informazioni, visita la pagina man di lsof e leggi tutte le altre potenti opzioni di questo strumento.

Conclusione #

Ti abbiamo mostrato diversi comandi che puoi utilizzare per verificare quali porte sono in uso sul tuo sistema e come trovare quale processo è in ascolto su una porta specifica.

Se hai domande o commenti, lascia un commento qui sotto.


Linux
  1. Come usare BusyBox su Linux

  2. Come uso cron in Linux

  3. Come utilizzare Advanced rsync per backup Linux di grandi dimensioni

  4. Controlla quale servizio è in ascolto su una determinata porta Linux

  5. Controlla l'uso della porta in Linux

Come eseguire una scansione delle porte in Linux

Come controllare le porte aperte in Linux

Come verificare che una porta sia aperta su un sistema Linux remoto

Come trovare e chiudere le porte aperte in Linux

Come utilizzare Netcat per scansionare le porte aperte in Linux

Come controllare le porte aperte in Linux?