मेरे पास एक Slackware linux box है जहाँ मैं ऐसी कोई भी सेवा शुरू नहीं कर सकता हूँ जो लोकलहोस्ट पर एक विशेष पोर्ट पर सुने। स्ट्रेस का उपयोग करके मुझे पता चला कि त्रुटि 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
।
तो, इससे पता चलता है कि लोकलहोस्ट पोर्ट 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।
- यहां सेलिनक्स का उपयोग नहीं किया गया है।
- टेलनेट रिटर्न के साथ 127.0.0.1 से जुड़ने की कोशिश "कनेक्शन ने इनकार कर दिया"
- मैं कमांड को रूट के रूप में चला रहा हूं
netstat -na | grep 874
आपके मौजूदा netstat
झंडे बहुत प्रतिबंधक होने की स्थिति में कोशिश करूँगा ।
iptables -S
आउटपुट में कहीं भी उल्लिखित है ?