Ich habe eine Slackware-Linux-Box, in der ich keinen Dienst starten kann, der einen bestimmten Port auf localhost überwacht. Durch die Verwendung von strace habe ich herausgefunden, dass der Fehler beim bind()
Aufruf auftritt und der Fehler ist 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)
Dies geschieht bei jedem Prozess, bei dem ich versuche, diesen Port abzuhören, sodass er nicht mit dem Prozess selbst zusammenhängt. Die obige Strace-Ausgabe stammt vom Befehl strace -ff nc -l -p 874 -s 127.0.0.1
.
Dies deutet darauf hin, dass auf localhost port 874 bereits ein Prozess abhört. Ich kann ihn jedoch nicht finden. Die folgenden Befehle geben alle nichts zurück:
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
Wenn ich versuche zuzuhören 0.0.0.0:874
, schlägt dies mit demselben Fehler fehl. Das Abhören einer der auf einem Netzwerk konfigurierten IP-Adressen funktioniert einwandfrei, und das Abhören 127.0.0.2:874
funktioniert ebenfalls einwandfrei. Das Abhören an einem anderen Port funktioniert einwandfrei, auch an 127.0.0.1
oder 0.0.0.0
.
Also jetzt bin ich neugierig. Wie kann ich hier herausfinden, warum der Netzwerkstapel EADDRINUSE zurückgibt? Welche anderen Dinge könnte ich mir ansehen oder welche anderen Befehle kann ich ausführen, um weitere Informationen zu erhalten?
Zusätzliche Information:
- Kernel 4.1.31.
- Selinux wird hier nicht verwendet.
- Beim Versuch, mit Telnet eine Verbindung zu 127.0.0.1 herzustellen, wird "Verbindung abgelehnt" zurückgegeben.
- Ich führe die Befehle als root aus
netstat -na | grep 874
Fall würde ich es versuchen, falls Ihre aktuellen netstat
Flags zu restriktiv sind.
iptables -S
Ausgabe erwähnt?