it-swarm.asia

الذي يستمع على معين TCP منفذ على نظام التشغيل Mac OS X؟

على نظام Linux ، يمكنني استخدام netstat -pntl | grep $PORT أو fuser -n tcp $PORT لمعرفة العملية (PID) التي تستمع إلى المنفذ المحدد TCP. كيف يمكنني الحصول على نفس المعلومات على نظام التشغيل Mac OS X؟

1123
pts

على نظام التشغيل MacOS High Sierra ، استخدم هذا الأمر:

lsof -nP -i4TCP:$PORT | grep LISTEN

في الإصدارات الأقدم ، استخدم أحد النماذج التالية:

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

استبدل $PORT برقم المنفذ أو قائمة بأرقام المنفذ مفصولة بفواصل.

Prepend Sudo (متبوعة بمسافة) إذا كنت بحاجة إلى معلومات على المنافذ أدناه # 1024.

علامة -n مخصصة لعرض عناوين IP بدلاً من أسماء المضيف. هذا يجعل الأمر ينفذ بشكل أسرع ، لأن عمليات البحث عن DNS للحصول على أسماء المضيفين يمكن أن تكون بطيئة (عدة ثوان أو دقيقة للعديد من المضيفين).

علامة -P مخصصة لعرض أرقام المنافذ الأولية بدلاً من الأسماء التي تم حلها مثل http أو ftp أو أكثر من أسماء الخدمات الباطنية مثل dpserve أو socalia.

انظر التعليقات لمزيد من الخيارات.

1699
pts

منذ Snow Leopard (10.6) ، حتى Mojave (10.14) ، كل إصدار من 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 هي أداة قوية جدًا ، لكن للأسف ليست مريحة جدًا للاستخدام.

428
Michał Kalinowski

تستطيع ايضا استخذام:

Sudo lsof -i -n -P | grep TCP

هذا يعمل في مافريكس.

414
Rog182

تحديث يناير 2016

فوجئت حقا لا أحد اقترح:

lsof -i :PORT_NUMBER

للحصول على المعلومات الأساسية المطلوبة. على سبيل المثال ، التحقق من المنفذ 1337:

lsof -i :1337

الاختلافات الأخرى ، حسب الظروف:

Sudo lsof -i :1337
lsof -i tcp:1337

يمكنك البناء بسهولة على هذا لاستخراج PID نفسه. فمثلا:

lsof -t -i :1337

وهو ما يعادل (في النتيجة) هذا الأمر:

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

التوضيح السريع:

 enter image description here

للاكتمال ، لأنه كثيرًا ما يستخدم معًا:

لقتل PID:

kill -9 <PID>
# kill -9 60401

أو كخط واحد:

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

هذا يعمل في مافريكس (OSX 10.9.2).

Sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
Charley Wu

على OS X ، يمكنك استخدام الخيار -v لـ netstat لإعطاء معرف المنتج المرتبط.

نوع:

netstat -anv | grep [.]PORT

سوف الإخراج تبدو مثل هذا:

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

PID هو الرقم قبل العمود الأخير ، 3105 لهذه الحالة

34
Sean Hamilton

في نظام التشغيل macOS ، إليك طريقة سهلة للحصول على معرف العملية الذي يستمع إلى منفذ معين باستخدام netstat . يبحث هذا المثال عن عملية تقدم محتوى على المنفذ 80:

العثور على خادم يعمل على المنفذ 80

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

إخراج العينة

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

الثاني من العمود الأخير هو PID. في أعلاه ، هو 715 .

خيارات

-a - إظهار جميع المنافذ ، بما في ذلك تلك المستخدمة من قبل الخوادم

-n - عرض الأرقام ، لا تبحث عن الأسماء. هذا يجعل الأمر a الكثير أسرع

-v - إخراج مطوّل ، للحصول على معرفات العملية

-w - كلمات البحث. وإلا فإن الأمر سيعود المعلومات للمنافذ 8000 و 8001 ، وليس فقط "80"

LISTEN - إعطاء معلومات فقط للمنافذ في وضع الاستماع ، أي الخوادم

31
johntellsall

للمنافذ LISTEN ، المنشأة والمغلقة

Sudo lsof -n -i -P | grep TCP

لمنافذ الاستماع فقط

Sudo lsof -n -i -P | grep LISTEN

بالنسبة إلى منفذ LISTEN محدد ، على سبيل المثال: المنفذ 80

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

أو إذا كنت تريد فقط ملخصًا مضغوطًا [لا توجد خدمة/تطبيقات موصوفة] ، فانتقل عبر NETSTAT. الجانب الجيد هنا هو ، لا حاجة سودو

netstat -a -n | grep 'LISTEN '

شرح العناصر المستخدمة:

-n قمع اسم المضيف

-i لبروتوكولات IPv4 و IPv6

-P حذف أسماء المنافذ

-a [over netstat] لجميع مآخذ التوصيل

-n [عبر netstat] لا تحل الأسماء ، وتظهر عناوين الشبكة كأرقام

تم اختباره على ارتفاع Sierra 10.13.3 و Mojave 10.14.3

  • بناء الجملة الأخير netstat يعمل على لينكس أيضا

  • lsof يمكنك تجربة أكثر من دبيان على أساس: apt-get install lsof

22
PYK

في أحدث إصدار من نظام التشغيل MacOS ، يمكنك استخدام هذا الأمر:

lsof -nP -i4TCP:$PORT | grep LISTEN

إذا وجدت أنه من الصعب تذكرها ، فربما يجب عليك إنشاء دالة bash وتصديرها باسم أكثر ودية مثل

vi ~/.bash_profile

ثم قم بإضافة الأسطر التالية إلى هذا الملف وحفظه.

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

يمكنك الآن كتابة listening_on 80 في الجهاز الطرفي ومعرفة العملية التي يتم الاستماع إليها على المنفذ 80.

16
arturgrigor

في Snow Leopard (OS X 10.6.8) ، يؤدي تشغيل "man lsof" إلى:

lsof -i 4 -a

(الإدخال اليدوي الفعلي هو 'lsof -i 4 -a -p 1234')

لم تعمل الإجابات السابقة على Snow Leopard ، لكنني كنت أحاول استخدام "netstat -nlp" حتى رأيت استخدام "lsof" في الإجابة بالنقاط.

12
Brent Self

أنا رجل لينكس. في Linux ، يكون الأمر سهلاً للغاية مع netstat -ltpn أو أي مجموعة من تلك الحروف. لكن في نظام Mac OS X netstat -an | grep LISTEN هو الأكثر إنسانية. البعض الآخر قبيح للغاية ويصعب تذكره عند استكشاف الأخطاء وإصلاحها.

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

هذا يعرض من يفعل ماذا. إزالة -n لرؤية أسماء المضيف (أبطأ قليلاً).

7
Misha Tavkhelidze

فعلت هذا ما احتاجه.

ps -eaf | grep `lsof -t -i:$PORT`
3
Frank

هذه طريقة جيدة لنظام MacOS High Sierra:

netstat -an |grep -i listen
0
tr4nc3

لقد صنعت نصًا صغيرًا لمعرفة ليس فقط من يستمع إلى أين وأيضًا لعرض الاتصالات القائمة وإلى أي البلدان. يعمل على OSX سييرا

#!/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
0x00

مستوحاة من المستخدم Brent Self:

lsof -i 4 -a | grep LISTEN

0
Punnerud

بالنسبة لنظام التشغيل MacOS ، استخدم أمرين معًا لإظهار معلومات حول عمليات الاستماع على الجهاز وعملية الاتصال بالخوادم البعيدة. بمعنى آخر ، للتحقق من منافذ الاستماع والاتصالات الحالية (TCP) على مضيف ، يمكنك استخدام الأمرين التاليين معًا

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

اعتقدت أن أضيف مدخلاتي ، على أمل أن ينتهي الأمر بمساعدة شخص ما.

0
Boschko