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.


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


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.


+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

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.


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.


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


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.


Ntpdate na Debianie ma taką -uopcję, ponieważ pochodzi z ntp.org, myślę, że większość systemów ją ma.
— RobertL
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.