Cosa sta usando questo socket di rete?


18

Sto cercando di utilizzare NTP per aggiornare l'ora sulla mia macchina. Tuttavia, mi dà un errore:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

Che cosa significa l'errore "socket è in uso"? Come posso vedere cosa sta usando questo socket?

Questo succede sul mio sistema CentOS 4.x, ma lo vedo anche su FreeBSD 7.x, Ubuntu 10.04 e Solaris 10.


Risposte:


20

Tu puoi fare

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

per vedere tutte le tue porte di ascolto, ma dollari alle ciambelle che ntpd è in esecuzione:

service ntpd status

E per quanto riguarda "Cosa significa socket in uso"? Se posso essere perdonato per aver smussato alcune rughe (e per la spiegazione di base, le scuse di gran parte di questo sono un rimedio per te) ... TCP / IP (la lingua di Internet) specifica che ogni computer ha un indirizzo IP, che identifica in modo univoco quel computer su Internet. Inoltre, ci sono 65.000 porte numerate su ciascun indirizzo IP a cui è possibile connettersi.

Quando vuoi connetterti a un server web, apri il sito nel tuo browser, ma il macchinario sottostante ti sta effettivamente collegando alla porta 80 sull'IP del server web. Il demone del web server (il programma in ascolto delle connessioni alla porta 80) utilizza un "socket" per tenere aperta quella porta, riservandola per sé. Solo un programma può utilizzare la stessa porta alla volta.

Dato che ntpd era in esecuzione, stava usando quella porta. 'ntpdate' ha tentato di accedere a quella porta, ma dato che era già stato tenuto aperto, veniva visualizzato l'errore 'socket già in uso'.

Modifica
Modificato per tenere conto anche di UDP


1
Mi piace il mio mondo! grep anche su IPv4 per trovare varie cose basate su IP.
geoffc,

"mi scuso con tutti quelli che già lo sapevano" - Non scusarti. Uno degli scopi di questo sito è fornire buone risposte a domande comuni. Lo scopo di questa beta iniziale è fornire contenuti.
Stefan Lasiewski,

Lo so, ma volevo assicurarmi che la persona che chiedeva sapesse che non stavo cercando di parlare con loro.
Matt Simmons,

Ho fatto la domanda e non mi stavi parlando. Conosco anche la risposta, ma immagino sia una buona domanda per la beta. E la tua risposta è stata molto meglio di qualsiasi cosa io avrei scritto;)
Stefan Lasiewski l'

@MattSimmons non c'è alcun Isofcomando nel mio CentOS 7.
tre blocchi

10

Puoi anche usare netstat per cercare prese aperte: è molto più pulito dell'uso di lsof, come suggerito dagli altri poster. Prova questa riga di comando come root

netstat -lp -u -t

per visualizzare tutte le connessioni di ascolto, inclusi i pid e i programmi associati. Il parametro -l è ciò che specifica le connessioni in ascolto, -p specifica che si desidera vedere il PID / nome e -t e -u dire a netstat che si desidera solo connessioni TCP e UDP (IPv4 e IPv6).

Se vuoi vedere i nomi numerici delle porte e degli host (es. Non risolti nel caso degli host e non trasformati in nomi di servizi nel caso delle porte), puoi aggiungere -nalla riga di comando sopra.

EDIT: Funziona su Linux - Non so quanto funzioni bene su BSD, dato che non ho caselle basate su BSD.


+1: questa è l'unica risposta che mostra effettivamente il processo ntpd (che ascolta su UDP di default).
Stefan Lasiewski,

Per gli umani: le tue bandiere sono equivalenti anetstat --listen --programs --udp --tcp
Stefan Lasiewski,

1
FreeBSD non supporta '-p' ("Mostra programmi"), motivo per cui le persone usano LSOF. Inoltre non supporta i flag -l ("Show Listening Socket"), ma penso che tu possa farlo con | grep LISTEN, ma questo esclude le connessioni UDP. Ma per il resto, penso che i flag equivalenti su FreeBSD siano:, netstat -p udp -p tcp -ama netstat -apotrebbero essere più semplici.
Stefan Lasiewski,

@Stefan: la mia risposta mostrerà anche i socket UDP.
kbyrd,

@kbyrd: interessante. Non mostra i pacchetti UDP per me. Vedi il mio commento al tuo post.
Stefan Lasiewski,

2

Su FreeBSD, puoi anche usare sockstat nel caso in cui lsof non funzioni per te (ad es. Su sistemi virtualizzati che non hanno / dev / mem per qualsiasi motivo). Per ottenere un elenco di tutti i programmi con prese IPv4 in ascolto:

sockstat -l4

1

Come root, fai come segue:

lsof | grep IPv4 | grep LISTEN

Questo ti mostrerà tutti i processi che sono in ascolto su socket IPv4. Potresti voler aggiungere -bper impedire lsofdi fare alcune cose che potrebbero bloccarlo. Se lo fai, probabilmente vorrai anche reindirizzare stderra /dev/null.


Per me, questo non sembra mostrare i pacchetti udp. Sto testando su una casella Ubuntu che esegue rsyslogd, ascoltando sulla porta 514 / udp.
Stefan Lasiewski,

Devo fare sudo lsof |grep UDPper vedere i pacchetti UDP.
Stefan Lasiewski,

1

È possibile utilizzare lsofper trovare l'applicazione che utilizza questo socket.


0

Giocando con questo tre in uno su OS X 10.9.5:

sudo lsof | grep \ IPv | sort ; clear ; sudo lsof -U ; clear ; sudo netstat -a


0

Con FreeBSD usa lo -uswitch in modo che ntpdateusi invece una porta senza privilegi.

Piace: ntpdate -v -b -u 0.freebsd.pool.ntp.org

Usa man ntpdateper vedere cosa -ve cosa -bfa.


Il ntpdate su Debian ha l' -uopzione, dato che proviene da ntp.org, immagino che la maggior parte dei sistemi ce l'abbia.
RobertL,
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.