Mam pole linuksowe Slackware, w którym nie mogę uruchomić żadnej usługi, która nasłuchuje na jednym porcie na localhost. Za pomocą strace dowiedziałem się, że błąd występuje podczas bind()
połączenia, a błąd jest następujący 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)
Dzieje się tak z każdym procesem, który próbuję rozpocząć nasłuchiwaniem na tym porcie, więc nie jest to związane z samym procesem. Powyższe dane wyjściowe strace pochodzą z polecenia strace -ff nc -l -p 874 -s 127.0.0.1
.
Sugeruje to, że proces już nasłuchuje na porcie lokalnym hosta 874. Jednak nie mogę go znaleźć. Następujące polecenia nic nie zwracają:
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
Jeśli spróbuję nasłuchiwać 0.0.0.0:874
, zakończy się niepowodzeniem z tym samym błędem. Słuchanie na jednym z adresów IP skonfigurowanych na nic działa OK, a słuchanie 127.0.0.2:874
również działa OK. Słuchanie na innym porcie działa dobrze, również na 127.0.0.1
lub 0.0.0.0
.
Więc teraz jestem ciekawa. Jak mogę dowiedzieć się, dlaczego stos sieci zwraca EADDRINUSE tutaj? Na jakie inne rzeczy mogę patrzeć lub jakie inne polecenia mogę uruchomić, aby uzyskać więcej informacji?
Dodatkowe informacje:
- Jądro 4.1.31.
- Selinux nie jest tutaj używany.
- Próba połączenia z 127.0.0.1 za pomocą usługi Telnet zwraca komunikat „Odmowa połączenia”
- Uruchamiam polecenia jako root
netstat -na | grep 874
w przypadku aktualne netstat
flagi są zbyt restrykcyjne.
iptables -S
danych wyjściowych?