Come puoi scoprire quale processo è in ascolto su una porta su Windows?


2275

Come puoi scoprire quale processo è in ascolto su una porta su Windows?


3
Currports è uno strumento che aiuta a cercare + filtrare troppo nirsoft.net/utils/cports.html
Blue Clouds

1
Mi sono imbattuto in questo mentre cercavo di eseguire Tomcat in modalità debug in IntelliJ, la migliore soluzione per me si è rivelata cambiare la configurazione del trasporto di debug (File-> Impostazioni-> Build / exe / deploy-> Debugger) da "socket" a "memoria condivisa".
TMN,

Risposte:


2624

Nuova risposta, PowerShell

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

Vecchia risposta, cmd

 C:\> netstat -a -b

(Aggiungi -n per interrompere il tentativo di risolvere i nomi host, che lo renderà molto più veloce.)

Nota la raccomandazione di Dane per TCPView . Sembra molto utile!

-a Visualizza tutte le connessioni e le porte di ascolto.

-b Visualizza l'eseguibile coinvolto nella creazione di ogni connessione o porta di ascolto. In alcuni casi eseguibili noti ospitano più componenti indipendenti e in questi casi viene visualizzata la sequenza dei componenti coinvolti nella creazione della porta di connessione o di ascolto. In questo caso il nome dell'eseguibile è in [] in basso, in alto è il componente che ha chiamato, e così via fino al raggiungimento di TCP / IP. Nota che questa opzione può richiedere molto tempo e fallirà a meno che tu non abbia autorizzazioni sufficienti.

-n Visualizza gli indirizzi e i numeri di porta in forma numerica.

-o Visualizza l'ID del processo proprietario associato a ciascuna connessione.


252
-o per ottenere il PID
Laurent K

121
e taskkill / PID <pid> per terminare il processo, usando / F se appropriato.
BitMask777

81
Potrebbe essere necessario eseguire la shell della riga di comando come amministratore, altrimenti è possibile che venga visualizzato un messaggio di errore relativo a privilegi insufficienti. Utilizzare l'opzione "Esegui come amministratore" quando si fa clic con il pulsante destro del mouse su cmd.exe.
Gruber,

6
Funziona ma richiede un'autorizzazione elevata. Maiusc + clic destro sull'icona di comando -> esegui come amministratore
Christian Bongiorno,

18
Avendo il PID - diciamo che è 1234- allora puoi usare tasklist /fi "pid eq 1234"per scoprire il nome e altri dettagli del processo.
Steve Chambers,

2204

C'è una GUI nativa per Windows:

  • Menu Start → Tutti i programmiAccessoriStrumenti di sistemaMonitor risorse

Oppure Esegui resmon.exe o dalla scheda delle prestazioni di Task Manager .

Inserisci qui la descrizione dell'immagine


41
Mostra anche lo stato del firewall dell'associazione (ultima colonna). Molto utile.
Raffaello

8
Devi essere un amministratore (o in quel gruppo) per eseguire questo.
KrishPrabakar il

2
@bcorso, cosa significa vincolante per " indirizzo non specificato "?
Pacerier,

5
Può anche essere avviato dalla scheda Prestazioni del Task Manager, almeno in Windows 10. (Non ho controllato altre versioni.)
Mathieu K.

10
Il commento di @ user4836454 sopra NON è corretto: Resource Monitor mostra le porte con i listener, anche se non c'è una connessione di rete a queste porte. Basta guardare nella sezione "Porte di ascolto" anziché nella sezione "Connessioni TCP".
Jpsy,

235

Utilizzare TCPView se si desidera una GUI per questo. È la vecchia applicazione Sysinternals che Microsoft ha acquistato.


9
Questa è secondo me l'opzione migliore, soprattutto perché tutti i processi sono nella stessa lista e puoi chiuderli direttamente facendo clic con il tasto destro del mouse.
Andreas Lundgren il

8
Inoltre, questo non richiede i privilegi di amministratore!
Janac Meena,

222

Per Windows:

netstat -aon | find /i "listening"

25
+1 Ma tieni presente che se Windows funziona in una lingua diversa dall'inglese, dovrai cambiare "ascolto" del termine nativo. Ad esempio netstat -aon | find /i "abhören"per il tedesco.
Levite,

2
Nel mio caso non ha funzionato forse a causa delle virgolette, ma la soluzione netstat -aon | findstr LISTENING funziona perfettamente!
Il padrino,

Funziona senza richiedere privilegi elevati così votati.
Vlad Schnakovszki,

1
Ricevo un errore durante il tentativo di eseguire questo comando su W10 15063.729 con PowerShell:FIND: Parameter format not correct
Nicke Manarin

1
In che modo questa risposta è rilevante per "scoprire quale processo [nome] è in ascolto su una porta su Windows?"
Pawel Cioch,

137

L'opzione -b menzionata nella maggior parte delle risposte richiede di disporre dei privilegi di amministratore sulla macchina. Non hai davvero bisogno di diritti elevati per ottenere il nome del processo!

Trova il pid del processo in esecuzione nel numero di porta (ad es. 8080)

netstat -ano | findStr "8080"

Trova il nome del processo tramite pid

tasklist /fi "pid eq 2216"

trova processo tramite porta TCP / IP


82

Puoi ottenere maggiori informazioni se esegui il seguente comando:

netstat -aon | find /i "listening" |find "port"

l'utilizzo del comando "Trova" consente di filtrare i risultati. find /i "listening"visualizzerà solo le porte che sono 'in ascolto'. Nota, è necessario /iignorare il caso, altrimenti digitare "ASCOLTA". | find "port"limiterà i risultati solo a quelli contenenti il ​​numero di porta specifico. Nota, su questo filtrerà anche i risultati che hanno il numero di porta ovunque nella stringa di risposta.


8
FWIW che tenta di eseguire questo in PowerShell v2.0 genera errore FIND: Parameter format not correct. Devi aggiungere uno spazio dopo i criteri di ricerca. Questo ti lascerà con netstat -aon | find /i "listening" | find "1234 ".
sé.

2
Sostituisci "porta" sopra con la tua porta, ex "5000"
jbooker,

1
@se stesso. Ottengo ancora questo errore con PS 5.1, anche dopo aver aggiunto lo spazio dopo la pipe. Sai cosa sta succedendo?
Nicke Manarin,

2
@NickeManarinin e @self prima cambiano da powershell a cmd (basta digitare cmd e premere invio quindi ripetere il comando) oppure in powershell usare invece questo comando: netstat -aon | find / i " {back tick}" listening {back tick}"" | find " {back tick}" port {back tick}" "(<- nota le virgolette sfuggite - scusa il termine in back tickquanto non riesco ad aggiungere il personaggio reale poiché ritiene che sia un frammento)
Tristan van Dam

72
  1. Aprire una finestra del prompt dei comandi (come amministratore) Da "Start \ Cerca casella" Immettere "cmd" quindi fare clic con il tasto destro su "cmd.exe" e selezionare "Esegui come amministratore"

  2. Immettere il testo seguente, quindi premere Invio.

    netstat -abno

    -a Visualizza tutte le connessioni e le porte di ascolto.

    -b Visualizza l'eseguibile coinvolto nella creazione di ogni connessione o porta di ascolto. In alcuni casi eseguibili noti ospitano più componenti indipendenti e in questi casi viene visualizzata la sequenza dei componenti coinvolti nella creazione della porta di connessione o di ascolto. In questo caso il nome dell'eseguibile è in [] in basso, in alto è il componente che ha chiamato, e così via fino al raggiungimento di TCP / IP. Nota che questa opzione può richiedere molto tempo e fallirà a meno che tu non abbia autorizzazioni sufficienti.

    -n Visualizza gli indirizzi e i numeri di porta in forma numerica.

    -o Visualizza l'ID del processo proprietario associato a ciascuna connessione.

  3. Trova la porta su cui stai ascoltando in "Indirizzo locale"

  4. Guarda il nome del processo direttamente sotto quello.

NOTA: per trovare il processo in Task Manager

  1. Nota il PID (identificativo del processo) accanto alla porta che stai guardando.

  2. Apri Task Manager di Windows.

  3. Seleziona la scheda Processi.

  4. Cerca il PID che hai notato quando hai eseguito il netstat nel passaggio 1.

    • Se non vedi una colonna PID, fai clic su Visualizza / Seleziona colonne. Seleziona PID.

    • Assicurarsi che sia selezionato "Mostra processi da tutti gli utenti".


56

Ottieni PID e Nome immagine

Usa solo un comando:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

dove 9000dovrebbe essere sostituito dal tuo numero di porta.

L' output conterrà qualcosa del genere:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

Spiegazione:

  • scorre attraverso ogni riga dall'output del seguente comando:

    netstat -aon | findstr 9000
    
  • da ogni riga, il PID ( %a- qui il nome non è importante) viene estratto (PID è l' elemento 5th in quella riga) e passato al seguente comando

    tasklist /FI "PID eq 5312"
    

Se si desidera saltare l' intestazione e il ritorno del prompt dei comandi , è possibile utilizzare:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

Produzione:

java.exe                      5312 Services                   0    130,768 K

2
Buona risposta, ma dovresti cambiarlo in findstr :9000caso contrario, troverai persino app che contengono il numero (ad esempio, quando cerchi "80", troverai anche app sulla porta 80, 800, 8000).
Radon8472,

48

Innanzitutto troviamo l'id di processo di quel particolare compito che dobbiamo eliminare per liberare la porta:

genere

netstat -n -a -o

Dopo aver eseguito questo comando nel prompt della riga di comando di Windows (cmd), seleziona il pid che penso sia l'ultima colonna. Supponiamo che questo sia 3312.

Adesso digita

taskkill /F /PID 3312

Ora puoi eseguire il controllo incrociato digitando il netstatcomando.

NOTA: a volte Windows non ti consente di eseguire questo comando direttamente su CMD, quindi prima devi seguire questi passaggi:

Dal menu Start -> prompt dei comandi (fare clic con il tasto destro del mouse sul prompt dei comandi ed eseguire come amministratore)


30

Per ottenere un elenco di tutti gli ID di processo proprietari associati a ciascuna connessione:

netstat -ao |find /i "listening"

Se vuoi terminare qualsiasi processo hai l'ID e usa questo comando, in modo che la porta diventi libera

Taskkill /F /IM PID of a process

1
questo non tiene conto dell'ascolto delle porte UDP
evandrix il

27

È molto semplice ottenere il numero di porta da un PID in Windows.

Di seguito sono riportati i passaggi:

  1. Vai a eseguire → digita cmd → premi Enter.

  2. Scrivi il seguente comando ...

    netstat -aon | findstr [port number]
    

    (Nota: non includere parentesi quadre.)

  3. Premi Enter...

  4. Quindi cmd ti fornirà i dettagli del servizio in esecuzione su quella porta insieme al PID.

  5. Apri Task Manager e premi la scheda servizio e abbina il PID a quello del cmd, e il gioco è fatto.


18

Basta aprire una shell dei comandi e digitare (dicendo che la tua porta è 123456):

netstat -a -n -o | find "123456"

Vedrai tutto ciò di cui hai bisogno.

Le intestazioni sono:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

Questo è come menzionato qui .


1
Cordiali saluti / per chiunque sia interessato: è findstr 123456(senza virgolette) o find "123456"(con virgolette). (@Josh)
Kevin Cruijssen,

18

Per scoprire quale processo specifico (PID) sta usando quale porta:

netstat -anon | findstr 1234

Dove 1234 è il PID del processo. [Vai a Task Manager → scheda Servizi / Processi per scoprire il PID della tua applicazione.]


1
Va notato che non è necessario -nimpostare la bandiera due volte. -anoè abbastanza.
mwieczorek,

16

Con PowerShell 5 su Windows 10 o Windows Server 2016, eseguire il Get-NetTCPConnectioncmdlet. Immagino che dovrebbe funzionare anche su versioni precedenti di Windows.

L'output predefinito di Get-NetTCPConnectionnon include l'ID processo per qualche motivo ed è un po 'confuso. Tuttavia, puoi sempre ottenerlo formattando l'output. La proprietà che stai cercando è OwningProcess.

  • Se vuoi scoprire l'ID del processo in ascolto sulla porta 443, esegui questo comando:

    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
    
  • Formatta l'output in una tabella con le proprietà che cerchi:

    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
    
  • Se vuoi scoprire un nome per il processo, esegui questo comando:

    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
    


13

Digita il comando: netstat -aon | findstr :DESIRED_PORT_NUMBER

Ad esempio, se voglio trovare la porta 80: netstat -aon | findstr :80

Questa risposta è stata originariamente pubblicata per questa domanda .


11

netstat:

  • -a visualizza tutte le porte di connessione e di ascolto
  • -b visualizza gli eseguibili
  • -n stop risolve i nomi host (forma numerica)
  • -o processo di proprietà

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

Lo strumento Currports aiuta a cercare e filtrare


11
  1. Aprire il prompt dei comandi - Start → Eseguicmdoppure menu Start → Tutti i programmiAccessoriPrompt dei comandi .

  2. genere

    netstat -aon | findstr '[port_number]'
    

Sostituire [port_number]con il numero di porta effettivo che si desidera controllare e premere Enter.

  1. Se la porta viene utilizzata da qualsiasi applicazione, verranno visualizzati i dettagli di tale applicazione. Il numero, mostrato nell'ultima colonna dell'elenco, è il PID (ID processo) di tale applicazione. Prendi nota di questo.
  2. genere

    tasklist | findstr '[PID]'
    

Sostituisci [PID]con il numero dal passaggio precedente e premi Enter.

  1. Ti verrà mostrato il nome dell'applicazione che utilizza il tuo numero di porta.

3
Su Win 10: Il comando nel passaggio 2 e passaggio 4 non funziona se non si sostituiscono le virgolette semplici con virgolette doppie. Dovrebbe dire netstat -aon | findstr "[port_number]"
Leonardo Lopez,

Questa soluzione non richiede autorizzazioni elevate. Tks!
Totalys

10

netstat -aoe netstat -abti dirà l'applicazione, ma se non sei un amministratore di sistema otterrai "L'operazione richiesta richiede elevazione".

Non è l'ideale, ma se usi Process Explorer di Sysinternals puoi andare alle proprietà dei processi specifici e guardare la scheda TCP per vedere se stanno usando la porta che ti interessa. È un po 'un ago e un pagliaio cosa, ma forse aiuterà qualcuno ...


Se non sei un amministratore, non sarai in grado di utilizzare Process Explorer (o anche Task Manager di Windows> Gestione risorse) per ottenere queste informazioni da qualsiasi processo che non è tuo per cominciare.
Abel,

9

Consiglio CurrPorts di NirSoft.

CurrPorts può filtrare i risultati visualizzati. TCPView non ha questa funzione.

Nota: è possibile fare clic con il pulsante destro del mouse su una connessione socket di un processo e selezionare "Chiudi connessioni TCP selezionate" (è possibile farlo anche in TCPView). Questo spesso risolve i problemi di connettività che ho con Outlook e Lync dopo il cambio di VPN. Con CurrPorts, puoi anche chiudere le connessioni dalla riga di comando con il parametro "/ close".


7

Una soluzione a linea singola che mi aiuta è questa. Basta sostituire 3000 con la tua porta:

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

Modifica: modificato killin Stop-Processper un linguaggio più simile a PowerShell


6
Probabilmente non vorrai interrompere automaticamente il processo. Vorrei separare quel comando kill e spiegarlo. Non voglio che un povero utente copi-incolla quello senza pensare attentamente.
TinkerTenorSoftware Acquista

1
E se stai per la soluzione completa di PowerShell, passa a Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX il

6

Segui questi strumenti: Da cmd : C:\> netstat -anobcon privilegi di amministratore .

Process Explorer

Dump del processo

Port Monitor

Tutto da sysinternals.com.

Se vuoi solo conoscere il processo in esecuzione e i thread in ciascun processo, ti consiglio di informarti wmic. È un meraviglioso strumento da riga di comando, che ti dà molto più di quanto tu possa sapere.

Esempio:

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

Il comando sopra mostrerà un elenco di tutti i processi in breve ogni 5 secondi. Per saperne di più, puoi semplicemente andare con il /?comando di Windows, ad esempio,

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

E così via e così via. :)


PortMon (il collegamento dietro Port Monitor) serve per monitorare porte seriali e parallele , non porte di rete.
James,

6

Uso:

netstat -a -o

Questo mostra il PID del processo in esecuzione su una porta particolare.

Tieni presente l'ID processo e vai a Task Manager e scheda servizi o dettagli e termina il processo che ha lo stesso PID.

Pertanto, è possibile interrompere un processo in esecuzione su una determinata porta in Windows.


6

Per coloro che usano PowerShell, prova 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


5

Usando PowerShell ... ... questo sarebbe tuo amico (sostituisci 8080 con il tuo numero di porta):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

Uscita campione

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

Quindi in questo esempio tnslsnr.exe (database OracleXE) è in ascolto sulla porta 8080.

Spiegazione veloce

  • Select-Stringviene utilizzato per filtrare l'output lungo di netstatper le righe pertinenti.
  • -Pattern verifica ogni riga rispetto a un'espressione regolare.
  • -Context 0,1 produrrà 0 linee iniziali e 1 linea finale per ogni corrispondenza del modello.

2

Per Windows, se si desidera trovare elementi in ascolto o connessi alla porta 1234, eseguire quanto segue al prompt cmd:

netstat -na | find "1234"

1

Utilizzare lo script batch seguente che accetta un nome di processo come argomento e fornisce l' netstatoutput per il processo.

@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

1

Sulla base delle risposte con informazioni e kill , per me è utile combinarle in un solo comando . E puoi eseguirlo da cmd per ottenere informazioni sul processo in ascolto su una determinata porta (esempio 8080):

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

O se vuoi ucciderlo:

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

Puoi anche inserire questi comandi in un file bat (saranno leggermente diversi - sostituisci %iper %%i):

File portInfo.bat

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

File portKill.bat

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

Quindi da cmd puoi farlo:

portInfo.bat 8080

o

portKill.bat 8080


1
Questo potrebbe essere uno script utile. Tuttavia, l'ho provato in CMD e PowerShell 6 senza fortuna. Forse potresti migliorare la tua risposta fornendo un po 'più di dettagli.
Manfred,

La prima parte funziona? È solo un problema con "bat"? Ci sono alcune differenze nel passaggio delle variabili: (%% i)
lczapski il

@Manfred Ho provato questo su 3 diversi Windows 10. Ad esempio .\portInfo.bat 800in PowerShell dà qualcosa del genere: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 il

Scusa, niente fortuna. Ho messo quel comando in un file chiamato portInfo.batin un terminale PowerShell, quindi eseguito .\portInfo.bat 8080. L'output era solo il contenuto del file batch. Molto bene, sto trascurando qualcosa. Nota, sto usando PowerShell 6.2.3 su Windows 10. L'ho provato anche in un normale prompt dei comandi, ma il risultato è stato lo stesso: output del contenuto dello script. Sono sicuro che mi manca un'informazione cruciale per farlo funzionare.
Manfred,

1
Perché non aggiungere /nh: @tasklist /nh /fi "pid eq %i"? E precisamente la porta:Findstr ":8080"
Non ero io

0

Nel mio caso il port (3000) non è stato usato affatto e non è visibile in netstat. Ma! Uninstaller Docker per Windows ha risolto il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.