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.

Stefan Lasiewski
fonte
No estouro de pilha: quais processos estão usando quais portas no unix? (2008-09-24)
Graham Perrin

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

Matt Simmons
fonte
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.

BR
fonte
+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
diz
fonte
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.

kbyrd
fonte
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.

txwikinger
fonte
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

Graham Perrin
fonte
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.

Monti
fonte
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