У мене є вікно Linux Slackware, де я не можу запустити будь-яку службу, яка слухає на одному конкретному порту в localhost. За допомогою strace я з’ясував, що помилка трапляється під час bind()
виклику, і помилка 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)
Це відбувається з будь-яким процесом, який я намагаюся почати слухати на цьому порту, тому він не пов'язаний із самим процесом. Вищенаведений стразевий вихід походить від команди strace -ff nc -l -p 874 -s 127.0.0.1
.
Отже, це говорить про те, що на порталі localhost 874. вже прослуховується процес, однак, я не можу його знайти. Усі наступні команди нічого не повертають:
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
Якщо я спробую прослухати 0.0.0.0:874
це не вдається з тією ж помилкою. Прослуховування однієї з IP-адрес, налаштованих на нік, працює добре, а прослуховування 127.0.0.2:874
також працює нормально. Прослуховування на іншому порту чудово працює, також на 127.0.0.1
або 0.0.0.0
.
Отже, зараз мені цікаво. Як я можу дізнатися, чому мережевий стек повертає EADDRINUSE сюди? Які ще речі я можу переглянути, або які інші команди можна запустити, щоб отримати більше інформації?
Додаткова інформація:
- Ядро 4.1.31.
- Тут не використовується Selinux.
- Спроба підключитися до 127.0.0.1 з telnet повертає "З'єднання відмовлено"
- Я виконую команди як root
netstat -na | grep 874
якщо ваші поточні netstat
прапори занадто обмежуючі.
iptables -S
виході?