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

netstat met procesnaam?

Met behulp van netstat -a -o -n kan ik de lijst van poorten en PID krijgen

dan moet ik naar task manager gaan en de PID toevoegen en kijken wie het is. (behoorlijk frustrerend)

Ik vroeg me af of er een CMD commando is dat dit allemaal doet ( met behulp van find , for , powershell)

zodat ik de naam van het proces zou kunnen krijgen

Antwoorden (6)

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

Oplossing

Gebruik de parameter -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.

Note Het netstat -b commando zal mislukken tenzij het wordt uitgevoerd vanaf een verhoogde opdrachtprompt.

Workaround

Filter de proceslijst en zoek de PID waarin je geïnteresseerd bent:

tasklist | findstr /c:"PID"

Alternatieve oplossing

Je kunt in plaats daarvan Tcpvcon.exe gebruiken. Geen admin-rechten nodig.

Tcpvcon gebruik is vergelijkbaar met dat van het ingebouwde Windows netstat hulpprogramma.

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

Ik denk dat u op zoek bent naar TCPView van SysInternals.

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

Hier is een voorbeeld voor windows dat FOR gebruikt om netstat uitvoer te parsen en dan DO tasklist met /fi filter op pid om procesnaam te tonen.

De laatste vondst is om tasklist headers te verwijderen.

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

drukt records af als

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

Extra velden van netstat kunnen worden toegevoegd door tokens toe te voegen.

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

Als je graag PS gebruikt, kun je deze code forken (let op: het is super-basic)

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

Merk op dat je Path kunt proberen in plaats van ProcessName om een volledig uitvoerbaar pad te krijgen - het zal echter niet werken met systeemservices. Je kunt ook de ProcessName aan het eind van de regel zetten in plaats van de PID waarde te vervangen.

Veel plezier ermee ;)

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

Probeer dit te gebruiken…

Procesnaam met tijdstempel :) in oneliner… geen scripting nodig snel en gemakkelijk …

Je kunt param SYN_SENT veranderen in ESTABLISHED of 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

Heel goed, Erik Bitemo! Ik dacht eraan om een variabele toe te voegen voor het pad, maar toen realiseerde ik me dat je dat al hebt, hoewel het niet gedefinieerd was. Dus de code die ik hergebruikte was:

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

Ik probeerde de processen en services te vinden voor een applicatie waar ik een iets andere 2 liner gebruikte.

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