Panoramica
Sappiamo tutti che una porta può essere utilizzata solo da una singola applicazione o servizio allo stesso tempo. A volte abbiamo bisogno di sapere quale processo è in ascolto su una porta specifica.
In questo tutorial, vedremo diversi approcci per trovare il processo in ascolto su una particolare porta in Linux.
Permessi di root
In Linux, solo l’utente root o il proprietario del processo può ottenere le informazioni dettagliate del processo.,
Quando vogliamo controllare un processo in ascolto su una particolare porta, non sappiamo a chi appartiene il processo.
Con il permesso di root, possiamo ottenere tutte le informazioni necessarie sul processo, ad esempio l’identificatore del processo.
Pertanto, potrebbe essere necessario avviare i nostri strumenti di rete con l’utente root (o con sudo).
Usando netstat
Il comando netstat è un membro del pacchetto net-tools.
In passato, è stato preinstallato in molte distribuzioni Linux. Tuttavia, il pacchetto net-tools non è stato aggiornato dal 2011.,
A causa della sua mancanza del supporto delle moderne funzionalità del kernel Linux e di altri motivi, il pacchetto net-tools è diventato obsoleto.
Detto questo, netstat stesso è ancora ampiamente utilizzato, quindi diamo un’occhiata a come può aiutare.
Prima di tutto, vediamo un esempio di output del comando netstat:
Con le opzioni ltnup, netstat ci mostra tutte le porte in uso nell’esempio precedente.,
diamo un’occhiata a ciò che le opzioni media:
- l – visualizza solo i socket in ascolto
- t – visualizza connessioni TCP
- n – vedi indirizzi in forma numerica
- u – visualizza connessioni UDP
- p – show process id/nome del programma
Se passiamo in rassegna di cui sopra di uscita, l’ultima colonna è esattamente ciò che stiamo cercando: il PID e il nome del Processo in ascolto su una determinata porta.
Possiamo semplicemente convogliare l’output netstat al comando grep per ottenere le informazioni di processo su una singola porta.,
Ad esempio, vediamo quale processo è in ascolto sulla porta 22:
root# netstat -ltnup | grep ':22'tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 575/sshd
Usando ss
Nella sezione precedente, abbiamo discusso che il pacchetto net-tools è deprecato.
Il comando ss è la sostituzione del comando netstat.
Ora vediamo come usare il comando ss per vedere quale processo è in ascolto sulla porta 22:
Se controlliamo le opzioni, scopriamo che le opzioni che abbiamo passato al comando ss sono le stesse che abbiamo passato a netstat.,
L’unica differenza è che stavamo facendo uso del filtro di stato dell’utilità ss invece di un processo grep aggiuntivo per filtrare l’output.
Simile all’output del comando netstat, anche le informazioni di processo previste si trovano nell’ultima colonna.
Usando lsof
Il comando lsof può elencare tutti i file aperti in un sistema Linux.,
Possiamo usare il comando lsof per trovare il processo utilizzando una porta specifica con l’opzione-i :port_number:
root# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)
Le prime quattro colonne nell’output precedente ci dicono il nome del processo in ascolto sulla porta 22 e il suo PID, proprietario e il descrittore del file.
Possiamo passare multiple-i :port al comando lsof per scoprire i processi in ascolto su varie porte:
root# lsof -i :22 -i :68COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)dhcpcd 8822 root 10u IPv4 49601 0t0 UDP *:bootpc
Usando fuser
L’utilità fuser visualizza quali processi utilizzano file denominati, socket o file system., È incluso nel pacchetto psmisc e preinstallato su molte distribuzioni Linux moderne per impostazione predefinita.
Possiamo usarlo per visualizzare le informazioni del processo in esecuzione su una porta specifica. Ancora una volta scopriamo il PID dell’elaborazione ascoltando la porta TCP 22:
root# fuser 22/tcp22/tcp: 575
L’output di cui sopra è piuttosto semplice. Sappiamo che il processo con PID 575 è in ascolto sulla porta TCP 22.
Tuttavia, non ci dice informazioni dettagliate sul processo, ad esempio, qual è il nome del processo 575? chi possiede il processo? e così via.,
Se si desidera ottenere maggiori informazioni circa il processo, si può passare l’opzione “-v” per l’unità di fusione comando per avere un output dettagliato:
root# fuser -v 22/tcp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd
Uso dell’unità di fusione di comando, possiamo anche controllare il processo in esecuzione informazioni su più porte TCP o UDP in un solo colpo:
root# fuser -v 22/tcp 68/udp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd68/udp: root 8822 F.... dhcpcd
Conclusione
In questo breve articolo, abbiamo imparato quattro diverse Linux utilità della riga di comando con esempi per capire le informazioni del processo in ascolto su una determinata porta.,
Sono tutti strumenti molto potenti da avere nel nostro arsenale sulla riga di comando di Linux.