एक बंदरगाह का उपयोग करके प्रक्रिया का निर्धारण करें, बिना सूडो के


11

मुझे यह पता लगाना है कि कौन सी प्रक्रिया (विशेष रूप से, प्रक्रिया आईडी) एक दिए गए पोर्ट का उपयोग कर रही है। एक पकड़ है, मैं sudo का उपयोग नहीं करना चाहता, और न ही मैं रूट के रूप में लॉग इन हूं। मैं जिन प्रक्रियाओं के लिए काम करना चाहता हूं, वे उसी उपयोगकर्ता द्वारा चलाए जाते हैं जिसे मैं प्रक्रिया आईडी खोजना चाहता हूं - इसलिए मैंने सोचा होगा कि यह सरल था।

दोनों lsofऔर netstatजब तक मैं उन्हें sudo का उपयोग कर चलाए मुझे प्रक्रिया आईडी बता नहीं होगा - वे मुझे बता देगा कि बंदरगाह हालांकि किया जा रहा है।

कुछ अतिरिक्त संदर्भ के रूप में - मेरे पास विभिन्न ऐप हैं जो एसएसएच के माध्यम से सभी सर्वर से जुड़ते हैं जो मैं प्रबंधित करता हूं, और रिवर्स पोर्ट फॉरवर्ड बनाता हूं। एक बार जब वे सेट हो जाते हैं, तो मेरा सर्वर अग्रेषित पोर्ट का उपयोग करके कुछ प्रसंस्करण करता है, और फिर कनेक्शन को मार दिया जा सकता है। यदि मैं प्रक्रियाओं के लिए विशिष्ट पोर्ट (प्रत्येक ऐप का अपना है) मैप कर सकता हूं, तो यह एक सरल स्क्रिप्ट है। कोई सुझाव?

यह उबंटू बॉक्स पर है, वैसे - लेकिन मैं अनुमान लगा रहा हूं कि अधिकांश लिनक्स डिस्ट्रोस में कोई भी समाधान मानक होगा।

जवाबों:


7

--programNetstat का विकल्प आपको PID और अपनी स्वयं की प्रक्रियाओं के नाम दिखाता है। यह विकल्प मौजूद है और netstat 1.42 में नेट-टूल 1.60 में आरएचईएल 6 पर काम कर रहा है।

मैंने सत्यापित किया कि netstat -an --tcp --programमुझे अपनी प्रक्रियाओं के पीआईडी ​​दिखाता है।


1
मुझे लगता है कि आपका मतलब था -annetstat -pantयह भी काम करता है और याद रखना आसान है।
एडुआर्डो इवानेक

हां, शानदार "-" क्रेप्ट इन। और मुझे महामारी पसंद है।
पावेल ब्रोडैकी

मुझे डर है कि यह उबंटू पर काम नहीं करता है - इसमें यह रूट के बिना कुछ मामलों में प्रक्रिया नहीं दिखाता है - और ऐसा लगता है कि एसएसएच फॉरवर्ड उन मामलों में से एक है।
पैट

पावेल: अब ओपी आखिरकार अपने उपयोग के मामले में ठोस हो गया है (मेरी श्रृंखला में टिप्पणी देखें), मैं आपसे फिर से प्रयास करने का आग्रह करता हूं। मैंने किया, एक CentOS 5 बॉक्स पर (नेट-टूल 1.60 से नेटस्टैट 1.42 भी), और जैसा कि वह कहता है कि यह विफल रहता है। मुझे आपके अनुभवों में दिलचस्पी होगी।
मैडहैटर

3

पावेल का सुझाव मुझे ठीक लगता है, लेकिन एक विकल्प के रूप में, मुझे शेल 1 से सुनना है:

[madhatta@risby ~]$ nc -l  localhost 3456

और यहाँ मुझे इसे lsofशेल 2 से देख रहा है :

[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nc      18109 madhatta    3u  IPv4 69205153      0t0  TCP localhost.localdomain:vat (LISTEN)

संपादित करें : आप एक टिप्पणी में लिखते हैं कि

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

लेकिन मेरे लिए ऐसा नहीं है। स्थानीय बंदरगाह 8001 को आगे करने के लिए ssh का उपयोग करने के साथ ssh vpn.example.com -L 8001:rt.int:80, मुझे फिर पता चलता है:

[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     5375 madhatta    8u  IPv6 381234      0t0  TCP [::1]:vcom-tunnel (LISTEN)
ssh     5375 madhatta    9u  IPv4 381235      0t0  TCP 127.0.0.1:vcom-tunnel (LISTEN)

क्या आप शायद हमें अपना कुछ नमूना आउटपुट दिखा सकते हैं, अधिमानतः बहुत भारी नहीं है?


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

उपयोगकर्ता के रूप में चलाने पर मुझे अग्रेषित पोर्ट पर कोई भी lsof आउटपुट नहीं मिलता है। अगर मैं इसे sudo के साथ चलाता हूं, तो मुझे आउटपुट बहुत पसंद है जैसे आपने अपने उत्तर में जोड़ा है। केवल उल्लेखनीय अंतर है मैं vcom-tunnel के बजाय वास्तविक पोर्ट नंबर देखता हूं।
पैट

इसके अलावा, यह एक रिमोट फॉरवर्ड है, न कि स्थानीय फॉरवर्ड - शायद यही अंतर का स्रोत है? या आप एक रिमोट फॉरवर्ड के साथ परीक्षण कर रहे थे?
पैट

दूरस्थ फॉरवर्ड से आपका मतलब है "सर्वर एआई एसएच से सर्वर बी, सर्वर एक्स से सर्वर बी वापस सर्वर ए में अग्रेषित करना"? यदि हां, तो आप सर्वर ए पर नेटस्टैट / lsof के साथ कुछ भी लेने की उम्मीद क्यों करेंगे? सर्वर A पर कोई नया श्रोता इसके द्वारा नहीं बनाया गया है, इसलिए सर्वर A पर कोई पोर्ट असाइनमेंट शामिल नहीं है (समय-समय पर सहेजें)।
शाम

A से B तक SSH, पोर्ट X पर B से पोर्ट Y से C पर पोर्ट (जो A के फ़ायरवॉल के अंदर है - इसलिए फॉरवर्ड की आवश्यकता है), पोर्ट X के लिए B पर lsof / netstat का उपयोग कर।
pat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.