Wie können Sie herausfinden, welcher Prozess einen Port unter Windows überwacht?
Wie können Sie herausfinden, welcher Prozess einen Port unter Windows überwacht?
Antworten:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(Fügen Sie -n hinzu , um zu verhindern, dass versucht wird, Hostnamen aufzulösen, wodurch es viel schneller wird.)
Beachten Sie Danes Empfehlung für TCPView . Es sieht sehr nützlich aus!
-a Zeigt alle Verbindungen und Überwachungsports an.
-b Zeigt die ausführbare Datei an, die beim Erstellen jeder Verbindung oder jedes Überwachungsports beteiligt ist. In einigen Fällen hosten bekannte ausführbare Dateien mehrere unabhängige Komponenten, und in diesen Fällen wird die Reihenfolge der Komponenten angezeigt, die beim Erstellen der Verbindung oder des Überwachungsports beteiligt sind. In diesem Fall befindet sich der Name der ausführbaren Datei unten in [], oben die aufgerufene Komponente usw., bis TCP / IP erreicht wurde. Beachten Sie, dass diese Option zeitaufwändig sein kann und fehlschlägt, wenn Sie nicht über ausreichende Berechtigungen verfügen.
-n Zeigt Adressen und Portnummern in numerischer Form an.
-o Zeigt die jeder Verbindung zugeordnete Prozess-ID an.
1234
-, können Sie tasklist /fi "pid eq 1234"
den Namen und andere Details des Prozesses herausfinden.
Es gibt eine native GUI für Windows:
Oder Ausführen resmon.exe
oder auf der Registerkarte Leistung des Task-Managers .
Verwenden Sie TCPView, wenn Sie hierfür eine GUI benötigen . Es ist die alte Sysinternals- Anwendung, die Microsoft gekauft hat.
Für Windows:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
für Deutsch.
FIND: Parameter format not correct
Für den in den meisten Antworten genannten Schalter -b müssen Sie über Administratorrechte auf dem Computer verfügen. Sie benötigen nicht wirklich erhöhte Rechte, um den Prozessnamen zu erhalten!
Suchen Sie die PID des Prozesses, der in der Portnummer ausgeführt wird (z. B. 8080).
netstat -ano | findStr "8080"
Suchen Sie den Prozessnamen anhand von pid
tasklist /fi "pid eq 2216"
Weitere Informationen erhalten Sie, wenn Sie den folgenden Befehl ausführen:
netstat -aon | find /i "listening" |find "port"
Mit dem Befehl 'Suchen' können Sie die Ergebnisse filtern. find /i "listening"
zeigt nur Ports an, die "Abhören". Beachten Sie, dass Sie den /i
Fall ignorieren müssen, andernfalls würden Sie find "LISTENING" eingeben. | find "port"
beschränkt die Ergebnisse nur auf diejenigen, die die spezifische Portnummer enthalten. Beachten Sie, dass hierzu auch Ergebnisse gefiltert werden, deren Portnummer an einer beliebigen Stelle in der Antwortzeichenfolge steht.
FIND: Parameter format not correct
. Sie müssen nach den Suchkriterien ein Leerzeichen hinzufügen. Dies wird Sie mit verlassen netstat -aon | find /i "listening" | find "1234 "
.
{back tick}
" listening {back tick}
"" | find " {back tick}
" port {back tick}
" "(<- beachte die entkommenen Zitate - entschuldige den Begriff, back tick
da ich den tatsächlichen Charakter nicht hinzufügen kann, da er denkt, dass es ein Ausschnitt ist)
Öffnen Sie ein Eingabeaufforderungsfenster (als Administrator). Geben Sie im Feld "Start \ Search" "cmd" ein, klicken Sie mit der rechten Maustaste auf "cmd.exe" und wählen Sie "Als Administrator ausführen".
Geben Sie den folgenden Text ein und drücken Sie die Eingabetaste.
netstat -abno
-a Zeigt alle Verbindungen und Überwachungsports an.
-b Zeigt die ausführbare Datei an, die beim Erstellen jeder Verbindung oder jedes Überwachungsports beteiligt ist. In einigen Fällen hosten bekannte ausführbare Dateien mehrere unabhängige Komponenten, und in diesen Fällen wird die Reihenfolge der Komponenten angezeigt, die beim Erstellen der Verbindung oder des Überwachungsports beteiligt sind. In diesem Fall befindet sich der Name der ausführbaren Datei unten in [], oben in der aufgerufenen Komponente usw., bis TCP / IP erreicht wurde. Beachten Sie, dass diese Option zeitaufwändig sein kann und fehlschlägt, wenn Sie nicht über ausreichende Berechtigungen verfügen.
-n Zeigt Adressen und Portnummern in numerischer Form an.
-o Zeigt die jeder Verbindung zugeordnete Prozess-ID an.
Suchen Sie den Port, den Sie abhören, unter "Lokale Adresse".
Schauen Sie sich den Prozessnamen direkt darunter an.
HINWEIS: Um den Prozess unter Task-Manager zu finden
Notieren Sie sich die PID (Prozess-ID) neben dem Port, den Sie betrachten.
Öffnen Sie den Windows Task-Manager.
Wählen Sie die Registerkarte Prozesse.
Suchen Sie nach der PID, die Sie bei der Erstellung des Netzstat in Schritt 1 notiert haben.
Wenn Sie keine PID-Spalte sehen, klicken Sie auf Spalten anzeigen / auswählen. Wählen Sie PID.
Stellen Sie sicher, dass "Prozesse von allen Benutzern anzeigen" ausgewählt ist.
Verwenden Sie nur einen Befehl:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
wo 9000
sollte durch Ihre Portnummer ersetzt werden.
Die Ausgabe enthält ungefähr Folgendes:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Erläuterung:
Es durchläuft jede Zeile von der Ausgabe des folgenden Befehls:
netstat -aon | findstr 9000
Aus jeder Zeile wird die PID ( %a
- der Name ist hier nicht wichtig) extrahiert (PID ist das 5
dritte Element in dieser Zeile) und an den folgenden Befehl übergeben
tasklist /FI "PID eq 5312"
Wenn Sie den Header und die Rückgabe der Eingabeaufforderung überspringen möchten , können Sie Folgendes verwenden:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Ausgabe:
java.exe 5312 Services 0 130,768 K
findstr :9000
wenn nicht, würden Sie sogar Apps finden, die die Nummer enthalten (z. B. wenn Sie nach "80" suchen, finden Sie auch Apps auf Port 80, 800, 8000).
Zuerst finden wir die Prozess-ID dieser bestimmten Aufgabe, die wir eliminieren müssen, um den Port frei zu bekommen:
Art
netstat -n -a -o
Nachdem Sie diesen Befehl in der Windows-Eingabeaufforderung (cmd) ausgeführt haben, wählen Sie die PID aus, die meiner Meinung nach die letzte Spalte ist. Angenommen, dies ist 3312.
Geben Sie nun ein
taskkill /F /PID 3312
Sie können dies jetzt überprüfen, indem Sie den netstat
Befehl eingeben .
HINWEIS: Manchmal erlaubt Windows Ihnen nicht, diesen Befehl direkt auf CMD auszuführen. Führen Sie daher zunächst die folgenden Schritte aus:
Über das Startmenü -> Eingabeaufforderung (Rechtsklick auf Eingabeaufforderung und als Administrator ausführen)
So erhalten Sie eine Liste aller Besitzprozess-IDs, die jeder Verbindung zugeordnet sind:
netstat -ao |find /i "listening"
Wenn Sie einen Prozess beenden möchten, haben Sie die ID und verwenden Sie diesen Befehl, damit der Port frei wird
Taskkill /F /IM PID of a process
Es ist sehr einfach, die Portnummer von einer PID in Windows abzurufen.
Das Folgende sind die Schritte:
Gehen Sie zu Ausführen → Geben Sie cmd → Drücken Sie ein Enter.
Schreiben Sie den folgenden Befehl ...
netstat -aon | findstr [port number]
(Hinweis: Fügen Sie keine eckigen Klammern ein.)
Drücken Sie Enter...
Dann gibt cmd Ihnen die Details des Dienstes, der an diesem Port ausgeführt wird, zusammen mit der PID.
Öffnen Sie den Task-Manager, klicken Sie auf die Registerkarte "Dienst" und passen Sie die PID an die des cmd an.
Öffnen Sie einfach eine Befehlsshell und geben Sie ein (sagen Sie, Ihr Port ist 123456):
netstat -a -n -o | find "123456"
Sie werden alles sehen, was Sie brauchen.
Die Überschriften sind:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
Dies ist wie hier erwähnt .
findstr 123456
(ohne Anführungszeichen) oder find "123456"
(mit Anführungszeichen). (@Josh)
So finden Sie heraus, welcher spezifische Prozess (PID) welchen Port verwendet:
netstat -anon | findstr 1234
Wobei 1234 die PID Ihres Prozesses ist. [Gehen Sie zu Task-Manager → Registerkarte Dienste / Prozesse, um die PID Ihrer Anwendung zu ermitteln.]
-n
Flag nicht zweimal gesetzt werden muss. -ano
reicht.
Führen Sie PowerShell 5 unter Windows 10 oder Windows Server 2016 aus Get-NetTCPConnection
Sie Cmdlet aus. Ich denke, dass es auch auf älteren Windows-Versionen funktionieren sollte.
Die Standardausgabe von Get-NetTCPConnection
enthält aus irgendeinem Grund keine Prozess-ID und ist etwas verwirrend. Sie können es jedoch jederzeit durch Formatieren der Ausgabe erhalten. Die Immobilie, die Sie suchen, ist OwningProcess
.
Wenn Sie die ID des Prozesses ermitteln möchten, der Port 443 überwacht, führen Sie den folgenden Befehl aus:
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
Formatieren Sie die Ausgabe in eine Tabelle mit den Eigenschaften, nach denen Sie suchen:
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
Wenn Sie einen Namen des Prozesses herausfinden möchten, führen Sie den folgenden Befehl aus:
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
Wenn Sie dazu ein GUI-Tool verwenden möchten, gibt es die TCPView von Sysinternals .
Geben Sie den folgenden Befehl ein: netstat -aon | findstr :DESIRED_PORT_NUMBER
Zum Beispiel, wenn ich Port 80 finden möchte: netstat -aon | findstr :80
Diese Antwort wurde ursprünglich auf diese Frage gepostet .
Netstat:
-o Besitzprozess
netstat -bano | findstr "7002"
netstat -ano > ano.txt
Das Currports- Tool hilft beim Suchen und Filtern
Öffnen Sie die Eingabeaufforderung - Start → Ausführen → cmd
oder Startmenü → Alle Programme → Zubehör → Eingabeaufforderung .
Art
netstat -aon | findstr '[port_number]'
Ersetzen Sie die [port_number]
durch die tatsächliche Portnummer, die Sie überprüfen und drücken möchten Enter.
Art
tasklist | findstr '[PID]'
Ersetzen Sie die [PID]
durch die Nummer aus dem obigen Schritt und drücken Sie Enter.
netstat -ao
und netstat -ab
teilen Sie Ihnen die Anwendung mit. Wenn Sie jedoch kein Systemadministrator sind, wird "Der angeforderte Vorgang erfordert eine Erhöhung" angezeigt.
Es ist nicht ideal, aber wenn Sie den Prozess-Explorer von Sysinternals verwenden, können Sie in den Eigenschaften bestimmter Prozesse auf der Registerkarte TCP nachsehen, ob sie den Port verwenden, an dem Sie interessiert sind. Es ist ein bisschen wie eine Nadel und ein Heuhaufen Sache, aber vielleicht hilft es jemandem ...
Ich empfehle CurrPorts von NirSoft.
CurrPorts kann die angezeigten Ergebnisse filtern. TCPView verfügt nicht über diese Funktion.
Hinweis: Sie können mit der rechten Maustaste auf die Socket-Verbindung eines Prozesses klicken und "Ausgewählte TCP-Verbindungen schließen" auswählen (dies ist auch in TCPView möglich). Dadurch werden häufig Verbindungsprobleme mit Outlook und Lync behoben, nachdem ich die VPNs gewechselt habe. Mit CurrPorts können Sie Verbindungen auch über die Befehlszeile mit dem Parameter "/ close" schließen.
Eine einzeilige Lösung, die mir hilft, ist diese. Ersetzen Sie einfach 3000 durch Ihren Port:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
Bearbeiten: Geändert kill
zu Stop-Process
für eine PowerShell-ähnliche Sprache
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Befolgen Sie diese Tools: Von cmd : C:\> netstat -anob
mit Administratorrechten .
Alles von sysinternals.com.
Wenn Sie nur wissen möchten, wie der Prozess ausgeführt wird und welche Threads unter den einzelnen Prozessen ausgeführt werden, empfehle ich, mehr darüber zu erfahren wmic
. Es ist ein wunderbares Kommandozeilen-Tool, das Ihnen viel mehr bietet, als Sie wissen können.
Beispiel:
c:\> wmic process list brief /every:5
Der obige Befehl zeigt alle 5 Sekunden eine kurze Liste aller Prozesse an. Um mehr zu erfahren, können Sie einfach den /?
Befehl von Windows verwenden, zum Beispiel:
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
Und so weiter und so fort. :) :)
Verwenden:
netstat -a -o
Dies zeigt die PID des Prozesses, der an einem bestimmten Port ausgeführt wird.
Beachten Sie die Prozess-ID, gehen Sie zum Task-Manager und zur Registerkarte Dienste oder Details und beenden Sie den Prozess mit derselben PID.
Auf diese Weise können Sie einen Prozess beenden, der an einem bestimmten Port in Windows ausgeführt wird.
Versuchen Sie für Benutzer von PowerShell Folgendes 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
Programmatisch benötigen Sie Inhalte von iphlpapi.h , z. B. GetTcpTable2 (). Strukturen wie MIB_TCP6ROW2 enthalten die Eigentümer-PID.
Mit PowerShell ... ... wäre dies Ihr Freund (ersetzen Sie 8080 durch Ihre Portnummer):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Beispielausgabe
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
In diesem Beispiel überwacht tnslsnr.exe (OracleXE-Datenbank) Port 8080.
Schnelle Erklärung
Select-String
wird verwendet, um die lange Ausgabe von netstat
für die relevanten Zeilen zu filtern .-Pattern
testet jede Zeile gegen einen regulären Ausdruck.-Context 0,1
gibt 0 führende Zeilen und 1 nachfolgende Zeile für jede Musterübereinstimmung aus.Verwenden Sie das folgende Batch-Skript, das einen Prozessnamen als Argument verwendet und eine netstat
Ausgabe für den Prozess liefert .
@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
Basierend auf Antworten mit Info und Kill ist es für mich nützlich, sie in einem Befehl zu kombinieren . Und Sie können dies von cmd aus ausführen, um Informationen über Prozesse zu erhalten, die einen bestimmten Port überwachen (Beispiel 8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
Oder wenn du es töten willst:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
Sie können diesen Befehl auch in eine Bat-Datei einfügen (sie unterscheiden sich geringfügig - ersetzen %i
durch %%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
Dann können Sie von cmd Folgendes tun:
portInfo.bat 8080
oder
portKill.bat 8080
.\portInfo.bat 800
in PowerShell gibt es so etwas wie: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 einem Powershell-Terminal eingefügt und dann ausgeführt .\portInfo.bat 8080
. Die Ausgabe war nur der Inhalt der Batchdatei. Sehr gut, ich übersehen etwas. Hinweis: Ich verwende PowerShell 6.2.3 unter Windows 10. Ich habe es auch an einer regulären Eingabeaufforderung versucht, aber das Ergebnis war das gleiche: Ausgabe des Inhalts des Skripts. Ich bin sicher, ich vermisse eine wichtige Information, damit dies funktioniert.
/nh
: @tasklist /nh /fi "pid eq %i"
? Und genau die Tür:Findstr ":8080"
In meinem Fall wurde der Port (3000) überhaupt nicht verwendet und ist in netstat nicht sichtbar. Aber! Das Deinstallationsprogramm Docker für Windows hat das Problem behoben.