आप यह कैसे पता लगा सकते हैं कि कौन सी प्रक्रिया विंडोज पर एक पोर्ट पर सुन रही है?
आप यह कैसे पता लगा सकते हैं कि कौन सी प्रक्रिया विंडोज पर एक पोर्ट पर सुन रही है?
जवाबों:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(जोड़े -n संकल्प होस्ट नामों की कोशिश कर इसे रोकने के लिए है, जो यह बहुत तेजी से कर देगा।)
नोट TCPView के लिए डेन की अनुशंसा । यह बहुत उपयोगी लगता है!
-एक सभी कनेक्शन और सुनने के बंदरगाहों को प्रदर्शित करता है।
-b प्रत्येक कनेक्शन या श्रवण पोर्ट बनाने में शामिल निष्पादन योग्य प्रदर्शित करता है। कुछ मामलों में जाने-माने निष्पादनकर्ता कई स्वतंत्र घटकों की मेजबानी करते हैं, और इन मामलों में कनेक्शन बनाने या सुनने के बंदरगाह में शामिल घटकों के अनुक्रम को प्रदर्शित किया जाता है। इस मामले में निष्पादन योग्य नाम नीचे [] में है, शीर्ष पर वह घटक है जिसे यह कहा जाता है, और तब तक जब तक टीसीपी / आईपी नहीं पहुंच जाता। ध्यान दें कि यह विकल्प समय लेने वाला हो सकता है और तब तक विफल रहेगा जब तक आपके पास पर्याप्त अनुमति न हो।
-एन पते और पोर्ट संख्या संख्यात्मक रूप में प्रदर्शित करता है।
-o प्रत्येक कनेक्शन के साथ जुड़े खुद की प्रक्रिया आईडी प्रदर्शित करता है।
1234
- तब आप tasklist /fi "pid eq 1234"
प्रक्रिया के नाम और अन्य विवरणों का पता लगाने के लिए उपयोग कर सकते हैं ।
विंडोज के लिए एक देशी GUI है:
या भागो resmon.exe
, या से टास्क मैनेजर के प्रदर्शन टैब से।
यदि आप इसके लिए एक GUI चाहते हैं तो TCPView का उपयोग करें। यह पुराना Sysinternals एप्लिकेशन है जिसे Microsoft ने खरीदा था।
विंडोज के लिए:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
जर्मन के लिए।
FIND: Parameter format not correct
अधिकांश उत्तरों में उल्लिखित -b स्विच के लिए आपको मशीन पर प्रशासनिक विशेषाधिकार होना चाहिए। प्रक्रिया नाम पाने के लिए आपको वास्तव में उन्नत अधिकारों की आवश्यकता नहीं है!
पोर्ट नंबर में चल रही प्रक्रिया की पीडा ज्ञात करें (जैसे, 8080)
netstat -ano | findStr "8080"
Pid द्वारा प्रक्रिया का नाम ज्ञात करें
tasklist /fi "pid eq 2216"
यदि आप निम्न आदेश चलाते हैं तो आप अधिक जानकारी प्राप्त कर सकते हैं:
netstat -aon | find /i "listening" |find "port"
'फाइंड' कमांड का उपयोग करने से आप परिणामों को फ़िल्टर कर सकते हैं। find /i "listening"
केवल उन बंदरगाहों को प्रदर्शित करेगा जो 'सुन रहे हैं'। ध्यान दें, आपको /i
मामले को अनदेखा करने की आवश्यकता है , अन्यथा आप "LISTENING" टाइप करेंगे। | find "port"
केवल विशिष्ट पोर्ट संख्या वाले लोगों के लिए परिणामों को सीमित करेगा। ध्यान दें, इस पर यह उन परिणामों को भी फ़िल्टर करेगा जिनके पास प्रतिक्रिया स्ट्रिंग में कहीं भी पोर्ट नंबर है।
FIND: Parameter format not correct
। आपको मानदंड खोजने के बाद एक स्थान जोड़ने की आवश्यकता है। इससे आपका साथ छूट जाएगा netstat -aon | find /i "listening" | find "1234 "
।
{back tick}
" सुन {back tick}
""। Find " {back tick}
" port {back tick}
"" "(<- भागे हुए उद्धरणों पर ध्यान दें - शब्द back tick
को माफ करें क्योंकि मैं वास्तविक चरित्र को जोड़ नहीं सकता क्योंकि यह इसके बारे में सोचता है)
एक कमांड प्रॉम्प्ट विंडो खोलें (प्रशासक के रूप में) "स्टार्ट \ सर्च बॉक्स" से "cmd" दर्ज करें और फिर "cmd.exe" पर राइट-क्लिक करें और "Run as Administrator" चुनें।
निम्न पाठ दर्ज करें फिर Enter दबाएँ।
netstat -abno
-एक सभी कनेक्शन और सुनने के बंदरगाहों को प्रदर्शित करता है।
बी प्रत्येक कनेक्शन या श्रवण पोर्ट बनाने में शामिल निष्पादन योग्य प्रदर्शित करता है। कुछ मामलों में जाने-माने निष्पादनकर्ता कई स्वतंत्र घटकों की मेजबानी करते हैं, और इन मामलों में कनेक्शन बनाने या सुनने के बंदरगाह में शामिल घटकों के अनुक्रम को प्रदर्शित किया जाता है। इस मामले में निष्पादन योग्य नाम नीचे [] में है, शीर्ष पर वह घटक है जिसे यह कहा जाता है, और तब तक जब तक टीसीपी / आईपी नहीं पहुंच जाता। ध्यान दें कि यह विकल्प समय लेने वाला हो सकता है और तब तक विफल रहेगा जब तक आपके पास पर्याप्त अनुमति न हो।
-एन पते और पोर्ट संख्या संख्यात्मक रूप में प्रदर्शित करता है।
-o प्रत्येक कनेक्शन के साथ जुड़े खुद की प्रक्रिया आईडी प्रदर्शित करता है।
उस पोर्ट को ढूंढें जिसे आप "स्थानीय पते" के तहत सुन रहे हैं
इसके तहत सीधे प्रक्रिया का नाम देखें।
नोट: कार्य प्रबंधक के तहत प्रक्रिया खोजने के लिए
जिस पोर्ट को आप देख रहे हैं, उसके बगल में PID (प्रक्रिया पहचानकर्ता) पर ध्यान दें।
Windows कार्य प्रबंधक खोलें।
प्रक्रिया टैब चुनें।
जब आपने चरण 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"
आप चाहते हैं छोड़ हैडर और की वापसी कमांड प्रॉम्प्ट , तो आप उपयोग कर सकते हैं:
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
findstr :9000
यदि नहीं, तो आपको एप्लिकेशन भी मिलेंगे जिसमें नंबर शामिल हैं (जैसे कि जब आप "80" खोजते हैं तो आपको पोर्ट 80, 800, 8000 पर भी ऐप मिलेंगे)।
पहले हमें उस विशेष कार्य की प्रक्रिया आईडी मिलती है जिसे हमें पोर्ट फ्री में प्राप्त करने के लिए समाप्त करने की आवश्यकता है:
प्रकार
netstat -n -a -o
Windows कमांड लाइन प्रॉम्प्ट (cmd) में इस कमांड को निष्पादित करने के बाद, उस पीड को चुनें, जो मुझे लगता है कि अंतिम कॉलम है। मान लीजिए यह 3312 है।
अब टाइप करें
taskkill /F /PID 3312
अब आप netstat
कमांड टाइप करके चेक को क्रॉस कर सकते हैं ।
नोट: कभी-कभी विंडोज़ आपको इस कमांड को सीधे सीएमडी पर चलाने की अनुमति नहीं देता है, इसलिए पहले आपको इन चरणों के साथ जाने की आवश्यकता है:
प्रारंभ मेनू से -> कमांड प्रॉम्प्ट (कमांड प्रॉम्प्ट पर राइट क्लिक करें, और व्यवस्थापक के रूप में चलाएं)
प्रत्येक कनेक्शन से जुड़ी सभी स्वयं की प्रक्रिया आईडी की सूची प्राप्त करने के लिए:
netstat -ao |find /i "listening"
यदि किसी भी प्रक्रिया को मारना चाहते हैं, तो आईडी और इस कमांड का उपयोग करें, ताकि पोर्ट मुफ्त हो जाए
Taskkill /F /IM PID of a process
विंडोज में PID से पोर्ट नंबर प्राप्त करना बहुत सरल है।
निम्नलिखित कदम हैं:
चलाने के लिए → टाइप करें cmd → दबाएँ Enter।
निम्नलिखित कमांड लिखें ...
netstat -aon | findstr [port number]
(नोट: चौकोर कोष्ठक शामिल न करें।)
प्रेस Enter...
फिर cmd आपको PID के साथ उस पोर्ट पर चलने वाली सेवा का विवरण देगा।
टास्क मैनेजर खोलें और सर्विस टैब को हिट करें और उस PID को cmd के साथ मिलाएं, और यही वह है।
बस एक कमांड शेल खोलें और टाइप करें (आपका पोर्ट 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
findstr 123456
(उद्धरण के बिना) या find "123456"
(उद्धरण के साथ) है। (@ जोश)
यह पता लगाने के लिए कि कौन सा पोर्ट किस विशिष्ट प्रक्रिया (PID) का उपयोग कर रहा है:
netstat -anon | findstr 1234
जहां 1234 आपकी प्रक्रिया का PID है। [अपने आवेदन के पीआईडी का पता लगाने के लिए कार्य प्रबंधक → सेवाओं / प्रक्रियाओं टैब पर जाएं।]
-n
दो बार ध्वज सेट की आवश्यकता नहीं है । -ano
पर्याप्त है।
Windows 10 या Windows Server 2016 पर PowerShell 5 के साथ, चलाएँ Get-NetTCPConnection
cmdlet । मुझे लगता है कि यह पुराने विंडोज संस्करणों पर भी काम करना चाहिए।
डिफ़ॉल्ट आउटपुट में 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
यदि आप ऐसा करने के लिए GUI टूल का उपयोग करना चाहते हैं तो Sysinternals 'TCPView ।
कमांड में टाइप करें: netstat -aon | findstr :DESIRED_PORT_NUMBER
उदाहरण के लिए, यदि मैं पोर्ट 80 खोजना चाहता हूं: netstat -aon | findstr :80
यह उत्तर मूल रूप से इस प्रश्न पर पोस्ट किया गया था ।
कमांड प्रॉम्प्ट खोलें - स्टार्ट → रन → cmd
, या स्टार्ट मेन्यू → सभी प्रोग्राम्स → एसेसरीज → कमांड प्रॉम्प्ट ।
प्रकार
netstat -aon | findstr '[port_number]'
[port_number]
उस वास्तविक पोर्ट नंबर से बदलें जिसे आप जांचना चाहते हैं और हिट करना चाहते हैं Enter।
प्रकार
tasklist | findstr '[PID]'
[PID]
उपरोक्त चरण से संख्या के साथ बदलें और हिट करें Enter।
netstat -ao
और netstat -ab
आपको आवेदन बताता है, लेकिन यदि आप एक सिस्टम प्रशासक नहीं हैं तो आपको "अनुरोधित ऑपरेशन को उत्थान की आवश्यकता होगी"।
यह आदर्श नहीं है, लेकिन यदि आप Sysinternals ' प्रोसेस एक्सप्लोरर का उपयोग करते हैं तो आप विशिष्ट प्रक्रियाओं के गुणों पर जा सकते हैं और टीसीपी टैब को देख सकते हैं कि क्या वे उस पोर्ट का उपयोग कर रहे हैं जिसमें आप रुचि रखते हैं। यह एक सुई और हिस्टैक का एक सा है। बात, लेकिन शायद यह किसी की मदद करेंगे ...
मैं NirSoft से CurrPorts की सिफारिश करता हूं ।
CurrPorts प्रदर्शित परिणामों को फ़िल्टर कर सकते हैं। TCPView में यह सुविधा नहीं है।
नोट: आप किसी प्रक्रिया के सॉकेट कनेक्शन पर राइट क्लिक कर सकते हैं और "चयनित टीसीपी कनेक्शन बंद करें" का चयन कर सकते हैं (आप इसे TCPView में भी कर सकते हैं)। वीपीएन स्विच करने के बाद अक्सर यह मेरे और आउटलुक और Lync के साथ कनेक्टिविटी के मुद्दों को ठीक करता है। CurrPorts के साथ, आप कमांड लाइन से "/ करीब" पैरामीटर के साथ भी कनेक्शन बंद कर सकते हैं।
एक एकल-लाइन समाधान जो मुझे मदद करता है वह यह है। अपने बंदरगाह के साथ बस 3000 विकल्प:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
संपादित करें: अधिक PowerShell जैसी भाषा के लिए परिवर्तित kill
किया गयाStop-Process
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
इन उपकरणों का पालन करें : cmd से : व्यवस्थापक विशेषाधिकारों के C:\> netstat -anob
साथ ।
सभी sysinternals.com से।
यदि आप प्रत्येक प्रक्रिया के तहत प्रक्रिया और थ्रेड्स जानना चाहते हैं, तो मैं इसके बारे में जानने की सलाह देता हूं wmic
। यह एक अद्भुत कमांड-लाइन टूल है, जो आपको जितना पता चल सकता है, उससे कहीं अधिक आपको देता है।
उदाहरण:
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
प्रोग्रामेटिक रूप से, आपको iphlpapi.h से सामान की आवश्यकता होती है , उदाहरण के लिए GetTcpTable2 ()। MIB_TCP6ROW2 जैसी संरचनाओं में स्वामी PID होता है।
PowerShell का उपयोग करना ... ... यह आपका मित्र होगा (आपके पोर्ट नंबर के साथ 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 लीडिंग लाइन और 1 ट्रेलिंग लाइन आउटपुट करेगा।नीचे दी गई बैच स्क्रिप्ट का उपयोग करें जो एक तर्क के रूप में एक प्रक्रिया का नाम लेता है और 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
जानकारी और मार के जवाब के आधार पर , मेरे लिए यह एक कमांड में उन्हें जोड़ना उपयोगी है । और आप इसे cmd से प्रक्रिया के बारे में जानकारी प्राप्त करने के लिए चला सकते हैं जो दिए गए पोर्ट पर सुनता है (उदाहरण 8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
या यदि आप इसे मारना चाहते हैं:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
तुम भी (वे थोड़ा भिन्न होगा - की जगह एक बल्ला फ़ाइल में उन आदेश डाल सकते हैं %i
के लिए %%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
फिर आप cmd से यह कर सकते हैं:
portInfo.bat 8080
या
portKill.bat 8080
.\portInfo.bat 800
C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
टर्मिनल में स्थित एक फ़ाइले में डाल दिया , फिर निष्पादित किया गया .\portInfo.bat 8080
। आउटपुट केवल बैच फ़ाइल की सामग्री थी। बहुत अच्छी तरह से मैं कुछ अनदेखी कर रहा हूँ। ध्यान दें, मैं विंडोज़ 10 पर PowerShell 6.2.3 का उपयोग कर रहा हूं। मैंने इसे नियमित कमांड प्रॉम्प्ट में भी आज़माया था, लेकिन परिणाम समान था: स्क्रिप्ट की सामग्री का आउटपुट। मुझे यकीन है कि इस काम को करने के लिए मुझे एक महत्वपूर्ण जानकारी याद आ रही है।
/nh
: @tasklist /nh /fi "pid eq %i"
? और ठीक दरवाजा:Findstr ":8080"
मेरे मामले में पोर्ट (3000) का उपयोग बिल्कुल नहीं किया गया था और यह नेटस्टैट में दिखाई नहीं देता था। परंतु! विंडोज के लिए अनइंस्टालर डॉकर ने इस मुद्दे को हल कर दिया है।