मुझे / proc / fd में सॉकेट फ़ाइलों के बारे में अधिक जानकारी कैसे मिलेगी?


33

/ Proc / $ mypid / fd / में देख रहा हूं, मैं इन फाइलों को देखता हूं

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

क्योंकि मेरे पास कोड तक पहुंच है, मुझे पता है कि ये सॉकेट टीसीपी कनेक्शन से जुड़े हैं (एक मशीन पर 5672 पोर्ट के लिए एक कनेक्शन है, दूसरा किसी अन्य मशीन पर 3306 पोर्ट के लिए एक कनेक्शन है), लेकिन मैं जानना चाहता हूं कि कौन सा सॉकेट है किस संबंध से बंधे। मैं उसे कैसे कर सकता हूँ?

अधिक आम तौर पर, मैं ओएस से कैसे पूछ सकता हूं कि सॉकेट के दूसरे छोर पर क्या है?


1
का उपयोग करें socat....
heemayl

जवाबों:


40

कमांड lsof

एक अच्छा विकल्प हो सकता है lsof। जैसा कि man lsofबताता है कि इसके बारे में जानकारी प्राप्त करना आसान है open files such as Internet sockets or Unix Domain sockets


उसका इस्तेमाल कर रहे हैं

सबसे पहले, के बारे में /proc/$PID/fd/और सूचीबद्ध सॉकेट संख्याओं का अवलोकन करें ।
उदाहरण के लिए, socket:[14240]आपकी रुचि हो सकती है।

फिर उपयोग की lsof -i -a -p $PIDजाने वाली सभी नेटवर्क फ़ाइलों की सूची को प्रिंट करने के लिए $PIDउपयोग करें।

  • -i उपयोगकर्ता या प्रक्रिया से संबंधित नेटवर्क फ़ाइलों की एक सूची तैयार करता है

  • -a तार्किक रूप से संयोजित और AND दिए गए पैरामीटर

  • -p $PID केवल आपकी प्रक्रिया के बारे में जानकारी का चयन करता है

2543हो सकता है कि मेरे PID के साथ चलने वाले मेरे ब्राउज़र के लिए एक सामान्य आउटपुट :

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

और इसी तरह की लाइनें।

महान! अब DEVICEकॉलम पर करीब से नज़र डालें । यह हमारे पहले से सूचीबद्ध सॉकेट से मेल खाता है /proc/$PID/fd/!
और NAMEअनुभाग के लिए धन्यवाद हम कह सकते हैं कि हमारे सॉकेट का दूसरा छोर क्या है।

एक वास्तविक दुनिया चलाने में आपको अच्छी मात्रा में आउटपुट मिल सकता है, लेकिन बस फ़िल्टर करें या grepअपनी रुचि के सॉकेट के लिए।

मुझे पूरा यकीन है कि कोई भी सभी आदेशों को जोड़ सकता है, लेकिन आपको शुरू करने के लिए पर्याप्त होना चाहिए।


धन्यवाद! उत्कीर्ण और स्वीकृत। मैं एक सॉकेट को "यूनिक्स 0xffff88002704d380 0t0 1423733559 सॉकेट" के रूप में दिखा रहा हूं, मैं कैसे 0xffff88002704d380 में खुदाई करता हूं?
बेन्हसु

1
"यूनिक्स 0xfff ..." एक यूनिक्स_स्कॉक संरचना के कर्नेल मेमोरी एड्रेस की तरह लगता है। इस संरचना में आपके सॉकेट-एंड पॉइंट के लिए एक पॉइंटर होता है। देख लेना grep -rni ffff88002704d380 /proc। आपके जवाब के तहत कहीं भी / proc / झूठ बोल सकते हैं, catआपकी फ़ाइल grep मिली। लेकिन इस पर मुझे पिन न करें ... यहाँ भयानक गलत हो सकता है।
13

lsofसे सॉकेट बारे में अन्य जानकारी पढ़ता है /proc/net/tcp, /proc/net/tcp6, /proc/net/udp, और इतने सॉकेट प्रकार पर निर्भर करता है।
जेसिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.