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
quelle
iptables -S
Ausgabe erwähnt?netstat -na | grep 874
Fall würde ich es versuchen, falls Ihre aktuellennetstat
Flags zu restriktiv sind.Antworten:
Wenn Ihr Host ein NFS-Client ist, verwendet er möglicherweise den Quellport 874 für einen NFS-Mount. Ich vermute, dass die Verbindung, da sie nicht aus dem Benutzerbereich stammt, für die bisher verwendeten Tools möglicherweise nicht sichtbar ist.
Betrachten Sie eine der folgenden Möglichkeiten:
sysctl
ssunrpc.min_resvport
undsunrpc.max_resvport
(Standard 665 und 1023) an, um den Bereich der vom NFS-Client verwendeten Quellports zu ändernnoresvport
Option auf dem NFS-Mount, um den nicht privilegierten Bereich zu verwenden (kann Auswirkungen auf die Sicherheit haben).quelle