लिनक्स नेटवर्किंग को कैसे डीबग करें: पहले से ही उपयोग में पता


10

मेरे पास एक 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 से जुड़ने की कोशिश "कनेक्शन ने इनकार कर दिया"
  • मैं कमांड को रूट के रूप में चला रहा हूं

1
क्या पोर्ट iptables -Sआउटपुट में कहीं भी उल्लिखित है ?
हरितु

1
क्या आप कृपया स्ट्रेस -ff nc -l 874 का आउटपुट भी प्रिंट कर सकते हैं , आपके द्वारा उपयोग किया जाने वाला स्रोत पोर्ट के रूप में 874 के साथ कनेक्शन बनाने की कोशिश कर रहा है। धन्यवाद!
अनिरुद्ध मल्होत्रा

2
पोर्ट को सुनते समय AFAIK लिनक्स को रूट विशेषाधिकारों की आवश्यकता होती है। 1000। शायद यही समस्या है।
कोरकटोर

2
क्या यह मेजबान एनएफएस क्लाइंट है? यह NFS माउंट के लिए स्रोत पोर्ट 874 का उपयोग कर सकता है। वैसे भी मैं netstat -na | grep 874आपके मौजूदा netstatझंडे बहुत प्रतिबंधक होने की स्थिति में कोशिश करूँगा ।
टॉम शॉ

1
@TomShaw आपने अभी-अभी मेरा दिन बनाया है! यह एनएफएस सब ठीक था। मुझे यकीन नहीं है कि यह वास्तव में कैसे हुआ, लेकिन सभी एनएफएस आरोहित करने और आरपीसी और एनएफएस सेवाओं को फिर से शुरू करने के बाद समस्या दूर हो गई है। Tcpdump के साथ मैंने पोर्ट 874 से लेकर पोर्ट 111 (मैंने पहले ऐसा क्यों नहीं सोचा था) के बारे में कुछ ट्रैफिक देखा, जो इसकी पुष्टि करता है। क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं?
रोलेवनमेकर

जवाबों:


4

यदि आपका होस्ट एक NFS क्लाइंट है, तो वह NFS माउंट के लिए स्रोत पोर्ट 874 का उपयोग कर सकता है। मुझे संदेह है कि क्योंकि कनेक्शन यूजरस्पेस से उत्पन्न नहीं होता है, इसलिए यह आपके द्वारा अब तक उपयोग किए गए टूल को दिखाई नहीं दे सकता है।

निम्नलिखित में से एक पर विचार करें:

  • NFS क्लाइंट द्वारा उपयोग किए जाने वाले स्रोत पोर्ट की श्रेणी को बदलने के लिए sysctls sunrpc.min_resvportऔर sunrpc.max_resvport(डिफ़ॉल्ट 665 और 1023) को समायोजित करें
  • इस सीमा के बाहर एक सुनने के बंदरगाह का उपयोग करें
  • का प्रयोग करें noresvportएनएफएस विशेषाधिकार रहित रेंज का उपयोग करने के माउंट पर विकल्प (सुरक्षा के प्रभाव हो सकता है)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.