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




tcp netstat (8)

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


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

sudo lsof -i -n -P | grep TCP

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


ओएस एक्स पर आप संबंधित पिड देने के लिए नेटस्टैट के लिए -v विकल्प का उपयोग कर सकते हैं।

प्रकार:

netstat -anv | grep [.]PORT

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

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

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


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


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

#!/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)

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


मैकोज़ हाई सिएरा पर, इस कमांड का उपयोग करें:

lsof -nP -i4TCP:$PORT | grep LISTEN

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

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

बंदरगाह संख्या या बंदरगाह संख्याओं की अल्पविराम से अलग सूची के साथ $PORT करें।

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

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

-P ध्वज http , ftp या अधिक esoteric सेवा नाम जैसे dpserve , socalia जैसे हल किए गए नामों के बजाय कच्चे बंदरगाह संख्या प्रदर्शित करने के लिए है।

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


यह मैवरिक्स (ओएसएक्स 10.9.2) में काम करता है।

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN

हिम तेंदुए (ओएस एक्स 10.6.8) पर, 'मैन lsof' उपज चल रहा है:

lsof -i 4 -a

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

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


जनवरी 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)




listen