O que está usando esse soquete de rede?

18

Estou tentando usar o NTP para atualizar a hora na minha máquina. No entanto, isso me dá um erro:

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

O que significa o erro "soquete em uso"? Como posso ver o que está usando esse soquete?

Isso acontece no meu sistema CentOS 4.x, mas eu também o vejo no FreeBSD 7.x, Ubuntu 10.04 e Solaris 10.

    
por Stefan Lasiewski 10.08.2010 / 21:43

7 respostas

20

Você pode fazer

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

para ver todas as suas portas de escuta, mas dólares para donuts que o ntpd está executando:

service ntpd status

E quanto a "O que o soquete em uso" significa? Se eu puder ser perdoado por suavizar algumas rugas (e pela explicação básica, desculpas da maioria disso são corretivas para você) ... TCP / IP (o idioma da internet) especifica que cada computador tem um endereço IP, que identifica exclusivamente esse computador na internet. Além disso, existem 65.000 portas numeradas em cada endereço IP que pode ser conectado.

Quando você deseja se conectar a um servidor da Web, você abre o site em seu navegador, mas o mecanismo abaixo está realmente conectando você à porta 80 no IP do servidor da Web. O daemon do servidor da web (o programa que atende a conexões com a porta 80) usa um "soquete" para manter aberta essa porta, reservando-a para si mesma. Apenas um programa pode usar a mesma porta por vez.

Como você tinha o ntpd em execução, ele estava usando essa porta. 'ntpdate' tentou acessar essa porta, mas como ela já estava aberta, você recebeu o erro 'socket already in use'.

Editar
Alterado para considerar também o UDP

    
por 10.08.2010 / 21:46
10

Você também pode usar o netstat para procurar por soquetes abertos - é muito mais limpo do que usar o lsof como os outros pôsteres sugeriram. Tente esta linha de comando como root

netstat -lp -u -t

para visualizar todas as conexões de escuta, incluindo seus pids e programas associados. O parâmetro -l é o que especifica as conexões auditivas, -p especifica que você deseja ver o PID / nome e -t e -u informam ao netstat que você deseja apenas conexões TCP e UDP (IPv4 e IPv6).

Se você deseja ver nomes numéricos de porta e host (isto é, não resolvidos no caso de hosts e não transformados em nomes de serviço no caso de portas), você pode adicionar -n à linha de comando acima. / p>

EDIT: Isso funciona no Linux - eu não sei o quão bem ele funciona no BSD, já que eu não tenho caixas baseadas no BSD.

    
por 10.08.2010 / 21:56
2

No FreeBSD, você também pode usar o sockstat caso o lsof não funcione para você (por exemplo, em sistemas virtualizados que não possuem / dev / mem por qualquer motivo). Para obter uma lista de todos os programas com escuta de sockets IPv4:

sockstat -l4
    
por 08.05.2013 / 21:05
1

Como root, faça isso:

lsof | grep IPv4 | grep LISTEN

Isso mostrará todos os processos que estão escutando em soquetes IPv4. Você pode querer adicionar -b para evitar que lsof faça algumas coisas que possam bloqueá-lo. Se você fizer isso, provavelmente também desejará redirecionar stderr para /dev/null .

    
por 10.08.2010 / 21:52
1

Você pode usar lsof para descobrir qual aplicativo está usando esse soquete.

    
por 10.08.2010 / 21:46
0

Brincando com este três-em-um no OS X 10.9.5:

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

    
por 06.04.2015 / 04:44
0

Com o FreeBSD, use a opção -u para que ntpdate use uma porta não privilegiada.

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

Use man ntpdate para ver o que -v e -b fazem.

    
por 04.11.2015 / 16:12