Comment savoir quel processus écoute sur un port sous Windows?

2275

Comment savoir quel processus écoute sur un port sous Windows?

Lecture seulement
la source
3
Currports est un outil qui permet également de rechercher et de filtrer nirsoft.net/utils/cports.html
Blue Clouds
1
Je suis tombé sur cela en essayant d'exécuter Tomcat en mode débogage sous IntelliJ, la meilleure solution pour moi s'est avérée être de changer la configuration de transport de débogage (Fichier-> Paramètres-> Build / exe / deploy-> Debugger) de "socket" en "la memoire partagée".
TMN

Réponses:

2624

Nouvelle réponse, PowerShell

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

Ancienne réponse, cmd

 C:\> netstat -a -b

(Ajoutez -n pour l'empêcher d'essayer de résoudre les noms d'hôtes, ce qui le rendra beaucoup plus rapide.)

Notez la recommandation de Dane pour TCPView . Ça a l'air très utile!

-a Affiche toutes les connexions et les ports d'écoute.

-b Affiche l'exécutable impliqué dans la création de chaque connexion ou port d'écoute. Dans certains cas, les exécutables bien connus hébergent plusieurs composants indépendants, et dans ces cas, la séquence des composants impliqués dans la création de la connexion ou du port d'écoute s'affiche. Dans ce cas, le nom de l'exécutable est en [] 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 sauf si vous disposez des autorisations suffisantes.

-n Affiche les adresses et les numéros de port sous forme numérique.

-o Affiche l'ID de processus propriétaire associé à chaque connexion.

Brad Wilson
la source
252
-o pour obtenir le PID
Laurent K
121
et taskkill / PID <pid> pour terminer ensuite le processus, en utilisant / F si approprié.
BitMask777
81
Vous devrez peut-être exécuter votre shell de ligne de commande en tant qu'administrateur, sinon vous pouvez obtenir un message d'erreur sur les privilèges insuffisants. Utilisez l'option "Exécuter en tant qu'administrateur" lorsque vous cliquez avec le bouton droit sur cmd.exe.
Gruber
6
Fonctionne mais nécessite une autorisation élevée. Maj + clic droit sur l'icône de commande -> exécuter en tant qu'administrateur
Christian Bongiorno
18
Après avoir obtenu le PID - disons que c'est 1234- alors vous pouvez utiliser tasklist /fi "pid eq 1234"pour trouver le nom et d'autres détails du processus.
Steve Chambers
2204

Il existe une interface graphique native pour Windows:

  • Menu Démarrer → Tous les programmesAccessoiresOutils systèmeMoniteur de ressources

Ou Exécuter resmon.exe , ou à partir de l' onglet des performances du Gestionnaire des tâches .

Entrez la description de l'image ici

bcorso
la source
41
Affiche également l'état du pare-feu de la liaison (dernière colonne). Très utile.
Raphael
8
Vous devez être administrateur (ou dans ce groupe) pour exécuter cela.
KrishPrabakar
2
@bcorso, que signifie la liaison à une " adresse non spécifiée "?
Pacerier
5
Peut également être lancé à partir de l'onglet Performances du Gestionnaire des tâches, au moins dans Windows 10. (Je n'ai pas vérifié les autres versions.)
Mathieu K.
10
Le commentaire de @ user4836454 ci-dessus n'est pas correct: le moniteur de ressources affiche les ports avec les écouteurs, même s'il n'y a pas de connexion réseau à ces ports. Regardez simplement dans la section "Ports d'écoute" au lieu de la section "Connexions TCP".
Jpsy
235

Utilisez TCPView si vous voulez une interface graphique pour cela. C'est l'ancienne application Sysinternals que Microsoft a achetée.

Danois
la source
9
C'est selon moi la meilleure option, d'autant plus que tous les processus sont dans la même liste et que vous pouvez fermer les processus directement en cliquant dessus avec le bouton droit.
Andreas Lundgren
8
De plus, cela ne nécessite pas de privilèges d'administrateur!
Janac Meena
222

Pour les fenêtres:

netstat -aon | find /i "listening"
aku
la source
25
+1 Mais gardez à l'esprit que si vos fenêtres fonctionnent dans une langue autre que l'anglais, vous devrez changer "écouter" le terme natif. Par exemple netstat -aon | find /i "abhören"pour l'allemand.
Lévite
2
Dans mon cas, cela n'a pas fonctionné à cause du signe des guillemets, mais la solution netstat -aon | findstr LISTENING fonctionne parfaitement!
The Godfather
Cela fonctionne sans exiger des privilèges élevés, donc voté.
Vlad Schnakovszki
1
Je reçois une erreur en essayant d'exécuter cette commande sur W10 15063.729 avec PowerShell:FIND: Parameter format not correct
Nicke Manarin
1
En quoi cette réponse est-elle pertinente pour "savoir quel processus [nom] écoute sur un port sous Windows?"
Pawel Cioch
137

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!

Trouvez 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"

processus de recherche par port TCP / IP

Ram Sharma
la source
82

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 "listening"n'affichera que les ports en écoute. Remarque, vous devez /iignorer la casse, sinon vous devez taper find "LISTENING". | find "port"limitera les résultats à ceux contenant uniquement le numéro de port spécifique. Notez que cela filtrera également les résultats qui ont le numéro de port n'importe où dans la chaîne de réponse.

Nathan24
la source
8
FWIW tentant d'exécuter cela dans PowerShell v2.0 génère une erreur FIND: Parameter format not correct. Vous devez ajouter un espace après les critères de recherche. Cela vous laissera avec netstat -aon | find /i "listening" | find "1234 ".
moi.
2
Remplacez "port" ci-dessus par votre port, ex "5000"
jbooker
1
@soi. J'obtiens toujours cette erreur avec PS 5.1, même après avoir ajouté l'espace après le tuyau. Savez-vous ce qui se passe?
Nicke Manarin
2
@NickeManarinin & @self soit d'abord passer de powershell à cmd (tapez simplement cmd et appuyez sur Entrée puis refaites la commande) ou dans powershell utilisez plutôt cette commande: netstat -aon | find / i " {back tick}" écoute {back tick}"" | find " {back tick}" port {back tick}" "(<- notez les citations échappées - excusez le terme back tickcar je ne peux pas ajouter le personnage réel car il pense que c'est un snipping)
Tristan van Dam
72
  1. Ouvrez une fenêtre d'invite de commande (en tant qu'administrateur) Dans "Démarrer \ Boîte de recherche" Entrez "cmd" puis cliquez avec le bouton droit sur "cmd.exe" et sélectionnez "Exécuter en tant qu'administrateur"

  2. Saisissez le texte suivant, puis appuyez sur Entrée.

    netstat -abno

    -a Affiche toutes les connexions et les ports d'écoute.

    -b Affiche l'exécutable impliqué dans la création de chaque connexion ou port d'écoute. Dans certains cas, les exécutables bien connus hébergent plusieurs composants indépendants, et dans ces cas, la séquence des composants impliqués dans la création de la connexion ou du port d'écoute s'affiche. Dans ce cas, le nom de l'exécutable est en [] 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 sauf si vous disposez des autorisations suffisantes.

    -n Affiche les adresses et les numéros de port sous forme numérique.

    -o Affiche l'ID de processus propriétaire associé à chaque connexion.

  3. Trouvez le port que vous écoutez sous "Adresse locale"

  4. Regardez le nom du processus directement en dessous.

REMARQUE: pour trouver le processus sous le Gestionnaire des tâches

  1. Notez le PID (identificateur de processus) à côté du port que vous regardez.

  2. Ouvrez le Gestionnaire des tâches de Windows.

  3. Sélectionnez l'onglet Processus.

  4. 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é.

Cyborg
la source
56

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"

9000doit être remplacé par votre numéro de port.

La sortie 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'est pas important ici) est extrait (le PID est le 5e élément de cette ligne) et passé à la commande suivante

    tasklist /FI "PID eq 5312"
    

Si vous souhaitez ignorer l'en- tête et le retour de l' 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

Production:

java.exe                      5312 Services                   0    130,768 K
ROUMANIE_ingénieur
la source
2
Bonne réponse, mais vous devriez le changer findstr :9000sinon, vous trouverez même des applications contenant le numéro (par exemple, lorsque vous recherchez "80", vous trouverez également des applications sur le port 80, 800, 8000).
Radon8472
48

Nous trouvons d'abord l'ID de processus de cette tâche particulière que nous devons éliminer pour libérer le port:

Type

netstat -n -a -o

Après avoir exécuté cette commande dans l'invite de ligne de commande Windows (cmd), sélectionnez le pid dont je pense que la dernière colonne. Supposons que ce soit 3312.

Tapez maintenant

taskkill /F /PID 3312

Vous pouvez maintenant recouper en tapant la netstatcommande.

REMARQUE: parfois, Windows ne vous permet pas d'exécuter cette commande directement sur CMD, vous devez donc d'abord suivre ces étapes:

Dans le menu Démarrer -> invite de commande (faites un clic droit sur l'invite de commande et exécutez en tant qu'administrateur)

Pankaj Pateriya
la source
30

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, utilisez l'ID et utilisez cette commande pour que le port devienne libre

Taskkill /F /IM PID of a process
Monis Majeed
la source
1
cela ne tient pas compte de l'écoute des ports UDP
evandrix
27

Il est très simple d'obtenir le numéro de port d'un PID sous Windows.

Voici les étapes:

  1. Allez à exécuter → tapez cmd → appuyez sur Enter.

  2. Écrivez la commande suivante ...

    netstat -aon | findstr [port number]
    

    (Remarque: n'incluez pas de crochets.)

  3. Appuyez sur Enter...

  4. Ensuite, cmd vous donnera le détail du service exécuté sur ce port avec le PID.

  5. Ouvrez le Gestionnaire des tâches et appuyez sur l'onglet de service et faites correspondre le PID avec celui de la cmd, et c'est tout.

Nishat Lakhani
la source
18

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 .

Tajveer Singh Nijjar
la source
1
FYI / pour toute personne intéressée: c'est findstr 123456(sans guillemets) ou find "123456"(avec guillemets). (@Josh)
Kevin Cruijssen
18

Pour savoir quel processus spécifique (PID) utilise quel port:

netstat -anon | findstr 1234

Où 1234 est le PID de votre processus. [Accédez au Gestionnaire des tâches → onglet Services / Processus pour connaître le PID de votre application.]

Talha Imam
la source
2
Il convient de noter que vous n'avez pas besoin de -ndéfinir le drapeau deux fois. -anoest assez.
mwieczorek
16

Avec PowerShell 5 sur Windows 10 ou Windows Server 2016, exécutez l' Get-NetTCPConnectionapplet de commande. Je suppose que cela devrait également fonctionner sur les anciennes versions de Windows.

La sortie par défaut de Get-NetTCPConnectionn'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 trouver 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
    
bahrep
la source
13

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 pour cette question .

Technotronic
la source
11

Netstat:

  • -a affiche tous les ports de connexion et d'écoute
  • -b affiche les exécutables
  • -n stop résoudre les noms d'hôte (forme numérique)
  • -o processus d'appropriation

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt 
    

L' outil Currports permet de rechercher et de filtrer

Nuages ​​bleus
la source
11
  1. Ouvrez l'invite de commande - démarrer → Exécutercmd, ou menu Démarrer → Tous les programmesAccessoiresInvite de commandes .

  2. Type

    netstat -aon | findstr '[port_number]'
    

Remplacez le [port_number]par le numéro de port réel que vous souhaitez vérifier et appuyez sur Enter.

  1. Si le port est utilisé par une application, les détails de cette application seront affichés. Le numéro, qui apparaît dans la dernière colonne de la liste, est le PID (ID de processus) de cette application. Prenez-en note.
  2. Type

    tasklist | findstr '[PID]'
    

Remplacez le [PID]par le numéro de l'étape ci-dessus et appuyez sur Enter.

  1. Vous verrez le nom de l'application qui utilise votre numéro de port.
Anatole ABE
la source
3
Sur Win 10: votre commande à l'étape 2 et à l'étape 4 ne fonctionne que si vous remplacez les guillemets simples par des guillemets doubles. Devrait dire netstat -aon | findstr "[numéro_port]"
Leonardo Lopez
Cette solution ne nécessite aucune autorisation élevée. Tks!
Totalys
10

netstat -aoet netstat -abvous indiquer l'application, mais si vous n'êtes pas administrateur système, vous obtiendrez "L'opération demandée nécessite une élévation".

Ce n'est pas idéal, mais si vous utilisez l'Explorateur de processus de Sysinternals, vous pouvez accéder aux propriétés de processus spécifiques et regarder l'onglet TCP pour voir s'ils utilisent le port qui vous intéresse. C'est un peu une aiguille et une botte de foin chose, mais peut-être que ça va aider quelqu'un ...

Tony Delroy
la source
Si vous n'êtes pas administrateur, vous ne pourrez pas utiliser l'Explorateur de processus (ou même le Gestionnaire des tâches Windows> Gestionnaire de ressources) pour obtenir ces informations à partir d'un processus qui n'est pas le vôtre pour commencer.
Abel
9

Je recommande CurrPorts de NirSoft.

CurrPorts peut filtrer les résultats affichés. TCPView n'a pas cette fonctionnalité.

Remarque: 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 à partir de la ligne de commande avec le paramètre "/ close".

Josh
la source
7

Une solution monoligne qui m'aide est celle-ci. Remplacez simplement 3000 par votre port:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

Edit: Modification killà Stop-Processpour un langage plus PowerShell comme

Angel Venchev
la source
6
Vous ne voulez probablement pas tuer le processus automatiquement. Je séparerais cette commande kill et l'expliquerais. Je ne veux pas de mauvais copier-coller de l'utilisateur sans réfléchir soigneusement.
TinkerTenorSoftwareGuy
1
Et si vous Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
optez
6

Suivez ces outils: De cmd : C:\> netstat -anobavec des privilèges d' administrateur .

Explorateur de processus

Dump de processus

Moniteur de port

Tout de sysinternals.com.

Si vous voulez simplement connaître le processus en cours et les threads sous chaque processus, je vous recommande d'en savoir plus sur wmic . C'est un merveilleux outil en ligne de commande, qui vous offre bien plus que vous ne pouvez en savoir.

Exemple:

c:\> wmic process list brief /every:5

La commande ci-dessus affichera une liste de tous les processus en bref toutes les 5 secondes. Pour en savoir plus, vous pouvez simplement utiliser la /?commande des fenêtres, par exemple,

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

Et ainsi de suite. :)

Perl Fanatic
la source
PortMon (le lien derrière Port Monitor) sert à surveiller les ports série et parallèles , pas les ports réseau.
James
6

Utilisation:

netstat -a -o

Cela montre le PID du processus en cours d'exécution sur un port particulier.

Gardez à l'esprit l'ID du processus et accédez au Gestionnaire des tâches et aux services ou à l'onglet Détails et terminez le processus qui a le même PID.

Ainsi, vous pouvez tuer un processus en cours d'exécution sur un port particulier sous Windows.

nisha
la source
6

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
mikemaccana
la source
5

En utilisant 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 affichera 0 lignes de tête et 1 ligne de fin pour chaque correspondance de modèle.
Jpsy
la source
2

Pour Windows, si vous souhaitez rechercher des éléments à l'écoute ou connectés au port 1234, exécutez la commande suivante à l'invite cmd:

netstat -na | find "1234"
Zoomzoom
la source
1

Utilisez le script batch ci-dessous qui prend un nom de processus comme argument et donne une netstatsortie 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
deshapriya debesh
la source
1

Sur la base des réponses avec info et kill , pour moi, il est utile de les combiner en une seule commande . Et vous pouvez l'exécuter à partir de cmd pour obtenir des informations sur les processus qui écoutent sur un port donné (exemple 8080):

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"

Ou si vous voulez le tuer:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i

Vous pouvez également mettre ces commandes dans un fichier bat (elles seront légèrement différentes - remplacer %ipour %%i):

Fichier portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"

Fichier portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i

Ensuite, vous de cmd vous pouvez le faire:

portInfo.bat 8080

ou

portKill.bat 8080

lczapski
la source
1
Cela pourrait être un script utile. Cependant, je l'ai essayé en CMD ainsi qu'en PowerShell 6 sans succès. Vous pourriez peut-être améliorer votre réponse en fournissant un peu plus de détails.
Manfred
La première partie fonctionne-t-elle? Est-ce seulement un problème avec "bat"? Il y a quelques différences dans le passage des variables: (%% i)
lczapski
@Manfred J'ai essayé ceci sur 3 fenêtres différentes 10. Par exemple .\portInfo.bat 800dans PowerShell, cela donne quelque chose comme ceci:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
lczapski
Désolé, pas de chance. J'ai mis cette commande dans un fichier nommé portInfo.batdans un terminal PowerShell, puis exécuté .\portInfo.bat 8080. La sortie n'était que le contenu du fichier de commandes. Très bien, je néglige quelque chose. Remarque, j'utilise PowerShell 6.2.3 sous Windows 10. Je l'ai également essayé dans une invite de commande standard, mais le résultat était le même: sortie du contenu du script. Je suis sûr qu'il me manque une information cruciale pour que cela fonctionne.
Manfred
1
Pourquoi ne pas ajouter /nh: @tasklist /nh /fi "pid eq %i"? Et justement la porte:Findstr ":8080"
Ce n'était pas moi
0

Dans mon cas, le port (3000) n'a pas été utilisé du tout et n'est pas visible dans netstat. Mais! Le programme de désinstallation Docker pour Windows a résolu le problème.

Tony Sepia
la source