इस नेटवर्क सॉकेट का उपयोग क्या है?


18

मैं अपनी मशीन पर समय को अपडेट करने के लिए NTP का उपयोग करने की कोशिश कर रहा हूं। हालाँकि, यह मुझे एक त्रुटि देता है:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

"सॉकेट उपयोग में है" त्रुटि का क्या मतलब है? मैं कैसे देख सकता हूं कि इस सॉकेट का उपयोग क्या है?

यह मेरे CentOS 4.x सिस्टम पर होता है, लेकिन मैं इसे FreeBSD 7.x, Ubuntu 10.04 और Solaris 10 पर भी देखता हूं।


जवाबों:


20

तुम कर सकते हो

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

आपके सभी सुनने वाले बंदरगाहों को देखने के लिए, लेकिन डोनट्स के लिए डॉलर जो ntpd चल रहा है:

service ntpd status

और "उपयोग में सॉकेट" का क्या मतलब है? अगर मुझे कुछ झुर्रियों को खत्म करने के लिए माफ़ किया जा सकता है (और बहुत ही बुनियादी स्पष्टीकरण के लिए, तो इसमें से अधिकांश की माफी आपके लिए उपचारात्मक है) ... टीसीपी / आईपी (इंटरनेट की भाषा) निर्दिष्ट करती है कि प्रत्येक कंप्यूटर का एक आईपी पता है, जो विशिष्ट रूप से इंटरनेट पर उस कंप्यूटर की पहचान करता है। इसके अलावा, प्रत्येक आईपी पते पर 65,000 नंबर पोर्ट किए गए हैं, जिनसे कनेक्ट किया जा सकता है।

जब आप एक वेब सर्वर से कनेक्ट करना चाहते हैं, तो आप अपने ब्राउज़र में साइट खोलते हैं, लेकिन नीचे की मशीनरी वास्तव में आपको वेब सर्वर के आईपी पर पोर्ट 80 से कनेक्ट कर रही है। वेब सर्वर का डेमॉन (पोर्ट 80 के कनेक्शन के लिए सुनने वाला प्रोग्राम) उस पोर्ट को खुला रखने के लिए "सॉकेट" का उपयोग करता है, जिसे वह अपने लिए रखता है। एक समय में केवल एक ही प्रोग्राम एक ही पोर्ट का उपयोग कर सकता है।

चूंकि आपके पास ntpd चल रहा था, यह उस पोर्ट का उपयोग कर रहा था। 'ntpdate' ने उस पोर्ट को एक्सेस करने की कोशिश की, लेकिन चूंकि यह पहले से ही खुला था, इसलिए आपको 'सॉकेट पहले से ही उपयोग में' मिल गया।


UDP के लिए भी खाते में परिवर्तन संपादित करें


1
lsof चट्टानों मेरी दुनिया! IPv4 पर grep और साथ ही विभिन्न IP आधारित चीजों को खोजने के लिए।
geoffc

"उन सभी से क्षमा याचना जो पहले से ही यह जानते थे" - माफी न मांगें। इस साइट का एक उद्देश्य सामान्य प्रश्नों के अच्छे उत्तर प्रदान करना है। इस शुरुआती बीटा का उद्देश्य सामग्री प्रदान करना है।
स्टीफन लासिवस्की

मुझे पता है, लेकिन मैं यह सुनिश्चित करना चाहता था कि पूछने वाला व्यक्ति जानता था कि मैं उनसे बात करने की कोशिश नहीं कर रहा था।
मैट सिमंस

मैंने सवाल पूछा, और आप मुझसे बात नहीं कर रहे थे। मुझे इसका उत्तर भी पता है, लेकिन मुझे लगता है कि यह बीटा के लिए एक अच्छा सवाल है। और आपका जवाब बहुत बेहतर था तो मैं जो कुछ भी लिखूंगा;)
स्टीफन लासिवस्की

@MattSimmons Isofमेरे CentOS 7 में कोई कमांड नहीं है
तीन

10

आप ओपन सॉकेट देखने के लिए नेटस्टैट का भी उपयोग कर सकते हैं - यह lsof का उपयोग करने की तुलना में बहुत साफ है जैसा कि अन्य पोस्टरों ने सुझाव दिया है। रूट के रूप में इस कमांड लाइन का प्रयास करें

netstat -lp -u -t

सभी संबंधित कनेक्शन देखने के लिए, उनके संबंधित पिड और कार्यक्रमों सहित। -L पैरामीटर वही है जो सुनने के कनेक्शन को निर्दिष्ट करता है, -p निर्दिष्ट करता है कि आप PID / नाम और -t देखना चाहते हैं और-net netat को बताएं कि आप केवल TCP और UDP कनेक्शन (IPv4 और IPv6) चाहते हैं।

यदि आप संख्यात्मक पोर्ट और होस्ट नाम देखना चाहते हैं (अर्थात मेजबानों के मामले में हल नहीं किया गया है, और बंदरगाहों के मामले में सेवा नामों में नहीं बदला जाता है), तो आप -nऊपर दिए गए कमांड लाइन में जोड़ सकते हैं ।

संपादित करें: यह लिनक्स पर काम करता है - मुझे नहीं पता कि यह बीएसडी पर कितना अच्छा काम करता है, क्योंकि मेरे पास कोई बीएसडी-आधारित बॉक्स नहीं है।


+1: यह एकमात्र उत्तर है जो वास्तव में ntpd प्रक्रिया दिखाता है (जो डिफ़ॉल्ट रूप से UDP पर सुनता है)।
स्टेफान लासिवस्की 20

मनुष्यों के लिए: आपके झंडे बराबर हैंnetstat --listen --programs --udp --tcp
स्टीफन लासिवस्की

1
FreeBSD '-p' ("कार्यक्रम दिखाएं") का समर्थन नहीं करता है, यही कारण है कि लोग LSOF का उपयोग करते हैं। यह -l ("शो सुनकर सॉकेट्स") झंडे का भी समर्थन नहीं करता है, लेकिन मुझे लगता है कि आप ऐसा कर सकते हैं | grep LISTEN, लेकिन यह यूडीपी कनेक्शन को बाहर करता है। लेकिन अन्यथा, मुझे लगता है कि FreeBSD पर बराबर झंडे हैं: netstat -p udp -p tcp -aलेकिन netstat -aसरल हो सकता है।
स्टीफन लासिवस्की

@ सैटेफैन: मेरा जवाब यूडीपी सॉकेट्स को भी दिखाएगा।
kbyrd

@ क्रिकेट: दिलचस्प। यह मेरे लिए UDP पैकेट नहीं दिखाता है। मेरी टिप्पणी अपनी पोस्ट पर देखें।
स्टेफन लासवर्स्की

2

FreeBSD पर, आप sockstat का उपयोग उस स्थिति में भी कर सकते हैं जब तक lsof आपके लिए काम नहीं करता (उदाहरण के लिए वर्चुअलाइज्ड सिस्टम पर जो किसी भी कारण से / dev / mem नहीं है)। IPv4 सॉकेट सुनने के साथ सभी कार्यक्रमों की एक सूची प्राप्त करने के लिए:

sockstat -l4

1

जड़ के रूप में, यह करें:

lsof | grep IPv4 | grep LISTEN

यह आपको उन सभी प्रक्रियाओं को दिखाएगा जो IPv4 सॉकेट्स पर सुन रहे हैं। आप कुछ चीजों को करने से -bरोकने के लिए जोड़ना lsofचाह सकते हैं जो इसे अवरुद्ध कर सकते हैं। यदि आप करते हैं तो आप शायद भी रीडायरेक्ट करने के लिए चाहता हूँ कि stderrकरने के लिए /dev/null


मेरे लिए, यह udp पैकेट दिखाने के लिए प्रतीत नहीं होता है। मैं एक उबंटू बॉक्स पर परीक्षण कर रहा हूं जो rsyslogd चल रहा है, पोर्ट 514 / udp पर सुन रहा है।
स्टेफान लासिवस्की

मुझे sudo lsof |grep UDPUDP पैकेट देखने के लिए करने की आवश्यकता है ।
स्टेफन लासिवस्की 22

1

आप lsofइस सॉकेट का उपयोग किस एप्लिकेशन को खोजने के लिए कर सकते हैं ।



0

FreeBSD के साथ उपयोग करें -u स्विच का करें ताकि ntpdateइसके बजाय एक unprivileged पोर्ट का उपयोग करें।

पसंद: ntpdate -v -b -u 0.freebsd.pool.ntp.org

का प्रयोग करें man ntpdateदेखने के लिए क्या -vऔर -bनहीं करता है।


डेबियन पर ntpdate का -uविकल्प है, क्योंकि यह ntp.org से है, मुझे लगता है कि अधिकांश सिस्टम में यह है।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.