यह निर्धारित करना कि क्या प्रक्रिया एक बंदरगाह से जुड़ी है


90

मुझे पता है कि कमांड का उपयोग करना:

lsof -i TCP 

(या कुछ प्रकार के मापदंडों के साथ lsof) मैं यह निर्धारित कर सकता हूं कि कौन सी प्रक्रिया किसी विशेष पोर्ट से जुड़ी है। यह उपयोगी है अगर मैं कुछ ऐसा शुरू करने की कोशिश कर रहा हूँ जो 8080 से बाँधना चाहता है और कुछ अन्य पहले से ही उस बंदरगाह का उपयोग कर रहे हैं, लेकिन मुझे नहीं पता।

क्या lsof का उपयोग किए बिना ऐसा करने का एक आसान तरीका है? मैं कई प्रणालियों पर काम करने में समय बिताता हूं और lsof अक्सर स्थापित नहीं होता है।

जवाबों:


112

netstat -lnpप्रत्येक श्रवण पोर्ट के बगल में pid और प्रक्रिया का नाम सूचीबद्ध करेगा। यह लिनक्स के तहत काम करेगा, लेकिन अन्य सभी (जैसे एआईएक्स) नहीं जोड़ें -tयदि आप केवल टीसीपी चाहते हैं।

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

आदि।


अच्छा है धन्यवाद। ऐसा लगता है कि आरएचईएल के तहत काम करता है, लेकिन सोलारिस के तहत नहीं (जैसा आपने संकेत दिया है)। किसी को पता है कि क्या सोलारिस के लिए कुछ समान है?

netstat -pऊपर मेरा वोट है। को भी देखो lsof
रिच होमोलका

एक तरफ के रूप में, खिड़कियों के लिए यह समान है: netstat -aon | अधिक
जोनाथन

SCTP के बारे में क्या?
sudo

12

AIX पर, नेटस्टैट और rmsock का उपयोग प्रक्रिया बंधन को निर्धारित करने के लिए किया जा सकता है:

[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).

1
इसके लिए धन्यवाद! क्या कोई तरीका है, हालांकि, यह प्रदर्शित करने के लिए कि सॉकेट पर कौन सी प्रक्रिया सुनती है (इसके बजाय रिमस्क का उपयोग करें जो इसे हटाने का प्रयास करता है)?
ओलिवियर दुलक

2
@OlivierDulac: "इसके नाम का क्या अर्थ है, इसके विपरीत, rmsock सॉकेट को नहीं हटाता है, अगर यह एक प्रक्रिया द्वारा उपयोग किया जा रहा है। यह सिर्फ सॉकेट को पकड़े जाने की प्रक्रिया की रिपोर्ट करता है।" ( ibm.com/developerworks/community/blogs/cgaix/entry/… )
Vitor Py

@ विटोर-ब्रागा: आह thx! मैंने सोचा था कि यह कोशिश कर रहा था, लेकिन सिर्फ यह कहा कि यह कौन सी प्रक्रिया है जो इसे हटा नहीं सकती। जाहिरा तौर पर यह भी इसे हटाने की कोशिश नहीं करता है जब एक प्रक्रिया रखती है। यह अच्छा है! धन्यवाद!
ओलिवियर दुलैक

8

लिनक्स पर एक अन्य उपकरण उपलब्ध है एस एस । से एस एस फेडोरा पर आदमी पेज:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

नीचे दिया गया उदाहरण आउटपुट - अंतिम कॉलम बाध्यकारी प्रक्रिया दिखाता है:

[root@box] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))


2

मुझे एक बार यह निर्धारित करने की कोशिश में सामना करना पड़ा था कि एक विशेष बंदरगाह के पीछे क्या प्रक्रिया थी (इस बार यह 8000 थी)। मैंने कई प्रकार के lsof और netstat की कोशिश की, लेकिन फिर एक मौका लिया और एक ब्राउज़र (यानी http: // hostname: 8000 / ) के माध्यम से पोर्ट को हिट करने की कोशिश की । लो और निहारना, एक छप स्क्रीन ने मुझे बधाई दी, और यह स्पष्ट हो गया कि प्रक्रिया क्या थी (रिकॉर्ड के लिए, यह स्पंक था )।

एक और विचार: "ps -e-p pid, args" (YMMV) कभी-कभी तर्कों की सूची में पोर्ट नंबर दिखा सकता है। ग्रेप आपका दोस्त है!


एक ही नस में, आप देख सकते telnet hostname 8000हैं कि क्या सर्वर एक बैनर प्रिंट करता है। हालाँकि, यह ज्यादातर तब उपयोगी होता है जब सर्वर एक मशीन पर चल रहा होता है जहाँ आपके पास शेल एक्सेस नहीं होता है, और फिर प्रक्रिया आईडी ढूंढना प्रासंगिक नहीं होता है।
गाइल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.