2009-05-08 11 views
6

क्या उपयोगकर्ता-स्थान या कर्नेल में सी का उपयोग कर लिनक्स में सभी खुले सॉकेट (सॉकेट पता या सॉकेट डिस्क्रिप्टर) की सूची प्राप्त करने का कोई तरीका है?सी का उपयोग कर लिनक्स में खुले सॉकेट की सूची कैसे प्राप्त करें?

धन्यवाद

उत्तर

16

ओपन और निम्न को पढ़ें:

/proc/net/tcp - खुला यूडीपी सॉकेट

की एक सूची

/proc/net/raw - - सब एक सूची एक खुला TCP सॉकेट

की

/proc/net/udp सूची "कच्चे" सॉकेट

ये "नियमित" फाइलें हैं जिन्हें आप खोलते हैं और पढ़ते हैं फाइलहेडल और आपको वह सारी जानकारी देगा जो आपको प्रत्येक सॉकेट के बारे में संभवतः हो सकती है।

+3

इसके अलावा/proc/net/यूनिक्स सूचीबद्ध करता है यूनिक्स डोमेन सॉकेट पार्स करने के लिए कैसे कर सकते हैं। – zoom23

0

कच्चा डेटा/proc/net/tcp,/proc/net/udp, आदि पर पाया जा सकता है। (Terse) विवरण के लिए पहली पंक्ति में शीर्षलेख का संदर्भ लें।

3

निर्देशिका/proc/self में/एफडी आप अपने सभी खुले फ़ाइल वर्णनकर्ता दे रही है नकली सिमलिंक देखते हैं - सॉकेट की तरह कुछ दे:

lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921] 
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918] 
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395] 

उन्हें opendir का उपयोग कर दोहराएं, readdir() और फिर readlink का उपयोग कर उन्हें पूछताछ()

यदि आप जानते हैं कि एफडी 4 एक सॉकेट है, तो आप बाध्य होने पर स्थानीय पता परिवार, पता आदि प्राप्त करने के लिए उस पर getockname() को कॉल कर सकते हैं।

+0

यह सभी सॉकेट के लिए काम नहीं करता है। ज्यादातर, मैं यहां अपने टर्मिनलों को देखता हूं। कई कनेक्शन खोलने के साथ, सभी सॉकेट दिखाई नहीं दे रहे हैं। शेन मेसन ने जो कुछ भी उल्लेख किया है उसके अलावा अच्छा उपकरण भी कम है। धन्यवाद। उदाहरण के लिए –

4

इस कार्यक्रम आप के लिए उपयोगी हो सकता है और यह दर्शाता है/नेट/proc/* फ़ाइलों sockstat.c

+0

धन्यवाद। मैं बस/proc/self/fd के माध्यम से जाने जा रहा था और जांचता हूं कि कौन से लिंक सॉकेट हैं और इस तरह से सूची उत्पन्न करते हैं। मैं यहां अपने समाधान के साथ एक अद्यतन पोस्ट करूंगा। धन्यवाद फिर से –

+0

लिंक अब काम नहीं कर रहा है, हालांकि इसके लिए Google की खोज कई प्रतियां पाती है। –

संबंधित मुद्दे

 संबंधित मुद्दे