Qu'est-ce qui utilise cette prise réseau?

18

J'essaie d'utiliser NTP pour mettre à jour l'heure sur ma machine. Cependant, cela me donne une erreur:

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

Que signifie l'erreur "socket en cours d'utilisation"? Comment puis-je voir ce qui utilise cette prise?

Cela se produit sur mon système CentOS 4.x, mais je le vois également sur FreeBSD 7.x, Ubuntu 10.04 et Solaris 10.

Stefan Lasiewski
la source
In Stack Overflow: Quels processus utilisent quels ports sous Unix? (2008-09-24)
Graham Perrin

Réponses:

20

Tu peux faire

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

pour voir tous vos ports d'écoute, mais en dollars pour les beignets que ntpd exécute:

service ntpd status

Et en ce qui concerne "Que signifie socket utilisé"? Si je peux être pardonné de lisser certaines rides (et pour l'explication très basique, les excuses de la plupart de cela sont correctives pour vous) ... TCP / IP (la langue d'Internet) spécifie que chaque ordinateur a une adresse IP, qui identifie de façon unique cet ordinateur sur Internet. De plus, chaque adresse IP peut être connectée à 65 000 ports numérotés.

Lorsque vous souhaitez vous connecter à un serveur Web, vous ouvrez le site dans votre navigateur, mais la machine en dessous vous connecte en fait au port 80 sur l'IP du serveur Web. Le démon du serveur Web (le programme qui écoute les connexions au port 80) utilise un "socket" pour maintenir ouvert ce port, le réservant pour lui-même. Un seul programme peut utiliser le même port à la fois.

Puisque vous aviez ntpd en cours d'exécution, il utilisait ce port. 'ntpdate' a tenté d'accéder à ce port, mais comme il était déjà maintenu ouvert, vous avez eu l'erreur 'socket déjà utilisé'.

Modification également prise
en compte pour UDP

Matt Simmons
la source
1
lsof berce mon monde! grep sur IPv4 ainsi pour trouver diverses choses basées sur IP.
geoffc
"excuses à tous ceux qui le savaient déjà" - Ne vous excusez pas. L'un des objectifs de ce site est de fournir de bonnes réponses aux questions courantes. Le but de cette première version bêta est de fournir du contenu.
Stefan Lasiewski
Je sais, mais je voulais m'assurer que la personne qui demandait savait que je n'essayais pas de leur parler.
Matt Simmons
J'ai posé la question et vous ne me parliez pas. Je connais également la réponse, mais je pense que c'est une bonne question pour la version bêta. Et votre réponse était bien meilleure que tout ce que j'écrirais;)
Stefan Lasiewski
@MattSimmons il n'y a pas de Isofcommande dans mon CentOS 7.
3 blocs
10

Vous pouvez également utiliser netstat pour rechercher des prises ouvertes - c'est beaucoup plus propre que d'utiliser lsof comme les autres affiches l'ont suggéré. Essayez cette ligne de commande en tant que root

netstat -lp -u -t

pour afficher toutes les connexions d'écoute, y compris leurs pid et programmes associés. Le paramètre -l est ce qui spécifie les connexions d'écoute, -p spécifie que vous voulez voir le PID / nom et -t et -u indiquent à netstat que vous ne voulez que les connexions TCP et UDP (IPv4 et IPv6).

Si vous voulez voir les noms de port et d'hôte numériques (c'est-à-dire non résolus dans le cas des hôtes, et non transformés en noms de service dans le cas des ports), vous pouvez ajouter -nà la ligne de commande ci-dessus.

EDIT: Cela fonctionne sur Linux - je ne sais pas si cela fonctionne bien sur BSD, car je n'ai pas de boîtes basées sur BSD.

BR
la source
+1: C'est la seule réponse qui montre réellement le processus ntpd (qui écoute par défaut sur UDP).
Stefan Lasiewski
Pour les humains: vos drapeaux sont équivalents ànetstat --listen --programs --udp --tcp
Stefan Lasiewski
1
FreeBSD ne prend pas en charge le '-p' ("Show Programs"), c'est pourquoi les gens utilisent LSOF. Il ne prend pas non plus en charge les indicateurs -l ("Afficher les sockets d'écoute"), mais je pense que vous pouvez le faire avec | grep LISTEN, mais cela exclut les connexions UDP. Mais sinon, je pense que les drapeaux équivalents sur FreeBSD sont:, netstat -p udp -p tcp -amais netstat -apourraient être plus simples.
Stefan Lasiewski
@Stefan: Ma réponse montrera également les sockets UDP.
kbyrd
@kbyrd: Intéressant. Il ne montre pas les paquets UDP pour moi. Voir mon commentaire sur votre post.
Stefan Lasiewski
2

Sur FreeBSD, vous pouvez également utiliser sockstat au cas où lsof ne fonctionnerait pas pour vous (par exemple sur des systèmes virtualisés qui n'ont pas / dev / mem pour une raison quelconque). Pour obtenir une liste de tous les programmes avec des sockets IPv4 d'écoute:

sockstat -l4
diz
la source
1

En tant que root, procédez comme suit:

lsof | grep IPv4 | grep LISTEN

Cela vous montrera tous les processus qui écoutent sur les sockets IPv4. Vous voudrez peut-être ajouter -bpour éviter lsofde faire certaines choses qui pourraient le bloquer. Si vous faites cela, vous voudrez probablement aussi rediriger stderrvers /dev/null.

kbyrd
la source
Pour moi, cela ne semble pas montrer les paquets udp. Je teste sur une boîte Ubuntu qui exécute rsyslogd, en écoutant sur le port 514 / udp.
Stefan Lasiewski
Je dois faire sudo lsof |grep UDPpour voir les paquets UDP.
Stefan Lasiewski
1

Vous pouvez utiliser lsofpour trouver quelle application utilise ce socket.

txwikinger
la source
0

Jouant avec ce trois-en-un sur OS X 10.9.5:

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

Graham Perrin
la source
0

Avec FreeBSD, utilisez le -ucommutateur pour ntpdateutiliser un port non privilégié à la place.

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

Utilisez man ntpdatepour voir ce qui se passe -vet ce que vous -bfaites.

Monti
la source
Le ntpdate sur Debian a l' -uoption, puisqu'il vient de ntp.org, j'imagine que la plupart des systèmes l'ont.
RobertL