मैक ओएस एक्स पर दिए गए टीसीपी पोर्ट पर कौन सुन रहा है?


1381

लिनक्स पर, मैं निर्दिष्ट टीसीपी पोर्ट पर किस प्रक्रिया (पीआईडी) को सुन रहा हूं netstat -pntl | grep $PORTया fuser -n tcp $PORTपता लगा सकता हूं । मुझे मैक ओएस एक्स पर समान जानकारी कैसे मिलेगी?


27
क्षमा करें, netstat -p tcp | grep $PORTमैक ओएस एक्स पर नेटस्टैट के बाद से पीआईडी ​​प्रदर्शित नहीं कर सकता है।
pts

12
netstat -anvमैक ओएस एक्स पर पोर्ट को प्रदर्शित करता है (स्रोत: @ सीनहिलमिल्टन द्वारा नीचे समाधान)
कर्टिस

जवाबों:


2047

MacOS हाई सिएरा और बाद में, इस कमांड का उपयोग करें:

lsof -nP -iTCP:$PORT | grep LISTEN

या सिर्फ IPv4 देखने के लिए:

lsof -nP -i4TCP:$PORT | grep LISTEN

पुराने संस्करणों पर, निम्न रूपों में से एक का उपयोग करें:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

स्थानापन्न $PORTपोर्ट संख्या या पोर्ट नंबर की एक अल्पविराम से अलग सूची के साथ।

sudoयदि आपको # 1024 से नीचे के पोर्ट्स की जानकारी चाहिए तो (एक स्थान के बाद) प्रीपेंड करें ।

-nझंडा मेजबान के नाम के बजाय IP पते प्रदर्शित करने के लिए है। यह कमांड को बहुत तेज़ी से निष्पादित करता है, क्योंकि होस्ट नाम प्राप्त करने के लिए DNS लुकअप धीमा हो सकता है (कई मेजबानों के लिए कई सेकंड या एक मिनट)।

-Pझंडा कच्चे बंदरगाह के बजाय नंबर की तरह हल किया नाम प्रदर्शित करने के लिए है http, ftpया की तरह अधिक गूढ़ सेवा के नाम dpserve, socalia

अधिक विकल्पों के लिए टिप्पणियाँ देखें।

पूर्णता के लिए, क्योंकि अक्सर एक साथ उपयोग किया जाता है:

पीआईडी ​​को मारने के लिए:

kill -9 <PID>
# kill -9 60401

153
आप जिन sudoप्रक्रियाओं के स्वामी नहीं हैं, उन्हें देखने के लिए इसे उपसर्ग करें ।
गॉर्डन डेविसन

30
शेर पर, एक बदलाव के साथ काम कियाsudo lsof -i TCP:$PORT | grep LISTEN
धवल

58
माउंटेन लायन पर, आपको ज़रूरत नहीं है grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu चिंग पोंग -आसुका केंजी-

16
इतनी सारी खोजों के बाद यह सबसे अच्छा है। जो लोग सीधे कमांड को कॉपी करना चाहते हैं, उन्हें $ पोर्ट को वास्तविक पोर्ट नंबर से बदलना चाहिए या वेरिएबल पोर्ट को परिभाषित करना चाहिए और वह भी कई पोर्ट जैसे: निर्यात पोर्ट = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh

2
अगर बंदरगाह की जांच 1024 से ऊपर है, तो
सुडो की

625

हिम तेंदुए (10.6) के बाद से, मोजावे (10.14) और कैटालिना (10,15) तक , macOS का हर संस्करण इस बात का समर्थन करता है:

sudo lsof -iTCP -sTCP:LISTEN -n -P

व्यक्तिगत रूप से मैं इस सरल कार्य को अपने में समाप्‍त कर चुका हूं ~/.bash_profile:

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

फिर listeningकमांड आपको कुछ पोर्ट पर सुनने वाली प्रक्रियाओं की एक सूची देता है और listening smthकुछ पैटर्न के लिए इसे पकड़ लेता है।

इसके बाद, विशेष प्रक्रिया, जैसे listening dropbox, या पोर्ट, जैसे के बारे में पूछना काफी आसान है listening 22

lsofपोर्ट, प्रोटोकॉल, प्रक्रिया आदि के बारे में पूछने के लिए कमांड के पास कुछ विशेष विकल्प हैं, लेकिन व्यक्तिगत रूप से मैंने फ़ंक्शन को बहुत अधिक उपयोगी पाया है, क्योंकि मुझे इन सभी निम्न-स्तरीय विकल्पों को याद रखने की आवश्यकता नहीं है। lsofकाफी शक्तिशाली उपकरण है, लेकिन दुर्भाग्य से उपयोग करने के लिए इतना कम नहीं है।


7
यह मेरे डॉटफाइल्स में जा रहा है। मैं हर कुछ महीनों में खोज करता हूं और हमेशा इस उत्तर पर आता हूं।
danemacmillan

1
मुझे लगता है कि इसे स्वीकार किया जाना चाहिए क्योंकि ओपी ने कहा कि वह -pntlसभी सेवाओं को सूचीबद्ध करेगा। स्वीकृत उत्तर निर्दिष्ट किए जाने वाले एक या अधिक पोर्ट संख्याओं के लिए पूछता है, जो दूरस्थ रूप से समान नहीं है।
सीफिश

440

आप भी उपयोग कर सकते हैं:

sudo lsof -i -n -P | grep TCP

यह मावेरिक्स में काम करता है।


3
-iविकल्प यह काफी तेजी बनाता है। 0.02 सेकंड बनाम 2 सेकंड। मेरे आवेदन में इससे काफी फर्क पड़ा।
एरिक बोहेस

उन विशिष्ट झंडे क्या करते हैं -i, -n, -P। मैं कहीं भी नहीं पा सकता कि उनका क्या मतलब है
चाड वाटकिंस

सुदो lsof -i -n -P | grep टीसीपी | grep $ PORT - मैंने इस कमांड के साथ एक उपनाम बनाया
alyn000r

मैं "Grep $ PORT" या "| grep LISTEN" जोड़ने का सुझाव
दूंगा

महान! मोजावे पर भी काम करता है।
जिफिल्टे फिश

291

अपडेट जनवरी 2016

वास्तव में हैरान कोई भी सुझाव दिया है:

lsof -i :PORT_NUMBER

आवश्यक बुनियादी जानकारी प्राप्त करने के लिए। उदाहरण के लिए, पोर्ट 1337 पर जाँच:

lsof -i :1337

परिस्थितियों के आधार पर अन्य विविधताएं:

sudo lsof -i :1337
lsof -i tcp:1337

पीआईडी ​​को खुद निकालने के लिए आप इस पर आसानी से निर्माण कर सकते हैं। उदाहरण के लिए:

lsof -t -i :1337

जो इस आदेश के समतुल्य है (परिणाम में):

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

त्वरित चित्रण:

यहां छवि विवरण दर्ज करें

पूर्णता के लिए, क्योंकि अक्सर एक साथ उपयोग किया जाता है:

पीआईडी ​​को मारने के लिए:

kill -9 <PID>
# kill -9 60401

या एक लाइनर के रूप में:

kill -9 $(lsof -t -i :1337)

2
यह आदेश गैर-श्रोता PID को भी प्रदर्शित करता है, और प्रश्न केवल श्रोताओं के लिए स्पष्ट रूप से पूछे जाते हैं।
पीटी

3
आप भी चला सकते हैं lsof -t -i :1338-tप्रक्रिया आईडी वापस कर देगा, इसलिए आपको जाग / सिर नहीं करना पड़ेगा।
KFunk

कुछ के अलावा काम नहीं किया kill -9 $(lsof -t -i :5000)एल कैपिटान
goksel

यह भी खूब रही। मैं यह जानना पसंद करता हूं कि मैं इसे मारने से पहले क्या कर रहा हूं, इसलिए (इस पर आधारित) मैंने अभी-अभी अपने bashrc में जोड़ा : whatsonport() { ps -ef | grep `lsof -t -i :$1` }, तो:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
धन्यवाद, lsof -i :PORT_NUMBERमेरे लिए एक काम किया।
marika.daboja


48

लिस्टेन के लिए, स्थापित और बंद बंदरगाहों

sudo lsof -n -i -P | grep TCP

केवल लिस्टेन बंदरगाहों के लिए

sudo lsof -n -i -P | grep LISTEN

विशिष्ट लिस्टेन पोर्ट के लिए, पूर्व: पोर्ट 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

या यदि आप केवल एक कॉम्पैक्ट सारांश चाहते हैं [वर्णित कोई सेवा / ऐप्स], तो नेटस्टैट पर जाएं। यहाँ अच्छा पक्ष है, कोई sudo की जरूरत है

netstat -a -n | grep 'LISTEN '

उपयोग की गई वस्तुओं की व्याख्या करना:

-मेज़बान का नाम दबाना

मैं IPv4 और IPv6 प्रोटोकॉल के लिए

-पी न आना बंदरगाह नाम

-ए [ओवर नेटस्टैट] सभी सॉकेट के लिए

-n [अधिक netstat] नाम का समाधान नहीं करते, संख्याओं के रूप में नेटवर्क पते दिखाएं

पर परीक्षण किया गया उच्च सिएरा 10.13.3 और मोजावे 10.14.3

  • अंतिम सिंटैक्स netstat लिनक्स पर भी काम करता है

विस्तार से व्याख्याएं वास्तव में मेरे जैसे शुरुआती लोगों के लिए बहुत उपयोगी हैं। धन्यवाद @PYK
वांग

46

OS X पर आप संबंधित pid देने के लिए netstat के लिए -v विकल्प का उपयोग कर सकते हैं।

प्रकार:

netstat -anv | grep [.]PORT

आउटपुट इस तरह दिखेगा:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

इस मामले के लिए अंतिम कॉलम 3105 से पहले पीआईडी ​​है


आपको grep LISTENकेवल श्रोताओं को दिखाने के लिए जोड़ना होगा।
पीटी

3
यह वही है जो मुझे चाहिए था! lsofपोर्ट नहीं मिला। लेकिन netstatपता चला कि यह खुला था। -vमेरे पास गुप्त चटनी थी।
एरोन मैकमिलिन

32

MacOS पर, यहाँ एक आसान तरीका है प्रक्रिया आईडी कि netstat के साथ एक विशिष्ट पोर्ट पर सुन रहा है । यह उदाहरण पोर्ट 80 पर सामग्री परोसने वाली प्रक्रिया के लिए दिखता है:

पोर्ट 80 पर चलने वाला सर्वर खोजें

netstat -anv | egrep -w [.]80.*LISTEN

नमूना उत्पादन

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

अंतिम कॉलम से 2 पीआईडी ​​है। ऊपर, यह 715 है

विकल्प

-a - सर्वर द्वारा उपयोग किए जाने वाले सहित सभी पोर्ट दिखाएं

-n- नंबर दिखाएं, नाम न देखें। यह कमांड को बहुत तेज बनाता है

-v - वर्बोज़ आउटपुट, प्रोसेस आईडी प्राप्त करने के लिए

-w- खोज शब्द। अन्यथा कमांड बंदरगाहों को 8000 और 8001 के लिए जानकारी लौटाएगा, न कि केवल "80"

LISTEN - केवल लिस्टेन मोड में बंदरगाहों के लिए जानकारी दें, अर्थात सर्वर


2
-v ध्वज ने इसे बनाया
user9869932

18

नवीनतम macOS संस्करण पर आप इस कमांड का उपयोग कर सकते हैं:

lsof -nP -i4TCP:$PORT | grep LISTEN

अगर आपको याद रखना मुश्किल है, तो हो सकता है कि आप एक bashफंक्शन बनाएं और उसे किसी फ्रेंडली नाम से एक्सपोर्ट करें

vi ~/.bash_profile

और फिर उस फ़ाइल में निम्न लाइनें जोड़ें और इसे सहेजें।

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

अब आप listening_on 80अपने टर्मिनल में टाइप कर सकते हैं और देख सकते हैं कि कौन सी प्रक्रिया पोर्ट पर सुन रही है 80


13

हिम तेंदुए पर (OS X 10.6.8), 'मैन lsof' पैदावार:

lsof -i 4 -a

(वास्तविक मैनुअल प्रविष्टि 'lsof -i 4 -a -p 1234' है)

पिछले उत्तर स्नो लेपर्ड पर काम नहीं करते थे, लेकिन मैं 'नेटस्टैट-एनएलपीपी' का उपयोग करने की कोशिश कर रहा था, जब तक कि मैंने जवाब में 'एलएसओएफ' का उपयोग पीटीएस द्वारा नहीं देखा।


10

मैं एक लिनक्स आदमी हूँ। लिनक्स में यह netstat -ltpnउन अक्षरों के किसी भी संयोजन के साथ बेहद आसान है । लेकिन मैक ओएस एक्स netstat -an | grep LISTENमें सबसे अधिक मानवीय है। दूसरों को समस्याग्रस्त होने पर याद रखना बहुत बदसूरत और बहुत मुश्किल है।


2
यह प्रश्न स्पष्ट रूप से एक विशिष्ट टीसीपी पोर्ट के लिए पूछा गया है, और आपकी कमांड सभी बंदरगाहों पर श्रोताओं को दिखाती है।
अंक

7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

यह प्रदर्शित करता है कि कौन क्या कर रहा है। होस्टनाम (थोड़ा धीमा) देखने के लिए निकालें।


1
आपका उत्तर बुरा नहीं है, लेकिन यह कई उच्च-उत्कीर्ण उत्तरों के साथ एक प्रश्न पर है, और एक स्वीकृत एक, कई साल पहले से। भविष्य में, अधिक हाल के प्रश्नों पर ध्यान देने की कोशिश करें, विशेष रूप से ऐसे जो अभी तक उत्तर नहीं दिए गए हैं।

क्या यह आदेश गैर-टीसीपी पोर्ट और साथ ही गैर-श्रोता भी प्रदर्शित करता है? प्रश्न केवल टीसीपी पोर्ट पर श्रोताओं के लिए स्पष्ट रूप से पूछता है।
अंक

If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Lsof

@ मीशा तवक्लिदेज़: तो यह गैर-श्रोताओं को भी प्रदर्शित करती है, इसलिए यह सवाल का जवाब नहीं देती है।
पीटी

जोड़े -sTCP:LISTENकोlsof
Misha Tavkhelidze


1

मैंने न केवल यह देखने के लिए एक छोटी सी स्क्रिप्ट बनाई कि कौन कहाँ सुन रहा है, बल्कि स्थापित कनेक्शन और किन देशों को प्रदर्शित करना है। OSX Siera पर काम करता है

#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | 
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
    printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | 
cut -d ">" -f2 | cut -d"<" -f1
done

printf "\ndisplaying listening ports\n\n"

sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35

#EOF

Sample output
checking established connections

107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States

displaying listening ports

mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)

यह जाँचने के लिए उपयोगी हो सकता है कि क्या आप उत्तर-कोरिया से जुड़े हैं! ;-)


0

यह macOS हाई सिएरा पर एक अच्छा तरीका है:

netstat -an |grep -i listen

यह काफी सही है! स्वीकार किए गए उत्तर वास्तव में सही तरीका है ... मैक ओएस एक्स पर नेटस्टैट पोर्ट मैपिंग के लिए पीआईडी ​​नहीं दिखाता है।
tr4nc3

0

उपयोगकर्ता द्वारा प्रेरित ब्रेंट स्व:

lsof -i 4 -a | grep LISTEN


0

मैकओएस के लिए मैं मशीन पर सुनने वाली प्रक्रियाओं और दूरस्थ सर्वर से कनेक्ट होने की प्रक्रिया के बारे में जानकारी दिखाने के लिए दो कमांड का उपयोग करता हूं। दूसरे शब्दों में, एक मेजबान पर सुनने वाले बंदरगाहों और वर्तमान (टीसीपी) कनेक्शन की जांच करने के लिए आप निम्नलिखित दो आदेशों का उपयोग कर सकते हैं

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

सोचा कि मैं अपना इनपुट जोड़ दूंगा, उम्मीद है कि यह किसी की मदद कर सकता है।

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