Come sapere quale programma è in ascolto su una determinata porta?


377

Sospetto che un programma sia in ascolto sulla porta 8000della mia macchina.

Quando eseguo il seguente comando, ottengo questo errore:

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

Se utilizzo un'altra porta ( 8000è l'impostazione predefinita), il server Web funziona correttamente.

Se corro wget localhost:8000dalla riga di comando, ritorna 404 Not Found.

Cosa posso fare (o quali strumenti sono disponibili) per trovare quale programma è in ascolto sulla porta 8000e da lì dove è configurato quel programma?

Risposte:


314

Apri il tuo terminale e digita come

lsof -i :8000

quel comando ti elencherà l'applicazione utilizzata da quella porta con PID. (Se non viene eseguito alcun risultato sudopoiché potresti non avere l'autorizzazione per determinati processi.)

Ad esempio, con la porta 8000 ( python3 -m http.server):

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

E porta 22 (SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

Spero che aiuti.


2
Questo funziona anche su OSX per quello che vale .....
rivisitazione

2
L'aggiunta -s TCP:LISTENlimita il risultato alla presa di ascolto effettiva e al suo processo.
jhermann,

1
Se cerchi la porta 8000 ritorna PID 1889? wat
CodyBugstein,

Sì, esiste un servizio con PID 1889 che utilizza la porta 8881. Mi manca qualcosa?
rʒɑdʒɑ

1
@Implementa l'esempio cerca la porta 8881. La colonna PID contiene gli ID processo e la colonna NAME contiene le porte.
Freek de Bruijn,

377

Puoi usare netstat per vedere quale processo è in ascolto su quale porta.

È possibile utilizzare questo comando per avere tutti i dettagli:

sudo netstat -peanut

se hai bisogno di sapere esattamente quale è in ascolto sulla porta 8000 puoi usare questo:

sudo netstat -peanut | grep ":8000 "

Non esiste alcun processo che può nascondere da netstat.


117
netstat -peanutè più facile da ricordare di netstat -taupen!
Douglas B. Staple

9
Buona! - Ho appena modificato la risposta per riflettere il tuo commento. Grazie.
Antoine Rodriguez,

2
'fuser -k 8000 / tcp' per liberare quella porta
Jay Modi,

3
se nella colonna "PID / Nome programma" vengono visualizzati trattini anziché un nome processo, hai dimenticato di aggiungere "sudo"
v.shashenko

3
quindi sono le noccioline eh
prusswan

172

Per spiegare la risposta di @ 33833 puoi ottenere alcune informazioni molto dettagliate, ad esempio:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Vedo proprio lì che il calamaro è il processo, ma in realtà è il mio squid-deb-proxyche sta prendendo il porto.

Un altro buon esempio di un'app Java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Puoi vedere in lsof(LiSt Open Files) che è java, il che è meno utile. Eseguendo il pscomando con il PID possiamo vedere subito che si tratta di CrashPlan.


9
In un comando:lsof -t -i :8000 | xargs ps -fp
Brett Y

8
Ho dovuto aggiungere un prefisso, sudo ma dopo ha funzionato per me. Grazie.
Dwayne Crooks,

4
nota: senza di sudote non otterrai un errore, non otterrai nulla come risposta.
Frank Nocke,

13

Prova ssdal iproute2pacchetto:

ss -nlp | grep 8000

5
ssha anche una propria capacità di filtraggio: ss -nlp '( sport = :8000 )'.
GnP,

6

Un altro modo di usare socklistdal procinfopacchetto:

man socklist

DESCRIPTION
socklistè uno script Perl che ti fornisce un elenco di tutti i socket aperti, elencando i tipi, port, inode, uid, pid, fd e il programma a cui appartiene.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

2

Puoi usare nmap.

È davvero importante sapere quali porte sono aperte nel tuo PC, questo non è utile solo per Linux, ma anche per altri sistemi operativi, Linux ha molti strumenti per controllare quali porte sono aperte, la più comune è nmap che è un strumento da riga di comando, ma esiste anche un frontEnd grafico per esso se preferisci in questo modo. 1

per installarlo, basta premere Ctrl+ Alt+ Tsulla tastiera per aprire Terminale. Quando si apre, esegui il comando seguente:

sudo apt-get install nmap

Per ulteriori informazioni su nmap e altre utilità, vai qui

1 Fonte: garron.me


nmap ti dirà solo che una porta è aperta, non quale processo l'ha aperta.
Andrew Burns,

1
Ho fatto clic sulla tua fonte per leggere [nmap] tries to guess which service is listening on each port, but it can make mistakessubito prima che suggerisca un metodo effettivo per scoprire quale processo possiede il socket.
GnP,

@gnp Potresti anche dare un'occhiata a This .
Mitch

@Mitch l'ho fatto. L'OP deve conoscere l'esatto PID di un processo sul sistema locale. Nmap non è lo strumento giusto qui, nemmeno con il servizio e il rilevamento della versione. O corrisponderà a un elemento nel database nmaps, che consente a OP al buio su quale processo uccidere o riconfigurare, oppure non lo farà e OP avrà una bella impronta digitale e un collegamento a
insecure.org
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.