Was verwendet diesen Netzwerk-Socket?

Was verwendet diesen Netzwerk-Socket?

Ich versuche, die Uhrzeit auf meinem Computer mit NTP zu aktualisieren. Allerdings wird folgende Fehlermeldung angezeigt:

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 diesen Socket verwendet?

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

Antwort1

Du kannst tun

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

um alle Ihre Abhörports anzuzeigen, aber ich wette, dass ntpd läuft:

service ntpd status

Und was bedeutet „Socket in Verwendung“? Wenn man mir verzeihen kann, dass ich ein paar Falten glätte (und für die sehr grundlegende Erklärung entschuldige ich mich, dass das meiste davon für Sie eine Abhilfe ist) … TCP/IP (die Sprache des Internets) gibt an, dass jeder Computer eine IP-Adresse hat, die diesen Computer im Internet eindeutig identifiziert. Darüber hinaus gibt es an jeder IP-Adresse 65.000 nummerierte Ports, mit denen eine Verbindung hergestellt werden kann.

Wenn Sie eine Verbindung zu einem Webserver herstellen möchten, öffnen Sie die Site in Ihrem Browser, aber die zugrunde liegende Maschinerie verbindet Sie tatsächlich mit Port 80 auf 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 ihn für sich zu reservieren. Es kann immer nur ein Programm denselben Port verwenden.

Da Sie ntpd ausgeführt hatten, wurde dieser Port verwendet. „ntpdate“ hat versucht, auf diesen Port zuzugreifen, da dieser jedoch bereits offen gehalten wurde, wurde die Fehlermeldung „Socket bereits in Verwendung“ angezeigt.

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

Antwort2

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

netstat -lp -u -t

um alle Lauschverbindungen anzuzeigen, einschließlich der zugehörigen PIDs und Programme. Der Parameter -l gibt Lauschverbindungen an, -p gibt an, dass Sie die PID/den Namen sehen möchten, und -t und -u teilen netstat mit, dass Sie nur TCP- und UDP-Verbindungen (IPv4 und IPv6) möchten.

Wenn Sie numerische Port- und Hostnamen sehen möchten (d. h. im Fall von Hosts nicht aufgelöst und im Fall von Ports nicht in Dienstnamen umgewandelt), können Sie diese -nder obigen Befehlszeile hinzufügen.

BEARBEITEN:Dies funktioniert unter Linux. Ich weiß nicht, wie gut es unter BSD funktioniert, da ich keine BSD-basierten Boxen zur Hand habe.

Antwort3

Unter FreeBSD können Sie auch sockstat verwenden, falls lsof bei Ihnen nicht funktioniert (z. B. auf virtualisierten Systemen, die aus irgendeinem Grund kein /dev/mem haben). So erhalten Sie eine Liste aller Programme mit lauschenden IPv4-Sockets:

sockstat -l4

Antwort4

Sie können verwenden lsof, um herauszufinden, welche Anwendung diesen Socket verwendet.

verwandte Informationen