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.