كيف يمكنك معرفة العملية التي يتم الاستماع إليها على منفذ على نظام التشغيل Windows؟
-
09-06-2019 - |
سؤال
كيف يمكنك معرفة العملية التي يتم الاستماع إليها على منفذ على نظام التشغيل Windows؟
المحلول
بوويرشيل
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
كمد
C:\> netstat -a -b
(يضيف -ن لمنعه من محاولة حل أسماء المضيفين، مما سيجعل الأمر أسرع كثيرًا.)
لاحظ توصية داين بشأن TCPView.يبدو مفيدا جدا!
-أ يعرض كافة الاتصالات ومنافذ الاستماع.
-ب يعرض الملف القابل للتنفيذ المتضمن في إنشاء كل اتصال أو منفذ استماع.في بعض الحالات، تستضيف الملفات التنفيذية المعروفة عدة مكونات مستقلة، وفي هذه الحالات يتم عرض تسلسل المكونات المشاركة في إنشاء الاتصال أو منفذ الاستماع.في هذه الحالة، يكون الاسم القابل للتنفيذ موجودًا في [] بالأسفل، وفي الأعلى يوجد المكون الذي يطلق عليه، وهكذا حتى يتم الوصول إلى TCP/IP.لاحظ أن هذا الخيار قد يستغرق وقتًا طويلاً وسيفشل ما لم يكن لديك أذونات كافية.
-ن يعرض العناوين وأرقام المنافذ بشكل رقمي.
-س يعرض معرف عملية المالك المرتبط بكل اتصال.
نصائح أخرى
هناك واجهة مستخدم رسومية أصلية لنظام التشغيل Windows:
- ابدأ >>كافة البرامج >>البرامج الملحقة >>أدوات النظام >>مراقبة الموارد
أو يجري resmon.exe
, ، او من مدير المهام علامة التبويب الأداء
يستخدم TCPView إذا كنت تريد واجهة المستخدم الرسومية لهذا الغرض.إنه تطبيق Sysinternals القديم الذي اشترته Microsoft.
netstat -aon | find /i "listening"
يتطلب رمز التبديل -b المذكور في معظم الإجابات أن يكون لديك امتيازات إدارية على الجهاز.لا تحتاج حقًا إلى حقوق مرتفعة للحصول على اسم العملية!
ابحث عن معرف العملية الجاري تشغيلها في رقم المنفذ (على سبيل المثال، 8080)
netstat -ano | findStr "8080"
ابحث عن اسم العملية بواسطة pid
tasklist /fi "pid eq 2216"
يمكنك الحصول على مزيد من المعلومات إذا قمت بتشغيل الأمر التالي:
netstat -aon |find /i "listening" |find "port"
يتيح لك استخدام الأمر "بحث" تصفية النتائج.البحث عن /i "الاستماع" سيعرض فقط المنافذ "الاستماع".لاحظ أنك تحتاج إلى /i لتجاهل الحالة وإلا فسوف تكتب "الاستماع".|find "port" سيقصر النتائج على تلك التي تحتوي على رقم المنفذ المحدد فقط.لاحظ أنه سيتم أيضًا تصفية النتائج التي تحتوي على رقم المنفذ في أي مكان في سلسلة الاستجابة.
افتح نافذة موجه الأوامر (كمسؤول) من "مربع Start\Search" أدخل "cmd" ثم انقر بزر الماوس الأيمن على "cmd.exe" وحدد "Run as Administrator"
أدخل النص التالي ثم اضغط على Enter.
netstat -abno
-أ يعرض كافة الاتصالات ومنافذ الاستماع.
-ب يعرض القابل للتنفيذ المشارك في إنشاء كل اتصال أو منفذ استماع.في بعض الحالات ، تستضيف التنفيذيون المعروفين مكونات مستقلة متعددة ، وفي هذه الحالات يتم عرض تسلسل المكونات المشاركة في إنشاء اتصال أو منفذ الاستماع.في هذه الحالة ، يكون الاسم القابل للتنفيذ في [] في الأسفل ، في الأعلى هو المكون الذي أطلق عليه ، وهكذا يتم الوصول إلى TCP/IP.لاحظ أن هذا الخيار يمكن أن يستغرق وقتًا طويلاً وسيخفق ما لم يكن لديك أذونات كافية.
-ن يعرض العناوين وأرقام المنافذ بشكل رقمي.
-س يعرض معرف عملية المالك المرتبط بكل اتصال.
ابحث عن المنفذ الذي تستمع إليه ضمن "العنوان المحلي"
انظر إلى اسم العملية مباشرة تحت ذلك.
ملحوظة:للعثور على العملية ضمن إدارة المهام
لاحظ PID (معرف العملية) بجوار المنفذ الذي تبحث عنه.
افتح إدارة مهام ويندوز.
حدد علامة التبويب العمليات.
ابحث عن معرف المنتج (PID) الذي قمت بتدوينه عند قيامك بإجراء netstat في الخطوة 1.
إذا كنت لا ترى عمود PID، فانقر على عرض / تحديد الأعمدة.حدد معرف المنتج.
تأكد من تحديد "إظهار العمليات من كافة المستخدمين".
احصل على PID واسم الصورة
استخدم أمرًا واحدًا فقط:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
أين 9000
يجب استبداله برقم المنفذ الخاص بك.
ال انتاج سوف تحتوي على شيء مثل هذا:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
توضيح:
يتكرر خلال كل سطر من إخراج الأمر التالي:
netstat -aon | findstr 9000
من كل سطر، PID (
%a
- الاسم غير مهم هنا) يتم استخراجه (PID هو5
ذ عنصر في هذا السطر) وتمريره إلى الأمر التاليtasklist /FI "PID eq 5312"
أذا أردت يتخطى ال header وعودة موجه الأمر, ، يمكنك استخدام:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
انتاج:
java.exe 5312 Services 0 130,768 K
أولاً نجد معرف العملية لتلك المهمة المحددة التي نحتاج إلى إزالتها للحصول على منفذ مجاني
يكتب
نتستت -n -a -o
بعد تنفيذ هذا الأمر في موجه سطر أوامر Windows (CMD) ، حدد PID الذي أعتقد أن العمود الأخير يفترض أن هذا هو 3312
الآن اكتب
Taskkill /F /PID 3312
يمكنك الآن التحقق من خلال كتابة الأمر netstat.
ملحوظة:في بعض الأحيان ، لا يسمح لك Windows بتشغيل هذا الأمر مباشرةً على CMD ، لذا عليك أولاً الذهاب مع خطوات Start-> أوامر (انقر بزر الماوس الأيمن على موجه الأوامر ، وتشغيله كمسؤول)
من السهل جدًا الحصول على رقم المنفذ من معرف الهوية في Windows.
وفيما يلي الخطوات:
1) اذهب إلى التشغيل -> اكتب cmd -> اضغط على زر الإدخال.
2) اكتب الأمر التالي ...
netstat -aon | findstr [port number]
(ملحوظة:لا تقم بتضمين الأقواس المربعة.)
3) اضغط على زر الإدخال...
4) بعد ذلك سيعطيك cmd تفاصيل الخدمة التي تعمل على هذا المنفذ بالإضافة إلى معرف الهوية.
5) افتح مدير المهام واضغط على علامة تبويب الخدمة وقم بمطابقة معرف التعريف مع معرف cmd وهذا كل شيء.
للحصول على قائمة بجميع معرفات عملية الملكية المرتبطة بكل اتصال:
netstat -ao |find /i "listening"
إذا كنت تريد إنهاء أي عملية، فاحصل على المعرف واستخدم هذا الأمر، حتى يصبح هذا المنفذ مجانيًا
Taskkill /F /IM pidof a process
فقط افتح واجهة الأوامر واكتب:(قول المنفذ الخاص بك هو 123456)
netstat -a -n -o | find "123456"
سوف ترى كل ما تحتاجه
الرؤوس هي:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
هذا كما ذكر هنا
إذا كنت ترغب في استخدام أداة واجهة المستخدم الرسومية للقيام بذلك، فهناك سيسي إنترنالز TCPView.
باستخدام PowerShell 5 على نظام التشغيل Windows 10 أو Windows Server 2016، قم بتشغيل Get-NetTCPConnection
cmdlet.أعتقد أنه يجب أن يعمل أيضًا على إصدارات Windows الأقدم.
الإخراج الافتراضي ل Get-NetTCPConnection
لا يتضمن معرف العملية لسبب ما وهو مربك بعض الشيء.ومع ذلك، يمكنك دائمًا الحصول عليه عن طريق تنسيق الإخراج.العقار الذي تبحث عنه هو OwningProcess
.
إذا كنت تريد معرفة معرف العملية التي تستمع على المنفذ 443، فقم بتشغيل هذا الأمر:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List LocalAddress : :: LocalPort : 443 RemoteAddress : :: RemotePort : 0 State : Listen AppliedSetting : OwningProcess : 4572 CreationTime : 02.11.2016 21:55:43 OffloadState : InHost
قم بتنسيق الإخراج إلى جدول بالخصائص التي تبحث عنها:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess LocalAddress LocalPort State OwningProcess ------------ --------- ----- ------------- :: 443 Listen 4572 0.0.0.0 443 Listen 4572
إذا كنت تريد معرفة اسم العملية، قم بتشغيل هذا الأمر:
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 143 15 3448 11024 4572 0 VisualSVNServer
لمعرفة العملية المحددة (PID) التي تستخدم أي منفذ:
netstat -anon | findstr 1234
حيث 1234 هو PID للعملية الخاصة بك.[انتقل إلى إدارة المهام -> علامة التبويب الخدمات/العمليات لمعرفة معرف المنتج (PID) لتطبيقك]
netstat -ao
و netstat -ab
أخبرك بالتطبيق، ولكن إذا لم تكن مسؤولاً، فسوف تحصل على "العملية المطلوبة تتطلب الترقية".
إنه ليس مثاليًا، ولكن إذا كنت تستخدم sysinternals Process Explorer، فيمكنك الانتقال إلى خصائص عمليات معينة وإلقاء نظرة على علامة التبويب TCP لمعرفة ما إذا كانوا يستخدمون المنفذ الذي تهتم به.قطعة من الإبرة وكومة قش، لكن ربما ستساعد شخصًا ما....
اكتب الأمر: netstat -aon | findstr :DESIRED_PORT_NUMBER
على سبيل المثال، إذا أردت العثور على المنفذ 80: netstat -aon | findstr :80
تم نشر هذه الإجابة في الأصل في هذا الموضوع.
أوصي كوربورتس من نيرسوفت.
يمكن لـ CurrPorts تصفية النتائج المعروضة. TCPView لا يملك هذه الميزة.
ملحوظة:يمكنك النقر بزر الماوس الأيمن فوق اتصال مأخذ التوصيل الخاص بالعملية وتحديد "إغلاق اتصالات TCP المحددة" (يمكنك أيضًا القيام بذلك في TCPView).يؤدي هذا غالبًا إلى إصلاح مشكلات الاتصال التي أواجهها مع Outlook وLync بعد تبديل شبكات VPN.باستخدام CurrPorts، يمكنك أيضًا إغلاق الاتصالات من سطر الأوامر باستخدام المعلمة "/ Close".
نتستات
- -a يعرض كافة منافذ الاتصال والاستماع
- -b يعرض الملفات التنفيذية
- -n توقف عن حل أسماء المضيفين (نموذج رقمي)
- عملية التملك
Netstat -bano | Findstrst "7002"
netstat -ano > ano.txt
كوربورتس أداة تساعد على البحث والتصفية
اتبع هذه الأدوات:- من كمد :- C:\> netstat -anob
مع مدير امتياز.
http://technet.microsoft.com/en-us/sysinternals/bb896653 - عملية المستكشف
http://technet.microsoft.com/en-us/sysinternals/bb896645 - تفريغ العملية
http://technet.microsoft.com/en-us/sysinternals/bb896644 - مراقب المنفذ
كل ذلك من sysinternals.com
إذا كنت تريد فقط معرفة العملية الجارية والخيوط ضمن كل عملية، فإنني أوصي بالتعرف على المزيد wmic
.أداة خط cmd رائعة، والتي تمنحك أكثر بكثير مما يمكنك معرفته.
مثال :-
c:\> wmic process list brief /every:5
سيُظهر الأمر أعلاه قائمة العمليات بالكامل باختصار كل 5 ثوانٍ.لمعرفة المزيد، يمكنك فقط الذهاب مع /?
أمر النوافذ، على سبيل المثال،
c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
وهلم جرا وهكذا دواليك.:)
NetStat -a -o هذا يوضح pid من العملية التي تعمل على منفذ معين.
ضع في اعتبارك معرف العملية وانتقل إلى مدير المهام وعلامة التبويب الخدمات أو التفاصيل وقم بإنهاء العملية التي لها نفس معرف المنتج.
وبالتالي يمكنك قتل العملية التي تعمل على منفذ معين في النوافذ.
بالنسبة لأولئك الذين يستخدمون Powershell، حاول Get-NetworkStatistics
:
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
باستخدام بوويرشيل...
...سيكون هذا صديقك (استبدل 8080 برقم المنفذ الخاص بك):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
إخراج العينة
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
لذلك في هذا المثال، يتم الاستماع إلى tnslsnr.exe (قاعدة بيانات OracleXE) على المنفذ 8080.
شرح سريع
Select-String
يستخدم لتصفية الإخراج المطول لـ netstat
للخطوط ذات الصلة.
-Pattern
يختبر كل سطر مقابل تعبير عادي.
-Context 0,1
سيتم إخراج 0 خطوط بادئة وخط خلفي واحد لكل مطابقة للنمط.
برمجياً، أنت بحاجة إلى أشياء من iphlpapi.h, ، على سبيل المثال GetTcpTable2().الهياكل مثل MIB_TCP6ROW2 تحتوي على PID للمالك.
الحل الذي يساعدني على سطر واحد هو هذا الحل، فقط استبدل 3000 بالمنفذ الخاص بك
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
افتح ال
command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
.يكتب
netstat -aon | findstr '[port_number]'
استبدل [port_number] برقم المنفذ الفعلي الذي تريد التحقق منه ثم اضغط على زر الإدخال.
- إذا تم استخدام المنفذ من قبل أي تطبيق، فسيتم عرض تفاصيل هذا التطبيق.الرقم الذي يظهر في العمود الأخير من القائمة هو PID (معرف العملية) لهذا التطبيق.دوّن هذا.
يكتب
tasklist | findstr '[PID]'
استبدل [PID] بالرقم من الخطوة أعلاه واضغط على زر الإدخال.
- سيظهر لك اسم التطبيق الذي يستخدم رقم المنفذ الخاص بك.
بالنسبة لنظام التشغيل Windows، إذا كنت تريد العثور على أشياء يتم الاستماع إليها أو توصيلها بالمنفذ 1234، فقم بتنفيذ ما يلي في موجه cmd:
netstat -na | find "1234"
استخدم البرنامج النصي الدفعي أدناه والذي يأخذ اسم العملية كوسيطة ويعطي مخرجات netstat للعملية.
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End