प्रक्रिया के नाम के साथ netstat?


46

उपयोग करने से netstat -a -o -n मुझे पोर्ट और पीआईडी ​​की सूची मिल सकती है

फिर मुझे कार्य प्रबंधक के पास जाने की जरूरत है और पीआईडी ​​को जोड़कर देखना चाहिए कि यह कौन है। (बहुत निराशा होती है)

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

अगर वहाँ एक अध्यक्ष एवं प्रबंध निदेशक कमांड जो यह सब करता है मैं आश्चर्य था (का उपयोग करते हुए find, for, powershell)

ताकि मुझे प्रक्रिया का नाम मिल सके


netstat -b as admin, उदाहरणार्थ netstat -abon। और
निर्वासन

जवाबों:


56

उपाय

-bपैरामीटर का उपयोग करें :

  -b            Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

नोटnetstat -b एक ऊंचा कमांड प्रॉम्प्ट से चलाने के लिए जब तक आदेश असफल हो जायेगी।

वैकल्पिक हल

प्रक्रिया सूची को फ़िल्टर करें और उस पीआईडी ​​को खोजें जिसमें आप रुचि रखते हैं:

tasklist | findstr /c:"PID"  


वैकल्पिक समाधान

आप Tcpvcon.exeइसके बजाय उपयोग कर सकते हैं । कोई व्यवस्थापक अधिकार की आवश्यकता नहीं है।

Tcpvcon का उपयोग बिल्ट-इन विंडोज netstatउपयोगिता के समान है।

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.

1
आप ही है वह आदमी।
रॉय नमिर

अच्छा जवाब, बस टिप्पणी कर रहा हूं कि मुझे लगता है कि यह मनोरंजक है कि कैसे एमएस /? प्रलेखन यह भी कहता है "यह विकल्प समय लेने वाला हो सकता है"! और यह विशुद्ध रूप से खिड़कियों की एक मूर्खता है जो यह समय लेने वाली है। लिनक्स का नेटस्टैट अपना निष्पादन योग्य नाम तेजी दिखा रहा है। और लिनक्स के निष्पादन योग्य नाम को दिखाने के लिए रूट / व्यवस्थापक विशेषाधिकारों की आवश्यकता नहीं है
बार्लोप

8

मुझे लगता है कि आप SysInternals से TCPView की तलाश कर रहे हैं ।


मुझे आश्चर्य हुआ कि क्या कोई CMD कमांड है जो यह सब करती है
रॉय नमिर

चलते रहो - TCPView का एक कमांड-लाइन घटक है ..
लेप्टानेटर

ओह ठीक। सोचा शायद किसी ने पहले से ही इसका इस्तेमाल कर लिया है, आदि
रॉय नमिर

यह करना बहुत मुश्किल नहीं होना चाहिए .. मैं शर्त लगा सकता हूँ robvanderwoude.com इस पर कुछ है। TCPView पृष्ठ के अनुसार - "TCPView डाउनलोड में Tcpvcon शामिल है, जो समान कार्यक्षमता वाला कमांड-लाइन संस्करण है।"
लेप्टान्टर

बहुत अच्छा टूल सूट .. अगर यह msys और sis के लिए नहीं था, तो मैं एक निक्स बॉक्स का उपयोग करूंगा। :)
एडी बी

2

यहाँ विंडोज़ के लिए एक उदाहरण FORहै पार्स netstatआउटपुट का उपयोग करके फिर प्रक्रिया नाम दिखाने के लिए पिड पर फ़िल्टर के DO tasklistसाथ /fi

अंतिम खोज tasklistहेडर को हटाने के लिए है ।

FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"

प्रिंट रिकॉर्ड की तरह उत्पादन

tomcat8.exe.x64               4240 Services                   0    931,864 K

से अतिरिक्त क्षेत्रों को netstatटोकन जोड़कर जोड़ा जा सकता है।


इस समाधान के पेशेवरों में शामिल हैं: 1. findबंदरगाहों को फ़िल्टर करने के लिए उपयोग करना (इसके विपरीत, हालांकि netstat -bसीधे प्रक्रिया नाम प्रदान कर सकता है, लेकिन मैन्युअल रूप से खोज करने के लिए इसके आउटपुट के माध्यम से जाना दर्दनाक और त्रुटि-प्रवण है); 2. केवल विंडोज़ देशी कमांड का उपयोग करना, जो अधिक लचीला और स्वतंत्र है।
यिंगु यू आप

1
संभावित सुधार: 1. बेहतर खोज के लिए रेगेक्स का उपयोग करने के बजाय विकल्प के findstrसाथ उपयोग करना ; 2. केवल स्थानीय पोर्ट को फ़िल्टर करने के लिए पैटर्न के रूप में उपयोग करने के लिए । पूरी कमांड हो सकती है/Rfind:443 *[[0-9]"FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|findstr /R /C:":443 *[[0-9]"`) DO @tasklist /fi "pid eq %i" | findstr "%i"
यिंगु यू यूटी

@DavidPostill या @mark क्या आप स्पष्ट netstatकर सकते हैं "टोकन जोड़कर अतिरिक्त क्षेत्रों को जोड़ा जा सकता है?"
यवेस शेलेप

2

यदि आप PS का उपयोग करने के शौकीन हैं, तो आप इस कोड को नोट कर सकते हैं (ध्यान दें: यह सुपर-बेसिक है)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

ध्यान दें कि आप एक पूर्ण निष्पादन योग्य मार्ग प्राप्त करने के Pathबजाय कोशिश कर सकते हैं ProcessName- हालांकि यह सिस्टम सेवाओं के साथ काम नहीं करेगा। इसके अलावा, आप ProcessNamePID मान को प्रतिस्थापित करने के बजाय पंक्ति के अंत में जोड़ना चाह सकते हैं ।

का आनंद लें ;)


1

इसका उपयोग करने का प्रयास करें ...

टाइमलाइन पर प्रक्रिया का नाम :) oneliner में ... तेज़ और आसान स्क्रिप्टिंग की ज़रूरत नहीं ...

आप ESTABLISHED या LISTENING द्वारा param SYN_SENT बदल सकते हैं

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp

मैंने इसका उपयोग आईपी पर एक पैटर्न के साथ किया: पोर्ट जिसे मैं देखना चाहता था। महान स्निपेट!
एलेक्स

0

बहुत अच्छा एरिक बिटमो! मैं पथ के लिए एक चर जोड़ने के बारे में सोच रहा था तब मुझे एहसास हुआ कि आपके पास पहले से ही है, हालांकि यह परिभाषित नहीं था। इसलिए मैंने जो कोड पुन: उपयोग किया वह था:

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

मैं एक आवेदन के लिए प्रक्रियाओं और सेवाओं को खोजने की कोशिश कर रहा था जहां मैंने कुछ अलग 2 लाइनर का उपयोग किया था।

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto

मैं एरिक के सवाल का अपना समाधान शामिल करने के लिए संपादित है, इसलिए यदि आप चाहें तो आप के साथ अपने दृष्टिकोण पर अपने जवाब और ध्यान से हटा सकता है GetServiceऔर Get-Process
फ्लोलिलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.