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


Sospetto che un programma sia in ascolto sulla porta 8000 sulla 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 uso un'altra porta (8000 è l'impostazione predefinita), il server Web funziona correttamente.

Se corro wget localhost:8000 dalla 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?


291
2018-04-06 08:36


origine




risposte:


Apri il tuo terminale e digita come

lsof -i :8000

quel comando ti mostrerà l'applicazione usata da quella porta con PID. (Se nessun risultato viene eseguito tramite sudo dal momento che il tuo potrebbe 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 possa aiutare.


189
2018-04-06 08:50



Questo funziona anche su OSX per quello che vale ..... - reevesy
Aggiunta -s TCP:LISTEN limita il risultato al socket di ascolto effettivo e al suo processo. - jhermann
Se cerchi la porta 8000, ritorna PID 1889? wat - CodyBugstein
Sì, c'è un servizio con PID 1889 utilizzando la porta 8881. Mi manca qualcosa? - Ten-Coin
@Immagine l'esempio cerca la porta 8881. La colonna PID contiene gli ID di processo e la colonna NAME contiene le porte. - Freek de Bruijn


È possibile utilizzare netstat per vedere quale processo è in ascolto su quale porta.

Puoi usare questo comando per avere un dettaglio completo:

sudo netstat -peanut

se hai bisogno di sapere esattamente quale ascolta sulla porta 8000 puoi usare questo:

sudo netstat -peanut | grep ":8000 "

Non esiste un processo che possa nascondersi da netstat.


329
2018-04-06 08:58



netstat -peanut è più facile da ricordare che netstat -taupen! - Douglas B. Staple
Bene! - Ho appena modificato la risposta per riflettere il tuo commento. Grazie. - Antoine Rodriguez
'fuser -k 8000 / tcp' per liberare quella porta - Jay Modi
se nella colonna "Nome PID / Programma" vedi trattini invece di un nome di processo, hai dimenticato di aggiungere "sudo" - v.shashenko
quindi sono noccioline eh - prusswan


Per esporre sulla risposta di @ 33833 è possibile ottenere 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

Posso vedere proprio lì che il calamaro è il processo, ma in realtà è mio squid-deb-proxy questo 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 dentro lsof (LiSt Open Files) che è java, che è meno che utile. Esecuzione del ps comando con il PID possiamo vedere subito che si tratta di CrashPlan.


164
2018-06-17 15:55



In un comando: lsof -t -i :8000 | xargs ps -fp - Brett Y
Ho dovuto prefisso sudo  ma dopo ha funzionato per me. Grazie. - Dwayne Crooks
nota: senza sudo non otterrai un errore, non otterrai nulla come risposta. - Frank Nocke


Provare ss a partire dal iproute2 pacchetto:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss ha anche le sue capacità di filtraggio: ss -nlp '( sport = :8000 )'. - GnP


Un altro modo di usare socklist a partire dal procinfo pacchetto:

man socklist

DESCRIZIONE
socklist è uno script Perl che ti fornisce una lista di tutti i socket aperti, i tipi di enumerazione, la porta,          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

5
2018-06-29 10:23





Puoi usare nmap.

È molto importante sapere quali porte sono aperte sul PC, questo   non è utile solo per Linux, ma anche per altri sistemi operativi,   Linux ha molti strumenti per verificare quali porte sono aperte, di più   common è nmap che è uno strumento da riga di comando, ma esiste anche a   FrontEnd grafico per esso se si preferisce in questo modo.1

per installarlo, basta premere Ctrl+alt+T sulla tastiera per aprire Terminal. Quando si apre, esegui il comando seguente:

sudo apt-get install nmap

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

1Fonte:garron.me


2
2018-04-06 08:46



nmap ti dirà solo che una porta è aperta, non quale processo l'ha aperta. - Andrew Burns
Ho fatto clic sulla tua fonte per leggere [nmap] tries to guess which service is listening on each port, but it can make mistakes proprio prima suggerisce un metodo reale per scoprire quale processo possiede il socket. - GnP
@gnp Potresti anche dare un'occhiata a Questo. - Mitch♦
@ Mitch 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 abbinerà un oggetto al database di nmaps, che comunque lascia OP al buio su quale processo uccidere o riconfigurare, oppure no e OP avrà una bella impronta digitale e un collegamento a insecure.org - GnP