J'ai une boîte Linux Slackware où je ne peux démarrer aucun service qui écoute sur un port particulier sur localhost. En utilisant strace, j'ai découvert que l'erreur se produit lors de l' bind()
appel, et l'erreur est EADDRINUSE (Address already in use)
:
bind(3, {sa_family=AF_INET, sin_port=htons(874), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)
Cela se produit avec n'importe quel processus que j'essaie de commencer à écouter sur ce port, il n'est donc pas lié au processus lui-même. La sortie de strace ci-dessus provient de la commande strace -ff nc -l -p 874 -s 127.0.0.1
.
Donc, cela suggère qu'il existe déjà un processus d'écoute sur le port localhost 874. Cependant, je n'arrive pas à le trouver. Les commandes suivantes ne renvoient toutes rien:
netstat -aplunt | grep :874
netstat -na | grep :874
lsof -i :874
lsof -i tcp | grep 874
fuser 874/tcp
socklist | grep 874
iptables -t filter -S | grep 874
iptables -t nat -S | grep 874
iptables -t mangle -S | grep 874
conntrack -L | grep 874
Si j'essaie d'écouter, 0.0.0.0:874
il échoue avec la même erreur. L'écoute sur l'une des adresses IP configurées sur un nic fonctionne correctement, et l'écoute 127.0.0.2:874
fonctionne également correctement. L'écoute sur un autre port fonctionne bien, également sur 127.0.0.1
ou 0.0.0.0
.
Donc, maintenant je suis curieux. Comment savoir pourquoi la pile réseau renvoie EADDRINUSE ici? Quelles autres choses pourrais-je regarder ou quelles autres commandes puis-je exécuter pour obtenir plus d'informations?
Information additionnelle:
- Noyau 4.1.31.
- Selinux n'est pas utilisé ici.
- La tentative de connexion à 127.0.0.1 avec telnet renvoie "Connexion refusée"
- J'exécute les commandes en tant que root
netstat -na | grep 874
au cas où vos netstat
drapeaux actuels seraient trop restrictifs.
iptables -S
sortie?