Ho un box Linux Slackware in cui non riesco ad avviare alcun servizio in ascolto su una porta particolare su localhost. Usando strace ho scoperto che l'errore si verifica sulla bind()
chiamata e l'errore è 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)
Questo succede con qualsiasi processo che provo ad iniziare ad ascoltare su quella porta, quindi non è correlato al processo stesso. L'output di strace sopra viene dal comando strace -ff nc -l -p 874 -s 127.0.0.1
.
Quindi, questo suggerisce che esiste già un processo in ascolto sulla porta localhost 874. Tuttavia, non riesco a trovarlo. I seguenti comandi non restituiscono nulla:
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
Se provo ad ascoltarlo 0.0.0.0:874
fallisce con lo stesso errore. L'ascolto su uno degli indirizzi IP configurati su nic funziona bene e l'ascolto 127.0.0.2:874
funziona anche bene. L'ascolto su una porta diversa funziona bene, anche su 127.0.0.1
o 0.0.0.0
.
Quindi, ora sono curioso. Come posso scoprire perché lo stack di rete restituisce EADDRINUSE qui? Quali altre cose potrei guardare o quali altri comandi posso eseguire per ottenere maggiori informazioni?
Informazioni addizionali:
- Kernel 4.1.31.
- Selinux non è usato qui.
- Tentativo di connessione a 127.0.0.1 con ritorni telnet "Connessione rifiutata"
- Sto eseguendo i comandi come root
netstat -na | grep 874
nel caso in cui le tue netstat
bandiere attuali siano troppo restrittive.
iptables -S
nell'output?