ti-enxame.com

O que está usando esse soquete de rede?

Estou tentando usar NTP para atualizar a hora em minha máquina. No entanto, ocorre 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 também o vejo no FreeBSD 7.x, Ubuntu 10.04 e Solaris 10.

18
Stefan Lasiewski

Você pode fazer

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

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

service ntpd status

E quanto a "O que significa soquete em uso"? Se eu posso ser perdoado por suavizar algumas rugas (e para a explicação básica, desculpas pela maior parte disso são corretivas para você) ... TCP/IP (a linguagem 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 podem ser conectadas.

Quando você deseja se conectar a um servidor web, você abre o site em seu navegador, mas a máquina por baixo está na verdade conectando você à porta 80 no IP do servidor web. O daemon do servidor da web (o programa que escuta as conexões à porta 80) usa um "soquete" para manter essa porta aberta, reservando-a para si mesmo. Apenas um programa pode usar a mesma porta por vez.

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

Editar
Alterado para contabilizar UDP também

20
Matt Simmons

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

netstat -lp -u -t

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

Se você quiser ver a porta numérica e os nomes de host (ou seja, não resolvidos no caso de hosts e não transformados em nomes de serviço no caso de portas), você pode adicionar -n para a linha de comando acima.

EDITAR: Isso funciona no Linux - eu não sei se funciona bem no BSD, pois não tenho nenhuma caixa baseada em BSD por aí.

10
B.R.

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 soquetes IPv4 de escuta:

sockstat -l4
2
diz

Você pode usar lsof para descobrir qual aplicativo está usando este socket.

1
txwikinger

Como root, faça o seguinte:

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 podem bloqueá-lo. Se você fizer isso, provavelmente também desejará redirecionar stderr para /dev/null.

1
kbyrd

Com o FreeBSD use o -u mude para que ntpdate use uma porta sem privilégios.

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

Usar man ntpdate Para ver o que -v e -b faz.

0
Monti

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

0
Graham Perrin