ฉันมีกล่อง Slackware linux ที่ฉันไม่สามารถเริ่มบริการใด ๆ ที่ฟังพอร์ตใดพอร์ตหนึ่งบน 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 strace -ff nc -l -p 874 -s 127.0.0.1
ข้างต้นมาจากคำสั่ง
ดังนั้นสิ่งนี้ชี้ให้เห็นว่ามีกระบวนการที่กำลังฟังบนโลคัลโฮสต์พอร์ต 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 ที่กำหนดค่าบน nic ทำงานได้ดีและการฟัง127.0.0.2:874
ก็ใช้ได้เช่นกัน ฟังบนพอร์ตที่แตกต่างกันทำงานได้ดียังอยู่หรือ127.0.0.1
0.0.0.0
ดังนั้นตอนนี้ฉันอยากรู้ ฉันจะรู้ได้อย่างไรว่าทำไมเครือข่ายสแต็คส่งคืน EADDRINUSE ที่นี่ ฉันสามารถดูสิ่งอื่นใดหรือคำสั่งอื่นใดที่ฉันสามารถเรียกใช้เพื่อรับข้อมูลเพิ่มเติม
ข้อมูลเพิ่มเติม:
- เคอร์เนล 4.1.31
- Selinux ไม่ได้ใช้ที่นี่
- กำลังพยายามเชื่อมต่อกับ 127.0.0.1 ด้วย telnet ส่งคืน "การเชื่อมต่อถูกปฏิเสธ"
- ฉันใช้คำสั่งเป็นรูต
netstat -na | grep 874
ในกรณีที่netstat
สถานะปัจจุบันของคุณเข้มงวดเกินไป
iptables -S
เอาต์พุตหรือไม่?