यह जानने के लिए कि क्या किसी प्रक्रिया ने कोई पोर्ट खोला है, "पढ़ें"


13

मुझे यह जानने की जरूरत है कि क्या किसी दिए गए पीआईडी ​​के साथ एक प्रक्रिया के रूप में बाहरी आदेशों का उपयोग किए बिना एक पोर्ट खोला गया है। मुझे तब /procफ़ाइल सिस्टम का उपयोग करना चाहिए । मैं /proc/$PID/net/tcpउदाहरण के लिए फ़ाइल पढ़ सकता हूं और प्रक्रिया द्वारा खोले गए टीसीपी पोर्ट के बारे में जानकारी प्राप्त कर सकता हूं । हालाँकि, एक multithreaded प्रक्रिया पर, /proc/$PID/task/$TIDनिर्देशिका में एक net/tcpफ़ाइल भी होगी । मेरा सवाल यह है कि :

क्या मुझे सभी थ्रेड net/tcpफ़ाइलों पर जाने की आवश्यकता है , या थ्रेड द्वारा खोले गए पोर्ट को प्रक्रिया net/tcpफ़ाइल में लिखा जाएगा ।

जवाबों:


23

मैं उदाहरण के लिए / proc / $ PID / net / tcp फ़ाइल पढ़ सकता हूं और प्रक्रिया द्वारा खोले गए TCP पोर्ट के बारे में जानकारी प्राप्त कर सकता हूं।

वह फ़ाइल प्रक्रिया द्वारा खोले गए tcp पोर्ट की सूची नहीं है । यह वर्तमान नेटवर्क नामस्थान में सभी खुले tcp पोर्ट्स की एक सूची है, और समान नेटवर्क नेमस्पेस में चलने वाली प्रक्रियाओं के लिए सामग्री के समान है /proc/net/tcp

अपनी प्रक्रिया द्वारा खोले गए बंदरगाहों को खोजने के लिए, आपको सॉकेट डिस्क्रिप्टर की एक सूची प्राप्त करने की आवश्यकता होगी /proc/<pid>/fd, और फिर उन डिस्क्रिप्टर के inodeक्षेत्र से मिलान करें /proc/net/tcp


आपके उत्तर के लिए धन्यवाद। और अगर प्रक्रिया को मल्टीथ्रेड किया जाता है, तो क्या मुझे fdप्रत्येक थ्रेड की सभी डायरेक्टरी पर जाने की आवश्यकता है ? या /proc/pid/fdनिर्देशिका "विरासत" /proc/pid/task/tid/fdनिर्देशिका करता है?
रुमंजो

मुझे यकीन नहीं है, लेकिन यह परीक्षण करने के लिए एक आसान बात की तरह लगता है।
लार्क्स

8
@rmonjo थ्रेड्स फाइलें नहीं खोल सकते, केवल प्रक्रियाएं ही कर सकती हैं। fdएक धागा की निर्देशिका सिर्फ दोहराता fdप्रक्रिया की निर्देशिका।
गिल्स एसओ- बुराई को रोकना '

0

कृप्या

cat /proc/$PID/net/tcp

और आपको इस तरह आउटपुट मिलेगा

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
  0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 2891985097 1 0000000000000000 100 0 0 10 0

आउटपुट का दूसरा कॉलम (local_address) Hexadecimal में पोर्ट दिखाता है। हेक्स कोड को दशमलव में बदलने के लिए अपने प्रोग्रामिंग कैलकुलेटर का उपयोग करें।

उदाहरण के लिए यहाँ, पोर्ट: 01BB (हेक्स में) 433 (दशमलव में) के बराबर है जो HTTF डिफ़ॉल्ट पोर्ट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.