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:874fallisce con lo stesso errore. L'ascolto su uno degli indirizzi IP configurati su nic funziona bene e l'ascolto 127.0.0.2:874funziona anche bene. L'ascolto su una porta diversa funziona bene, anche su 127.0.0.1o 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 874nel caso in cui le tue netstatbandiere attuali siano troppo restrittive.
iptables -Snell'output?