Was benutzt diese Netzwerkdose?

18

Ich versuche, mithilfe von NTP die Uhrzeit auf meinem Computer zu aktualisieren. Es gibt mir jedoch einen Fehler:

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

Was bedeutet der Fehler "Socket wird verwendet"? Wie kann ich sehen, was diese Steckdose verwendet?

Dies passiert auf meinem CentOS 4.x-System, aber ich sehe es auch auf FreeBSD 7.x, Ubuntu 10.04 und Solaris 10.

Stefan Lasiewski
quelle
In Stack Overflow: Welche Prozesse verwenden welche Ports unter Unix? (2008-09-24)
Graham Perrin

Antworten:

20

Du kannst tun

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

Um alle Listening-Ports zu sehen, aber Dollars zu Donuts, die NTPD ausführt:

service ntpd status

Und was bedeutet "Was ist die verwendete Steckdose?" Wenn ich für die Glättung einiger Falten vergeben werden kann (und für die grundlegende Erklärung, Entschuldigungen für die meisten davon sind für Sie heilsam) ... TCP / IP (die Sprache des Internets) gibt an, dass jeder Computer eine IP-Adresse hat, die diesen Computer im Internet eindeutig identifiziert. Zusätzlich gibt es 65.000 nummerierte Ports an jeder IP-Adresse, an die eine Verbindung hergestellt werden kann.

Wenn Sie eine Verbindung zu einem Webserver herstellen möchten, öffnen Sie die Site in Ihrem Browser, aber der Computer darunter verbindet Sie tatsächlich mit Port 80 der IP des Webservers. Der Daemon des Webservers (das Programm, das auf Verbindungen zu Port 80 wartet) verwendet einen "Socket", um diesen Port offen zu halten und für sich zu reservieren. Es kann immer nur ein Programm denselben Port verwenden.

Da ntpd ausgeführt wurde, wurde dieser Port verwendet. 'ntpdate' hat versucht, auf diesen Port zuzugreifen, aber da er bereits geöffnet war, wurde der Fehler 'Socket bereits in Verwendung' angezeigt.

Bearbeiten
Geändert, um auch UDP zu berücksichtigen

Matt Simmons
quelle
1
lsof rockt meine Welt! grep auf IPv4 sowie verschiedene IP-basierte Dinge zu finden.
Geoffc
"Entschuldigung an alle, die das bereits wussten" - Entschuldigen Sie sich nicht. Ein Zweck dieser Site ist es, gute Antworten auf häufig gestellte Fragen zu geben. Der Zweck dieser frühen Beta ist die Bereitstellung von Inhalten.
Stefan Lasiewski
Ich weiß, aber ich wollte sicherstellen, dass die fragende Person wusste, dass ich nicht versuchte, mit ihnen zu reden.
Matt Simmons
Ich habe die Frage gestellt und Sie haben nicht mit mir geredet. Ich kenne auch die Antwort, aber ich denke, es ist eine gute Frage für die Beta. Und Ihre Antwort war viel besser als alles, was ich schreiben würde;)
Stefan Lasiewski
@ MattSimmons gibt es keinen IsofBefehl in meinem CentOS 7.
Drei-Blöcke
10

Sie können netstat auch verwenden, um nach offenen Sockets zu suchen - es ist viel sauberer als die Verwendung von lsof, wie in den anderen Postern vorgeschlagen. Versuchen Sie diese Befehlszeile als root

netstat -lp -u -t

um alle Abhörverbindungen einschließlich der zugehörigen Pids und Programme anzuzeigen. Der Parameter -l gibt an, dass Verbindungen überwacht werden sollen, -p gibt an, dass die PID / der Name angezeigt werden sollen, und -t und -u geben an, dass nur TCP- und UDP-Verbindungen (IPv4 und IPv6) gewünscht werden.

Wenn Sie numerische Port- und Hostnamen sehen möchten (dh bei Hosts nicht aufgelöst und bei Ports nicht in Servicenamen umgewandelt), können Sie diese -nin die obige Befehlszeile einfügen.

EDIT: Das funktioniert unter Linux - ich weiß nicht, wie gut es unter BSD funktioniert, da ich keine BSD-basierten Boxen habe.

BR
quelle
+1: Dies ist die einzige Antwort, die tatsächlich den NTPD-Prozess anzeigt (der standardmäßig UDP überwacht).
Stefan Lasiewski
Für die Menschen: Ihre Flaggen entsprechennetstat --listen --programs --udp --tcp
Stefan Lasiewski 10.08.10
1
FreeBSD unterstützt das '-p' ("Show Programs") nicht, weshalb Leute LSOF benutzen. Es unterstützt auch nicht die Flags -l ("Show Listening Sockets"), aber ich denke, Sie können das mit tun | grep LISTEN, aber das schließt die UDP-Verbindungen aus. Aber ansonsten denke ich, dass die entsprechenden Flags unter FreeBSD: sind netstat -p udp -p tcp -a, aber netstat -aeinfacher sein könnten.
Stefan Lasiewski
@ Stefan: Meine Antwort zeigt auch UDP-Sockets.
kbyrd
@ kbyrd: Interessant. Es werden keine UDP-Pakete für mich angezeigt. Siehe meinen Kommentar zu Ihrem Beitrag.
Stefan Lasiewski
2

Unter FreeBSD können Sie auch sockstat verwenden, falls lsof für Sie nicht funktioniert (z. B. auf virtualisierten Systemen, die aus irgendeinem Grund nicht über / dev / mem verfügen). So rufen Sie eine Liste aller Programme mit empfangsbereiten IPv4-Sockets ab:

sockstat -l4
diz
quelle
1

Tun Sie als root Folgendes:

lsof | grep IPv4 | grep LISTEN

Dies zeigt Ihnen alle Prozesse, die IPv4-Sockets überwachen. Möglicherweise möchten Sie hinzufügen -b, um zu verhindern lsof, dass bestimmte Aktionen blockiert werden. Wenn Sie das tun, werden Sie wahrscheinlich auch umleiten möchten stderrzu /dev/null.

kbyrd
quelle
Für mich scheint dies keine udp-Pakete zu zeigen. Ich teste auf einer Ubuntu-Box, auf der rsyslogd läuft und die auf Port 514 / udp lauscht.
Stefan Lasiewski
Ich muss tun sudo lsof |grep UDP, um UDP-Pakete zu sehen.
Stefan Lasiewski
1

Mit können Sie lsofherausfinden, welche Anwendung diesen Socket verwendet.

txwikinger
quelle
0

Spielen Sie mit diesem 3-in-1-System unter OS X 10.9.5:

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

Graham Perrin
quelle
0

Verwenden Sie bei FreeBSD den -uSwitch, sodass ntpdatestattdessen ein nichtprivilegierter Port verwendet wird.

Mögen: ntpdate -v -b -u 0.freebsd.pool.ntp.org

Verwenden Sie, um man ntpdatezu sehen, was -vund -btut.

Monti
quelle
Das ntpdate unter Debian hat die -uOption, da es von ntp.org stammt. Ich stelle mir vor, die meisten Systeme haben es.
RobertL