कैसे पता करें कि कुछ PID द्वारा किस पोर्ट की बात सुनी जाती है?


13

मेरे ओएस एक्स पर कुछ पोर्ट (एस) को सुनने के लिए कुछ निश्चित प्रक्रिया का एक पीआईडी ​​है और मुझे यह जानने की जरूरत है कि किस पोर्ट (एस) को इस प्रक्रिया द्वारा सुना गया है। मैं यह कैसे कर सकता हूं?

मुझे पता है कि मैं यह lsofजानने के लिए उपयोग कर सकता हूं कि कौन सी प्रक्रिया कुछ पोर्ट सुन रही है, लेकिन मुझे एक उलटा ऑपरेशन करने की आवश्यकता है।

धन्यवाद।

युपीडी

ओएस एक्स बीएसडी बर्तनों का उपयोग करता है, इसलिए मेरे पास बीएसडी netstatनहीं लिनक्स है netstat। लिनक्स netstatमें -pपीआईडी ​​दिखाने का विकल्प है, पोर्ट निर्दिष्ट करने के लिए बीएसडी netstatउपयोग करता -pहै और पीआईडी ​​दिखाने के लिए कोई विकल्प नहीं है।


क्या आपके कहने का मतलब यह है कि आप उन बंदरगाहों को खोजने की कोशिश कर रहे हैं जिन पर एक प्रक्रिया चल रही है? netstatआप के लिए यह कर सकते हैं। आप grepपीआईडी ​​पर कर सकते हैं यदि आप netstat
सेंटिमेन

lsofउपयोग भी केवल एक ही रास्ता नहीं है। आप कुछ ऐसा कर सकते हैं lsof|grep ${PID}। जो हर चीज को बुरी तरह से डुबो देगा और grepउन में पीआईडी ​​के साथ लाइनें चुन लेगा। बंद मौका में, यह एक अप्रासंगिक रेखा को सूचीबद्ध कर सकता है, पीआईडी ​​संख्या के कारण गलती से कुछ अन्य मूल्य मिलान करते हैं, लेकिन संभावना कोई भी पतला नहीं है
मेलबर्सलान

@ बताइए, हां, आप मुझे फॉलो करें। अलैक, जैसा कि मैं देख सकता हूं, बीएसडी संस्करण netstatपीआईडी ​​प्रदर्शित नहीं कर सकता है।
शौ-कोट

@MelBurslan यह साफ समाधान की तरह नहीं दिखता है। इसके अलावा यह तेज़ नहीं है - मेरे एमबीपी पर कुछ समय लगता है।
शाऊ-कोटे

जवाबों:


13

मैंने गहरे पढ़ने के द्वारा अपने दम पर एक समाधान पाया है man lsof। (हां, RT * M अभी भी मदद करता है।) लक्ष्य करने के लिए धन्यवाद @Gilles।

यहाँ समाधान है: lsof -aPi -p 555 (555 पीआईडी ​​है)।

स्पष्टीकरण:

  1. -p पीआईडी ​​संख्या निर्दिष्ट करने के लिए;
  2. -i केवल नेटवर्क उपकरणों को प्रदर्शित करने के लिए;
  3. -a ऊपर और दो शर्तों के लिए (अन्यथा वे ओर्डेड होंगे);
  4. -P पोर्ट नंबर प्रदर्शित करने के लिए (बजाय डिफ़ॉल्ट रूप से पोर्ट नाम)।

इसके अतिरिक्त, कोई भी IPv4 या IP6 के लिए उपयोग कर सकता है lsof -aPi4 -p 555या उसके lsof -aPi6 -p 55अनुसार ही पते दे सकता है।

यदि आउटपुट दूसरे प्रोग्राम द्वारा पार्स किया जाएगा तो -Fnविकल्प मददगार हो सकता है। इस विकल्प के साथ lsofअच्छा स्वरूपित आउटपुट के बजाय "अन्य प्रोग्राम के लिए आउटपुट" का उत्पादन करेगा। lsof -aPi4 -Fn -p 555कुछ इस तरह उत्पादन होगा:

p554
nlocalhost:4321

PS यह सब मैंने अपने OS X El Capitan पर परीक्षण किया है, लेकिन जैसा कि मैं देख सकता हूं कि इसे लिनक्स पर भी काम करना चाहिए।


6

lsofनेटवर्क पोर्ट सहित प्रक्रियाओं द्वारा खोली गई फ़ाइलों के बारे में जानकारी प्रदान करता है। यह OSX सहित बहुत सारे यूनिक्स सिस्टम पर उपलब्ध है ।

यूनिक्स के लिए रोसेटा स्टोन पर OSX "फ़ाइल या बंदरगाह के लिए मैच प्रक्रिया" के लिए किसी भी अन्य उपकरण की सूची नहीं है।

टीसीपी पोर्ट पर सुनने की प्रक्रियाओं को सूचीबद्ध करने के लिए, आप उपयोग कर सकते हैं

lsof -iTCP -sTCP:LISTEN

lsof -iUDPUDP सॉकेट खोलने वाली प्रक्रियाओं को सूचीबद्ध करता है। lsof -iसभी खुले नेटवर्क सॉकेट (टीसीपी क्लाइंट, टीसीपी सर्वर और अन्य आईपी प्रोटोकॉल) को सूचीबद्ध करता है।


0

यदि आप जानना चाहते हैं कि कौन सा पोर्ट सुन रहा है तो आप netstat -p विकल्प का उपयोग कर सकते हैं। आपको सुपरयुजर होने की आवश्यकता है:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

यदि आप इसके बारे में अधिक जानना चाहते हैं तो इस लिंक को आज़माएं


यह जीएनयू के बारे में है netstat, मेरे पास ओएस एक्स है और इसलिए बीएसडी का उपयोग करें netstat। यह -pटीसीपी / आईपी पोर्ट निर्दिष्ट करने के लिए उपयोग करता है, और इसमें पीआईडी ​​प्रदर्शित करने का विकल्प नहीं है।
शाऊ-कोटे

0

FreeBSD पर, आप sockstatइस जानकारी के लिए उपयोग कर सकते हैं । मुझे यकीन नहीं है कि क्या ओएस एक्स है sockstat, क्योंकि मेरे पास मैक नहीं है।

उदाहरण के लिए, सभी TCPv4 कनेक्शन देखने के लिए:

sockstat -4


अलैक, sockstatमेरे मैक पर कमांड नहीं है । :(
शाऊ-कोटे

0

आप नेटस्टैट को grep, awk और sed से दिखा सकते हैं, ताकि वे लिनक्स और ग्रेगस पर अपने संबंधित पाइड्स के साथ पोर्ट दिखा सकें:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

अधिक जानकारी

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