GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare quale servizio è in ascolto su una porta particolare

Questa guida spiega alcuni modi diversi per trovare quale servizio è in ascolto su una particolare porta in Linux. La maggior parte di voi conosce la porta predefinita di servizi o processi popolari. Ad esempio, la porta predefinita di Apache è 80, la porta predefinita FTP è 21 e la porta predefinita SSH è 22. Puoi trovare i nomi e i numeri delle porte in Linux come descritto in questa guida . I numeri di porta predefiniti possono anche essere modificati con qualsiasi porta personalizzata per proteggere un server Linux. Ad esempio, le seguenti guide descrivono come modificare la porta predefinita di Apache, FTP e SSH in una porta diversa.

  • Come cambiare la porta predefinita di Apache in una porta personalizzata
  • Come cambiare la porta FTP predefinita in una porta personalizzata
  • Come cambiare la porta predefinita SSH in una porta personalizzata

Se il numero di porta predefinito viene modificato, come scopriresti quale servizio è in ascolto su quale porta? Questo è quello che scopriremo ora!

Trova quale servizio è in ascolto su una porta particolare in Linux

Di seguito ho elencato quattro metodi per verificare quale servizio è in esecuzione in un determinato numero di porta. Continuerò ad aggiornare questo elenco se in futuro mi imbatterò in nuovi metodi. Quindi, aggiungilo ai segnalibri e controllalo di tanto in tanto.

Metodo 1:utilizzo di netstat

Questo è il modo più comunemente usato per trovare quale servizio è in ascolto su quale porta. Netstat è un'utilità della riga di comando utilizzata per stampare connessioni di rete, tabelle di routing, statistiche dell'interfaccia, connessioni mascherate e appartenenze multicast.

Netstat è disponibile nei repository predefiniti della maggior parte delle distribuzioni Linux.

Per installarlo su Arch Linux e le sue varianti, fai:

$ sudo pacman -S net-tools

Su CentOS, RHEL:

$ sudo yum install net-tools

Su Fedora:

$ sudo dnf install net-tools

Su Debian, Ubuntu:

$ sudo apt install net-tools

Una volta installato, esegui il comando seguente per trovare quali servizi sono in ascolto su quali porte:

$ sudo netstat -tulpn

Risultato di esempio:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      665/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1026/sshd           
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2068/python3        
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1072/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1026/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      1062/apache2        
udp        0      0 127.0.0.53:53           0.0.0.0:*                           665/systemd-resolve 
udp        0      0 192.168.225.22:68       0.0.0.0:*                           647/systemd-network 
udp        0      0 192.168.225.53:68       0.0.0.0:*                           647/systemd-network 
udp6       0      0 fe80::a00:27ff:feff:546 :::*                                647/systemd-network 
udp6       0      0 fe80::a00:27ff:fe7e:546 :::*                                647/systemd-network

Come puoi vedere, un servizio Python (simpleHTTPserver in questo caso) è in ascolto sulla porta numero 8000, il servizio mysqld è in ascolto sulla porta 3306, il servizio ssh è in esecuzione sulla porta numero 22, apache2 è in esecuzione sulla porta 80 e così via.

Ecco,

  • -t flag mostra le connessioni TCP.
  • -u flag mostra le connessioni udp.
  • -l flag mostra le prese in ascolto.
  • -p flag mostra l'ID del processo (PID) e il nome del processo di qualsiasi cosa stia utilizzando quella porta.
  • -n flag mostra gli indirizzi numerici.

Il comando precedente elenca tutti i servizi ei numeri di porta su cui sono in ascolto. Cosa succede se si desidera trovare quale servizio è in ascolto su una porta particolare? Ecco dove comando grep torna utile! Possiamo combinare netstat e grep comando per filtrare l'output per un servizio specifico, ad esempio mysqld , come di seguito.

$ sudo netstat -tulpn | grep mysqld
[sudo] password for sk: 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Vedere? Il servizio mysqld è in ascolto sulla porta numero 3306.

Se conosci già il numero di porta, ma non sai quale servizio lo sta attualmente utilizzando, sostituisci semplicemente il nome del servizio con il numero di porta come mostrato di seguito.

$ sudo netstat -tulpn | grep -w 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Qui, -w flag mostra solo quelle righe contenenti corrispondenze che formano parole intere. In altre parole, -w l'opzione mostra la corrispondenza esatta della stringa data.

Puoi anche usare -i Ignora le distinzioni tra maiuscole e minuscole, in modo che i caratteri che differiscono solo nel caso corrispondano tra loro

$ sudo netstat -tulpn | grep -i 3306

È così semplice.

Per maggiori dettagli, fare riferimento alle pagine man.

$ man netstat

Netstat è per lo più obsoleto. L'alternativa a netstat è "ss".

Metodo 2:utilizzo del comando "ss"

ss è un'utilità della riga di comando per esaminare i socket. È un'alternativa a netstat e l'uso di "ss" è quasi lo stesso di "netstat". Viene preinstallato su Ubuntu e le sue varianti.

Per trovare quali servizi sono in ascolto su quali porte, esegui:

$ sudo ss -tulpn

Risultato di esempio:

Netid          State             Recv-Q            Send-Q                                            Local Address:Port                       Peer Address:Port                                                                                                                                                                                     
udp            UNCONN            0                 0                                                 127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=12))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.22%enp0s3:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=17))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.53%enp0s8:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=25))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546                                [::]:*               users:(("systemd-network",pid=653,fd=24))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:feff:d2e0]%enp0s3:546                                [::]:*               users:(("systemd-network",pid=653,fd=22))                                                                                                                                
tcp            LISTEN            0                 80                                                    127.0.0.1:3306                            0.0.0.0:*               users:(("mysqld",pid=1076,fd=32))                                                                                                                                        
tcp            LISTEN            0                 128                                               127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=13))                                                                                                                                
tcp            LISTEN            0                 128                                                     0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=1015,fd=3))                                                                                                                                           
tcp            LISTEN            0                 128                                                           *:80                                    *:*               users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4))      
tcp            LISTEN            0                 128                                                        [::]:22                                 [::]:*               users:(("sshd",pid=1015,fd=4))

Per filtrare l'output per un particolare servizio (ad es. mysqld), utilizzare:

$ sudo ss -tulpn | grep -w mysqld
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))

Per maggiori dettagli, fare riferimento alle pagine man.

$ man ss

Metodo 3 - Utilizzo di lsof

Come dice il nome, lsof è un'utilità della riga di comando per elencare tutti i file aperti appartenenti a tutti i processi attivi.

Per installarlo su Linux, usa i seguenti comandi a seconda del tipo di distribuzione che usi.

Su Arch Linux:

$ sudo pacman -S lsof

Su Debian, Ubuntu:

$ sudo apt install lsof

Su CentOS, RHEL:

$ sudo yum install lsof

Su Fedora:

$ sudo dnf install lsof

Per trovare quali processi sono in esecuzione su quali porte, specifica semplicemente il numero di porta come mostrato nel comando seguente:

$ sudo lsof -i :80

Esempio di output:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 1062     root    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1087 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1088 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1089 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1090 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1094 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)

Per maggiori dettagli, fare riferimento alle pagine man.

$ man lsof

Metodo 4:utilizzo del comando fusore

fusore è un'altra utilità della riga di comando per identificare i processi utilizzando file o socket. Visualizza i PID dei processi che utilizzano i file oi file system specificati.

È anche disponibile nei repository predefiniti della maggior parte delle distribuzioni Linux.

Per installarlo su Arch Linux, esegui:

$ sudo pacman -S psmisc

Su Debian, Ubuntu:

$ sudo apt install psmisc

Su CentOS, RHEL:

$ sudo yum install psmisc

Su Fedora:

$ sudo dnf install psmisc

Per prima cosa dobbiamo trovare il PID di un servizio o processo in ascolto su una particolare porta. Ad esempio, troverò il PID di un processo in ascolto sulla porta 3306 usando il comando:

$ sudo fuser 3306/tcp

Vedrai un output come di seguito.

3306/tcp: 1076

Qui, 1076 è il PID.

E poi scopri il processo effettivo usando il PID usando il comando:

$ ps -p 1076 -o comm=
mysqld

In alternativa, puoi utilizzare -v flag per visualizzare i dettagli completi in un unico comando.

$ sudo fuser -v 3306/tcp
                     USER        PID ACCESS COMMAND
3306/tcp:            mysql      1076 F.... mysqld

Per maggiori dettagli, consulta le pagine man.

$ man fuser

Ora conosci quattro diversi strumenti per scoprire quali processi sono in ascolto su quali porte. Tutti e quattro sono facili da usare e disponibili nella maggior parte delle distribuzioni Linux. Se conosci altri strumenti, faccelo sapere nella sezione commenti qui sotto. Controllerò e aggiornerò questo elenco di conseguenza.


Linux
  1. Linux:come trovare processi utilizzando la porta seriale?

  2. Come chiudere rmiregistry in esecuzione su una determinata porta?

  3. Come controllare quale fuso orario in Linux?

  4. Come scoprire lo spazio dei nomi di un particolare processo?

  5. Come trovare quale versione di Java nella cartella installata di Java?

Come trovare il numero di porta di un servizio in Linux

Come scoprire a quali gruppi appartiene un utente in Linux

Scopri quali processi sono in ascolto su una porta particolare in Linux

Debian:scopri su quale numero di porta è in ascolto un processo

Come eliminare l'esecuzione del processo Linux su una porta particolare

Linux:scopri su quale numero di porta è in ascolto un processo