Come puoi scoprire quale processo è in ascolto su una porta su Windows?
Come puoi scoprire quale processo è in ascolto su una porta su Windows?
Risposte:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
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.
1234
- allora puoi usare tasklist /fi "pid eq 1234"
per scoprire il nome e altri dettagli del processo.
C'è una GUI nativa per Windows:
Oppure Esegui resmon.exe
o dalla scheda delle prestazioni di Task Manager .
Utilizzare TCPView se si desidera una GUI per questo. È la vecchia applicazione Sysinternals che Microsoft ha acquistato.
Per Windows:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
per il tedesco.
FIND: Parameter format not correct
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"
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 /i
ignorare 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.
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 "
.
{back tick}
" listening {back tick}
"" | find " {back tick}
" port {back tick}
" "(<- nota le virgolette sfuggite - scusa il termine in back tick
quanto non riesco ad aggiungere il personaggio reale poiché ritiene che sia un frammento)
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"
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.
Trova la porta su cui stai ascoltando in "Indirizzo locale"
Guarda il nome del processo direttamente sotto quello.
NOTA: per trovare il processo in Task Manager
Nota il PID (identificativo del processo) accanto alla porta che stai guardando.
Apri Task Manager di Windows.
Seleziona la scheda Processi.
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".
Usa solo un comando:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
dove 9000
dovrebbe 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 5
th 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
findstr :9000
caso contrario, troverai persino app che contengono il numero (ad esempio, quando cerchi "80", troverai anche app sulla porta 80, 800, 8000).
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 netstat
comando.
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)
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
È molto semplice ottenere il numero di porta da un PID in Windows.
Di seguito sono riportati i passaggi:
Vai a eseguire → digita cmd → premi Enter.
Scrivi il seguente comando ...
netstat -aon | findstr [port number]
(Nota: non includere parentesi quadre.)
Premi Enter...
Quindi cmd ti fornirà i dettagli del servizio in esecuzione su quella porta insieme al PID.
Apri Task Manager e premi la scheda servizio e abbina il PID a quello del cmd, e il gioco è fatto.
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 .
findstr 123456
(senza virgolette) o find "123456"
(con virgolette). (@Josh)
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.]
-n
impostare la bandiera due volte. -ano
è abbastanza.
Con PowerShell 5 su Windows 10 o Windows Server 2016, eseguire il Get-NetTCPConnection
cmdlet. Immagino che dovrebbe funzionare anche su versioni precedenti di Windows.
L'output predefinito di Get-NetTCPConnection
non 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
Se desideri utilizzare uno strumento GUI per farlo, c'è TCPView di Sysinternals .
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 .
netstat:
-o processo di proprietà
netstat -bano | findstr "7002"
netstat -ano > ano.txt
Lo strumento Currports aiuta a cercare e filtrare
Aprire il prompt dei comandi - Start → Esegui → cmd
oppure menu Start → Tutti i programmi → Accessori → Prompt dei comandi .
genere
netstat -aon | findstr '[port_number]'
Sostituire [port_number]
con il numero di porta effettivo che si desidera controllare e premere Enter.
genere
tasklist | findstr '[PID]'
Sostituisci [PID]
con il numero dal passaggio precedente e premi Enter.
netstat -ao
e netstat -ab
ti 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 ...
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".
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 kill
in Stop-Process
per un linguaggio più simile a PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Segui questi strumenti: Da cmd : C:\> netstat -anob
con privilegi di amministratore .
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. :)
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.
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
A livello di programmazione, sono necessari elementi di iphlpapi.h , ad esempio GetTcpTable2 (). Strutture come MIB_TCP6ROW2 contengono il PID proprietario.
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-String
viene utilizzato per filtrare l'output lungo di netstat
per 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.Utilizzare lo script batch seguente che accetta un nome di processo come argomento e fornisce l' netstat
output 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
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 %i
per %%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
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
.\portInfo.bat 800
in 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
portInfo.bat
in 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.
/nh
: @tasklist /nh /fi "pid eq %i"
? E precisamente la porta:Findstr ":8080"
Nel mio caso il port (3000) non è stato usato affatto e non è visibile in netstat. Ma! Uninstaller Docker per Windows ha risolto il problema.