2014-01-26 16:07:42 +0000 2014-01-26 16:07:42 +0000
46
46

netstat z nazwą procesu?

Używając netstat -a -o -n mogę uzyskać listę portów i PID

następnie muszę przejść do menedżera zadań i dodać PID i zobaczyć kto to jest. (dość frustrujące)

Zastanawiałem się, czy istnieje polecenie CMD, które robi to wszystko (używając find , for , powershell)

tak, że mogę uzyskać nazwę procesu

Odpowiedzi (6)

56
56
56
2014-01-26 18:06:00 +0000

Rozwiązanie

Użyj parametru -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.

Uwaga Polecenie netstat -b nie powiedzie się, jeśli nie zostanie uruchomione z podniesionego wiersza poleceń.

Obejście

Przefiltruj listę procesów i znajdź interesujący Cię PID:

tasklist | findstr /c:"PID"

Alternatywne rozwiązanie

Zamiast tego możesz użyć Tcpvcon.exe. Nie są wymagane prawa administratora.

Tcpvcon użycie jest podobne do wbudowanego narzędzia Windows 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.
8
8
8
2014-01-26 16:12:23 +0000

Sądzę, że szukasz TCPView z SysInternals.

2
2
2
2016-05-13 02:17:35 +0000

Oto przykład dla windows używający FOR do parsowania wyjścia netstat, następnie DO tasklist z filtrem /fi na pid, aby pokazać nazwę procesu.

Ostatnim znaleziskiem jest usunięcie nagłówków tasklist.

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

wypisuje rekordy jak

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

Dodatkowe pola z netstat mogą być dodane przez dodanie tokenów.

2
2
2
2016-03-07 22:14:01 +0000

Jeśli lubisz używać PS, możesz rozwidlić ten kod (uwaga: jest super-podstawowy)

$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)"
}

Zauważ, że możesz spróbować Path zamiast ProcessName, aby uzyskać pełną ścieżkę do pliku wykonywalnego - nie będzie to jednak działać z usługami systemowymi. Ponadto, możesz chcieć dodać ProcessName na koniec linii zamiast zastępować wartość PID.

Enjoy it ;)

1
1
1
2018-02-11 10:10:26 +0000

Spróbuj użyć tego…

Nazwa procesu ze znacznikiem czasu :) w onelinerze… bez potrzeby pisania skryptów szybko i łatwo …

Możesz zmienić param SYN_SENT na ESTABLISHED lub LISTENING

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
0
0
2017-10-07 12:37:30 +0000

Bardzo ładny Erik Bitemo! Myślałem o dodaniu zmiennej dla ścieżki, po czym zdałem sobie sprawę, że już ją masz, choć nie została zdefiniowana. Więc kod, który ponownie wykorzystałem to:

$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*"}
     }

Próbowałem znaleźć procesy i usługi dla aplikacji, gdzie użyłem nieco innego 2 linera.

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