O que está usando esse soquete de rede?


18

Estou tentando usar o NTP para atualizar o horário 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 também o vejo no FreeBSD 7.x, Ubuntu 10.04 e Solaris 10.


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 pelas explicações muito básicas, desculpas pela maior parte disso são reparadoras 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, abre o site no navegador, mas o equipamento abaixo está realmente conectando você à porta 80 no IP do servidor da web. O daemon do servidor da Web (o programa que atende conexões à porta 80) usa um "soquete" para manter aberta essa porta, reservando-a para si mesma. Somente um programa pode usar a mesma porta por vez.

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

Editar
Alterado para Contabilizar UDP Também


11
lsof balança meu mundo! grep no IPv4 também para encontrar várias coisas baseadas em IP.
geoffc

"desculpas a todos que já sabiam disso" - Não peça desculpas. Um dos objetivos deste site é fornecer boas respostas para perguntas comuns. O objetivo desta versão beta inicial é fornecer conteúdo.
Stefan Lasiewski

Eu sei, mas eu queria ter certeza de que a pessoa que perguntasse sabia que eu não estava tentando falar com eles.
Matt Simmons

Eu fiz a pergunta e você não estava falando comigo. Eu também sei a resposta, mas acho que é uma boa pergunta para a versão beta. E sua resposta foi muito melhor, então qualquer coisa que eu ia escrever;)
Stefan Lasiewski

@MattSimmons não há nenhum Isofcomando no meu CentOS 7. #
three-blocks

10

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

netstat -lp -u -t

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

Se você deseja ver os nomes de porta e host numéricos (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à linha de comando acima.

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


+1: Esta é a única resposta que realmente mostra o processo ntpd (que escuta no UDP por padrão).
Stefan Lasiewski

Para os humanos: suas bandeiras são equivalentes a #netstat --listen --programs --udp --tcp
Stefan Lasiewski

11
O FreeBSD não suporta '-p' ("Mostrar Programas"), e é por isso que as pessoas usam o LSOF. Ele também não suporta os sinalizadores -l ("Show Listening Sockets"), mas acho que você pode fazer isso | grep LISTEN, mas exclui as conexões UDP. Mas, caso contrário, acho que as bandeiras equivalentes no FreeBSD são:, netstat -p udp -p tcp -amas netstat -apodem ser mais simples.
Stefan Lasiewski

@ Stefan: Minha resposta mostrará soquetes UDP também.
kbyrd

@kbyrd: Interessante. Não mostra pacotes UDP para mim. Veja meu comentário no seu post.
Stefan Lasiewski

2

No FreeBSD, você também pode usar o sockstat caso 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 que escutam soquetes IPv4:

sockstat -l4

1

Como root, faça o seguinte:

lsof | grep IPv4 | grep LISTEN

Isso mostrará todos os processos que estão escutando nos soquetes IPv4. Você pode adicionar -bpara impedir que você lsoffaça algumas coisas que possam bloqueá-lo. Se você fizer isso, provavelmente também desejará redirecionar stderrpara /dev/null.


Para mim, isso não parece mostrar pacotes udp. Estou testando em uma caixa do Ubuntu que está executando o rsyslogd, escutando na porta 514 / udp.
Stefan Lasiewski

Eu preciso fazer sudo lsof |grep UDPpara ver pacotes UDP.
Stefan Lasiewski

1

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


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


0

Com o FreeBSD, use o -uswitch para ntpdateusar uma porta sem privilégios.

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

Use man ntpdatepara ver o que -ve -bfaz.


O ntpdate no Debian tem a -uopção, já que é do ntp.org, eu imagino que a maioria dos sistemas o tenha.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.