Do czego służy to gniazdo sieciowe?

18

Próbuję użyć NTP, aby zaktualizować czas na moim komputerze. Daje mi to jednak błąd:

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

Co oznacza błąd „gniazdo jest używane”? Jak mogę zobaczyć, co korzysta z tego gniazda?

Dzieje się tak na moim systemie CentOS 4.x, ale widzę to również na FreeBSD 7.x, Ubuntu 10.04 i Solaris 10.

Stefan Lasiewski
źródło
W przepełnieniu stosu: jakie procesy wykorzystują, które porty w Uniksie? (2008-09-24)
Graham Perrin

Odpowiedzi:

20

Możesz to zrobić

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

aby zobaczyć wszystkie twoje porty nasłuchujące, ale dolary do pączków, które działa ntpd:

service ntpd status

A co do „Co oznacza używane gniazdo”? Jeśli mogę wybaczyć wygładzenie niektórych zmarszczek (i dla bardzo podstawowego wyjaśnienia, przeprosiny dla większości z nich są dla ciebie naprawą) ... TCP / IP (język Internetu) określa, że ​​każdy komputer ma adres IP, który jednoznacznie identyfikuje ten komputer w Internecie. Ponadto na każdym adresie IP można podłączyć 65 000 numerowanych portów.

Gdy chcesz połączyć się z serwerem internetowym, otwierasz witrynę w przeglądarce, ale znajdujące się pod nią urządzenie w rzeczywistości łączy Cię z portem 80 na adresie IP serwera WWW. Demon serwera WWW (program nasłuchujący połączeń z portem 80) używa „gniazda” do utrzymywania otwartego portu, rezerwując go dla siebie. Tylko jeden program może korzystać z tego samego portu jednocześnie.

Ponieważ miałeś uruchomione narzędzie NTTP, korzystało z tego portu. Polecenie „ntpdate” próbowało uzyskać dostęp do tego portu, ale ponieważ był on już otwarty, wystąpił błąd „gniazdo jest już w użyciu”.

Edytuj
Zmieniono również na konto UDP

Matt Simmons
źródło
1
Lof kołysze mój świat! grep na IPv4, aby znaleźć różne rzeczy oparte na IP.
geoffc,
„przepraszam wszystkich, którzy już to wiedzieli” - nie przepraszaj. Jednym z celów tej witryny jest zapewnienie dobrych odpowiedzi na często zadawane pytania. Celem tej wczesnej wersji beta jest dostarczanie treści.
Stefan Lasiewski,
Wiem, ale chciałem się upewnić, że pytający wiedział, że nie próbuję z nim rozmawiać.
Matt Simmons,
Zadałem pytanie, a ty do mnie nie mówiłeś. Znam również odpowiedź, ale uważam, że to dobre pytanie do wersji beta. A twoja odpowiedź była znacznie lepsza niż cokolwiek bym napisał;)
Stefan Lasiewski
@MattSimmons nie ma Isofpolecenia w moim CentOS 7.
trzy bloki
10

Możesz także użyć netstat do szukania otwartych gniazd - jest to o wiele czystsze niż używanie lsof, jak sugerują inne plakaty. Wypróbuj ten wiersz poleceń jako root

netstat -lp -u -t

aby wyświetlić wszystkie połączenia nasłuchujące, w tym powiązane z nimi pid i programy. Parametr -l określa połączenia nasłuchujące, -p określa, że ​​chcesz zobaczyć PID / nazwę, a -t i -u informuje netstat, że chcesz tylko połączenia TCP i UDP (IPv4 i IPv6).

Jeśli chcesz zobaczyć numeryczne nazwy portów i hostów (tzn. Nie są rozpoznawane w przypadku hostów i nie są przekształcane w nazwy usług w przypadku portów), możesz dodać -ndo wiersza polecenia powyżej.

EDYCJA: Działa to na Linuksie - nie wiem, jak dobrze działa na BSD, ponieważ nie mam żadnych pudeł opartych na BSD.

BR
źródło
+1: To jedyna odpowiedź, która faktycznie pokazuje proces ntpd (który domyślnie nasłuchuje na UDP).
Stefan Lasiewski,
Dla ludzi: Twoje flagi są równoważnenetstat --listen --programs --udp --tcp
Stefan Lasiewski,
1
FreeBSD nie obsługuje „-p” („Pokaż programy”), dlatego ludzie używają LSOF. Nie obsługuje także flag -l („Show Listening Sockets”), ale myślę, że możesz to zrobić | grep LISTEN, ale wyklucza to połączenia UDP. Ale poza tym uważam, że równoważne flagi na FreeBSD to:, netstat -p udp -p tcp -aale netstat -amogą być prostsze.
Stefan Lasiewski,
@Stefan: Moja odpowiedź pokaże również gniazda UDP.
kbyrd,
@kbyrd: Interesujące. Nie pokazuje mi pakietów UDP. Zobacz mój komentarz do twojego postu.
Stefan Lasiewski,
2

W FreeBSD możesz także użyć sockstat, jeśli lsof nie działa dla ciebie (np. W zwirtualizowanych systemach, które nie mają / dev / mem z jakiegokolwiek powodu). Aby uzyskać listę wszystkich programów z nasłuchującymi gniazdami IPv4:

sockstat -l4
diz
źródło
1

Jako root wykonaj następujące czynności:

lsof | grep IPv4 | grep LISTEN

Spowoduje to wyświetlenie wszystkich procesów nasłuchujących na gniazdach IPv4. Możesz dodać, -baby uniemożliwić lsofwykonanie niektórych czynności, które mogą go zablokować. Jeśli to zrobisz, prawdopodobnie będziesz również chciał przekierować stderrna /dev/null.

kbyrd
źródło
Dla mnie to nie wydaje się pokazywać pakietów udp. Testuję na systemie Ubuntu, na którym działa rsyslogd, nasłuchując na porcie 514 / udp.
Stefan Lasiewski,
Muszę zrobić, sudo lsof |grep UDPaby zobaczyć pakiety UDP.
Stefan Lasiewski,
1

Możesz użyć, lsofaby dowiedzieć się, która aplikacja korzysta z tego gniazda.

txwikinger
źródło
0

Zabawa z tym urządzeniem trzy w jednym w systemie OS X 10.9.5:

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

Graham Perrin
źródło
0

W FreeBSD użyj -uprzełącznika, który ntpdatezamiast tego używa nieuprzywilejowanego portu.

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

Użyj, man ntpdateaby zobaczyć, co -vi co -brobi.

Monti
źródło
Ntpdate na Debianie ma taką -uopcję, ponieważ pochodzi z ntp.org, myślę, że większość systemów ją ma.
RobertL