En utilisant netstat -a -o -n
, je peux obtenir la liste des ports et le PID
alors je dois aller au gestionnaire de tâches et ajouter le PID et voir qui est-ce. (assez frustrant)
Je me demandais s’il existe une commande CMD qui fait tout (en utilisant find
, for
, powershell
)
pour que je puisse obtenir le nom du processus
Utilisez le paramètre -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.
Remarque La commande netstat -b
échouera à moins d'être lancée à partir d'une invite de commande avec privilèges élevés.
Filtrez la liste des processus et trouvez le PID qui vous intéresse:
tasklist | findstr /c:"PID"
Vous pouvez utiliser Tcpvcon.exe
à la place. Aucun droit d'administrateur requis.
Tcpvcon usage est similaire à celui de l'utilitaire Windows
netstat
intégré.
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.
Je pense que vous recherchez TCPView de SysInternals.
Si vous aimez utiliser PS, vous pouvez insérer ce code (remarque: il est super basique)
$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)"
}
Notez que vous pouvez essayer Path
au lieu de ProcessName
pour obtenir un chemin d’exécutable complet - cela ne fonctionnera pas avec les services système cependant. Vous pouvez également ajouter la ProcessName
à la fin de la ligne au lieu de remplacer la valeur PID.
Profitez-en ;)
Voici un exemple pour Windows utilisant FOR
pour analyser netstat
output puis DO
tasklist
avec le filtre /fi
sur pid pour afficher le nom du processus.
La dernière découverte consiste à supprimer les en-têtes tasklist
.
FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"
imprime les enregistrements comme
Tomcat8.exe.x64 4240 Services 0 931,864 K
Des champs supplémentaires de netstat
peuvent être ajoutés en ajoutant des jetons.
Très gentil Erik Bitemo! Je pensais ajouter une variable pour le chemin, puis j'ai réalisé que vous l'aviez déjà bien que cela n'ait pas été défini. Donc, le code que j'ai réutilisé était:
$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*"}
}
J'essayais de trouver les processus et les services pour une application où j'utilisais une ligne 2 légèrement différente.
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
Essayez d'utiliser ceci ...
Nom du processus avec horodatage :) dans oneliner ... pas besoin de scripter rapidement et facilement ...
Vous pouvez changer le paramètre SYN_SENT par ESTABLISHED ou 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