Comment savoir quel processus écoute sur un port sous Windows ?
-
09-06-2019 - |
Question
Comment savoir quel processus écoute sur un port sous Windows ?
La solution
PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
cmd
C:\> netstat -a -b
(Ajouter -n pour l'empêcher d'essayer de résoudre les noms d'hôte, ce qui le rendra beaucoup plus rapide.)
Notez la recommandation de Dane pour TCPView.Cela a l'air très utile !
-un Affiche toutes les connexions et ports d'écoute.
-b Affiche l'exécutable impliqué dans la création de chaque connexion ou port d'écoute.Dans certains cas, des exécutables bien connus hébergent plusieurs composants indépendants, et dans ces cas, la séquence de composants impliqués dans la création de la connexion ou du port d'écoute est affichée.Dans ce cas, le nom de l'exécutable est entre [] en bas, en haut se trouve le composant qu'il a appelé, et ainsi de suite jusqu'à ce que TCP/IP soit atteint.Notez que cette option peut prendre du temps et échouera si vous ne disposez pas des autorisations suffisantes.
-n Affiche les adresses et les numéros de port sous forme numérique.
-o Affiche l'ID du processus propriétaire associé à chaque connexion.
Autres conseils
Il existe une interface graphique native pour Windows :
- Démarrer>>Tous les programmes>>Accessoires>>Outils système>>Resource Monitor
ou Courir resmon.exe
, ou de Gestionnaire des tâches onglet performances
Utiliser TCPView si vous voulez une interface graphique pour cela.Il s'agit de l'ancienne application Sysinternals que Microsoft a rachetée.
netstat -aon | find /i "listening"
Le commutateur -b mentionné dans la plupart des réponses nécessite que vous disposiez de privilèges administratifs sur la machine.Vous n'avez pas vraiment besoin de droits élevés pour obtenir le nom du processus !
Recherchez le pid du processus en cours d'exécution dans le numéro de port (par exemple, 8080)
netstat -ano | findStr "8080"
Trouver le nom du processus par pid
tasklist /fi "pid eq 2216"
Vous pouvez obtenir plus d'informations si vous exécutez la commande suivante :
netstat -aon |find /i "listening" |find "port"
l'utilisation de la commande 'Rechercher' vous permet de filtrer les résultats.find /i "écoute" affichera uniquement les ports qui sont "à l'écoute".Notez que vous avez besoin du /i pour ignorer la casse, sinon vous taperiez find "LISTENING".|find "port" limitera les résultats à ceux contenant le numéro de port spécifique.Notez qu'à ce sujet, il filtrera également les résultats contenant le numéro de port n'importe où dans la chaîne de réponse.
Ouvrez une fenêtre d'invite de commande (en tant qu'administrateur) Dans la zone "Démarrer echercher", saisissez "cmd", puis faites un clic droit sur "cmd.exe" et sélectionnez "Exécuter en tant qu'administrateur".
Saisissez le texte suivant puis appuyez sur Entrée.
netstat -abno
-un Affiche toutes les connexions et ports d'écoute.
-b Affiche l'exécutable impliqué dans la création de chaque connexion ou port d'écoute.Dans certains cas, des exécutables bien connus hébergent plusieurs composants indépendants et, dans ces cas, la séquence de composants impliqués dans la création du port de connexion ou d'écoute est affichée.Dans ce cas, le nom exécutable est dans [] en bas, en haut est le composant qu'il a appelé, et ainsi de suite jusqu'à ce que TCP / IP soit atteint.Notez que cette option peut prendre du temps et échouera à moins que vous ayez suffisamment d'autorisations.
-n Affiche les adresses et les numéros de port sous forme numérique.
-o Affiche l'ID du processus propriétaire associé à chaque connexion.
Recherchez le port sur lequel vous écoutez sous « Adresse locale »
Regardez le nom du processus directement en dessous.
NOTE:Pour trouver le processus sous le Gestionnaire des tâches
Notez le PID (identifiant de processus) à côté du port que vous regardez.
Ouvrez le Gestionnaire des tâches Windows.
Sélectionnez l'onglet Processus.
Recherchez le PID que vous avez noté lorsque vous avez effectué le netstat à l'étape 1.
Si vous ne voyez pas de colonne PID, cliquez sur Afficher / Sélectionner les colonnes.Sélectionnez PID.
Assurez-vous que « Afficher les processus de tous les utilisateurs » est sélectionné.
Obtenir le PID et le nom de l'image
Utilisez une seule commande :
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
où 9000
doit être remplacé par votre numéro de port.
Le sortir contiendra quelque chose comme ceci :
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Explication:
il parcourt chaque ligne à partir de la sortie de la commande suivante :
netstat -aon | findstr 9000
de chaque ligne, le PID (
%a
- le nom n'a pas d'importance ici) est extrait (PID est le5
ème élément dans cette ligne) et passé à la commande suivantetasklist /FI "PID eq 5312"
Si tu veux sauter le entête et le retour du invite de commande, vous pouvez utiliser:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Sortir:
java.exe 5312 Services 0 130,768 K
Nous trouvons d’abord l’identifiant du processus de cette tâche particulière que nous devons éliminer afin d’obtenir un port libre.
taper
netstat -n -a -o
Après avoir exécuté cette commande dans l'invite de ligne de commande Windows (CMD), sélectionnez le PID que je pense que la dernière colonne supposait qu'il s'agit de 3312
Maintenant, tapez
taskkill /F /PID 3312
Vous pouvez maintenant vérifier en tapant la commande netstat.
NOTE:Parfois, Windows ne vous permet pas d'exécuter cette commande directement sur CMD, donc vous devez d'abord aller avec ces étapes à partir de Start-> Invite de commande (cliquez avec le bouton droit sur l'invite de commande et exécutez en tant qu'administrateur)
Il est très simple d'obtenir le numéro de port à partir du pid dans Windows.
Voici les étapes :
1) Allez dans Exécuter --> tapez cmd --> appuyez sur Entrée.
2) écrivez la commande suivante...
netstat -aon | findstr [port number]
(Note:N'incluez pas de crochets.)
3) appuyez sur Entrée...
4) Ensuite, cmd vous donnera le détail du service exécuté sur ce port avec le pid.
5) Ouvrez le gestionnaire de tâches, appuyez sur l'onglet service et faites correspondre le pid avec celui du cmd et c'est tout.
Pour obtenir une liste de tous les ID de processus propriétaires associés à chaque connexion :
netstat -ao |find /i "listening"
Si vous voulez tuer un processus, ayez l'identifiant et utilisez cette commande, pour que le port devienne libre
Taskkill /F /IM pidof a process
Ouvrez simplement un shell de commande et tapez :(en disant que votre port est 123456)
netstat -a -n -o | find "123456"
Vous verrez tout ce dont vous avez besoin
Les en-têtes sont :
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
c'est comme mentionné ici
Si vous souhaitez utiliser un outil GUI pour ce faire, il y a SysInternals TCPView.
Avec PowerShell 5 sur Windows 10 ou Windows Server 2016, exécutez Get-NetTCPConnection
applet de commande.Je suppose que cela devrait également fonctionner sur les anciennes versions de Windows.
La sortie par défaut de Get-NetTCPConnection
n'inclut pas l'ID de processus pour une raison quelconque et c'est un peu déroutant.Cependant, vous pouvez toujours l'obtenir en formatant la sortie.La propriété que vous recherchez est OwningProcess
.
Si vous souhaitez connaître l'ID du processus qui écoute sur le port 443, exécutez cette commande :
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
Formatez la sortie dans un tableau avec les propriétés que vous recherchez :
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
Si vous souhaitez connaître le nom du processus, exécutez cette commande :
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
Pour savoir quel processus spécifique (PID) utilise quel port :
netstat -anon | findstr 1234
Où 1234 est le PID de votre processus.[Allez dans Gestionnaire des tâches -> onglet Services/Processus pour connaître le PID de votre application]
netstat -ao
et netstat -ab
vous indique l'application, mais si vous n'êtes pas administrateur, vous obtiendrez "L'opération demandée nécessite une élévation".
Ce n'est pas idéal, mais si vous utilisez sysinternals Process Explorer, vous pouvez accéder aux propriétés de processus spécifiques et consulter l'onglet TCP pour voir s'ils utilisent le port qui vous intéresse.C'est un peu une histoire d'aiguille et de botte de foin, mais peut-être que ça aidera quelqu'un...
Tapez la commande : netstat -aon | findstr :DESIRED_PORT_NUMBER
Par exemple, si je veux trouver le port 80 : netstat -aon | findstr :80
Cette réponse a été initialement publiée dans ce fil.
je recommande Ports courants de NirSoft.
CurrPorts peut filtrer les résultats affichés. TCPView n'a pas cette fonctionnalité.
Note:Vous pouvez cliquer avec le bouton droit sur la connexion socket d'un processus et sélectionner "Fermer les connexions TCP sélectionnées" (vous pouvez également le faire dans TCPView).Cela résout souvent les problèmes de connectivité que j'ai avec Outlook et Lync après avoir changé de VPN.Avec CurrPorts, vous pouvez également fermer les connexions depuis la ligne de commande avec le paramètre "/close".
Netstat
- -a affiche tous les ports de connexion et d'écoute
- -b affiche les exécutables
- -n arrête de résoudre les noms d'hôtes (forme numérique)
-o processus de possession
netstat -bano | findstr "7002"
netstat -ano > ano.txt
Courants l'outil permet de rechercher et de filtrer
Suivez ces outils : - De cmd :- C:\> netstat -anob
avec Administrateur privilège.
http://technet.microsoft.com/en-us/sysinternals/bb896653 - Explorateur de processus
http://technet.microsoft.com/en-us/sysinternals/bb896645 - Processus de vidage
http://technet.microsoft.com/en-us/sysinternals/bb896644 - Moniteur de ports
Tout sur sysinternals.com
Si vous souhaitez simplement connaître le processus en cours d'exécution et les threads sous chaque processus, je vous recommande de vous renseigner sur wmic
.Merveilleux outil de ligne cmd, qui vous donne bien plus que ce que vous pouvez savoir.
Exemple :-
c:\> wmic process list brief /every:5
La commande ci-dessus affichera brièvement toute la liste des processus toutes les 5 secondes.Pour en savoir plus, vous pouvez simplement aller avec /?
commande de Windows, par exemple,
c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
et ainsi de suite.:)
netstat -a -o Cela montre le PID du processus exécuté sur un port particulier.
Gardez à l’esprit l’identifiant du processus et accédez à l’onglet Gestionnaire de tâches et services ou détails et terminez le processus qui a le même PID.
Ainsi, vous pouvez tuer un processus exécuté sur un port particulier dans Windows.
Pour ceux qui utilisent Powershell, essayez 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
Utilisation de PowerShell...
...ce serait votre ami (remplacez 8080 par votre numéro de port) :
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Exemple de sortie
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
Ainsi, dans cet exemple, tnslsnr.exe (base de données OracleXE) écoute sur le port 8080.
Explication rapide
Select-String
est utilisé pour filtrer la longue sortie de netstat
pour les lignes concernées.
-Pattern
teste chaque ligne par rapport à une expression régulière.
-Context 0,1
produira 0 ligne de début et 1 ligne de fin pour chaque correspondance de modèle.
Par programmation, vous avez besoin d'éléments provenant de iphlpapi.h, Par exemple ObtenirTcpTable2().Des structures comme MIB_TCP6ROW2 contenir le PID du propriétaire.
Une solution sur une seule ligne qui m'aide est celle-ci, remplacez simplement 3000 par votre port
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
Ouvrez le
command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
.Taper
netstat -aon | findstr '[port_number]'
Remplacez le [numéro_port] par le numéro de port réel que vous souhaitez vérifier et appuyez sur Entrée.
- Si le port est utilisé par une application, les détails de cette application seront affichés.Le numéro, affiché dans la dernière colonne de la liste, est le PID (ID de processus) de cette application.Prenez-en note.
Taper
tasklist | findstr '[PID]'
Remplacez le [PID] par le numéro de l'étape ci-dessus et appuyez sur Entrée.
- Le nom de l'application qui utilise votre numéro de port s'affichera.
Pour Windows, si vous souhaitez rechercher des éléments en écoute ou connectés au port 1234, exécutez ce qui suit à l'invite cmd :
netstat -na | find "1234"
Utilisez le script batch ci-dessous qui prend un nom de processus comme argument et donne une sortie netstat pour le processus.
@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