Saya memiliki kotak linux Slackware di mana saya tidak dapat memulai layanan apa pun yang mendengarkan pada satu port tertentu di localhost. Dengan menggunakan strace saya menemukan bahwa kesalahan terjadi pada bind()
panggilan, dan kesalahannya adalah 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)
Ini terjadi pada setiap proses yang saya coba untuk mulai mendengarkan pada port itu, jadi itu tidak terkait dengan proses itu sendiri. Output strace di atas berasal dari perintah strace -ff nc -l -p 874 -s 127.0.0.1
.
Jadi, ini menunjukkan ada proses yang sudah mendengarkan di localhost port 874. Namun, sepertinya saya tidak dapat menemukannya. Semua perintah berikut tidak menghasilkan apa-apa:
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
Jika saya mencoba mendengarkannya 0.0.0.0:874
gagal dengan kesalahan yang sama. Mendengarkan salah satu alamat IP yang dikonfigurasi pada nic berfungsi dengan baik, dan mendengarkan 127.0.0.2:874
juga berfungsi dengan baik. Mendengarkan pada port yang berbeda berfungsi dengan baik, juga pada 127.0.0.1
atau 0.0.0.0
.
Jadi, sekarang saya penasaran. Bagaimana saya bisa mengetahui mengapa tumpukan jaringan mengembalikan EADDRINUSE di sini? Apa hal lain yang bisa saya lihat, atau perintah apa yang bisa saya jalankan untuk mendapatkan informasi lebih lanjut?
Informasi tambahan:
- Kernel 4.1.31.
- Selinux tidak digunakan di sini.
- Mencoba terhubung ke 127.0.0.1 dengan pengembalian telnet "Sambungan ditolak"
- Saya menjalankan perintah sebagai root
netstat -na | grep 874
jika netstat
bendera Anda saat ini terlalu ketat.
iptables -S
output?