Wie kann man unter Windows herausfinden, welcher Prozess einen Port abhört?
-
09-06-2019 - |
Frage
Wie kann man unter Windows herausfinden, welcher Prozess einen Port abhört?
Lösung
Power Shell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
cmd
C:\> netstat -a -b
(Hinzufügen -N um zu verhindern, dass es versucht, Hostnamen aufzulösen, was es viel schneller macht.)
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 steht der Name der ausführbaren Datei unten in [], oben steht die aufgerufene Komponente und so weiter, 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.
-Ö Zeigt die besitzende Prozess-ID an, die jeder Verbindung zugeordnet ist.
Andere Tipps
Es gibt eine native GUI für Windows:
- Start>>Alle Programme>>Zubehör>>Systemprogramme>>Ressourcenmonitor
oder Laufen resmon.exe
,
oder von Taskmanager Registerkarte „Leistung“.
Verwenden TCPView wenn Sie dafür eine GUI wünschen.Es handelt sich um die alte Sysinternals-App, die Microsoft aufgekauft hat.
netstat -aon | find /i "listening"
Der in den meisten Antworten erwähnte Schalter -b erfordert, dass Sie über Administratorrechte auf dem Computer verfügen.Sie benötigen nicht wirklich erhöhte Rechte, um den Prozessnamen zu erhalten!
Finden Sie die PID des Prozesses, der in der Portnummer ausgeführt wird (z. B. 8080).
netstat -ano | findStr "8080"
Finden Sie den Prozessnamen anhand der 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 „Listening“ sind.Beachten Sie, dass Sie /i benötigen, um die Groß-/Kleinschreibung zu ignorieren, andernfalls würden Sie find „LISTENING“ eingeben.|find „port“ beschränkt die Ergebnisse auf diejenigen, die die spezifische Portnummer enthalten.Beachten Sie, dass dabei auch Ergebnisse gefiltert werden, bei denen die Portnummer an einer beliebigen Stelle in der Antwortzeichenfolge enthalten ist.
Öffnen Sie ein Eingabeaufforderungsfenster (als Administrator). Geben Sie unter „Start\Suchfeld“ „cmd“ ein, klicken Sie dann 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 dann die Eingabetaste.
netstat -abno
-A Zeigt alle Verbindungen und Überwachungsports an.
-B Zeigt die ausführbare Datei an, die an der Erstellung der einzelnen Verbindungen beteiligt ist, oder Listening-Port.In einigen Fällen werden bekannte ausführbare Dateien gehostet mehrere unabhängige Komponenten und in diesen Fällen die Abfolge der Komponenten, die an der Erstellung der Verbindung beteiligt sind oder der Überwachungsport wird angezeigt.In diesem Fall wird die ausführbare Datei name steht in [] unten, oben ist die Komponente, die er aufgerufen hat, und so weiter, bis TCP/IP erreicht war.Beachten Sie, dass diese Option kann zeitaufwändig sein und wird fehlschlagen, es sei denn, Sie haben genügend Erlaubnisse.
-N Zeigt Adressen und Portnummern in numerischer Form an.
-Ö Zeigt die besitzende Prozess-ID an, die jeder Verbindung zugeordnet ist.
Suchen Sie unter „Lokale Adresse“ den Port, den Sie abhören.
Schauen Sie sich den Prozessnamen direkt darunter an.
NOTIZ:Den Prozess finden Sie im Task-Manager
Beachten Sie die PID (Prozesskennung) 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 notiert haben, als Sie den Netstat in Schritt 1 erstellt haben.
Wenn Sie keine PID-Spalte sehen, klicken Sie auf „Spalten anzeigen/auswählen“.Wählen Sie PID.
Stellen Sie sicher, dass „Prozesse aller Benutzer anzeigen“ ausgewählt ist.
Holen Sie sich PID und Bildnamen
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.
Der Ausgabe wird etwa Folgendes enthalten:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Erläuterung:
Es durchläuft jede Zeile der Ausgabe des folgenden Befehls:
netstat -aon | findstr 9000
Aus jeder Zeile wird die PID (
%a
- der Name ist hier nicht wichtig) extrahiert wird (PID ist die5
Th Element in dieser Zeile) und an den folgenden Befehl übergebentasklist /FI "PID eq 5312"
Wenn Sie wollen überspringen Die Header und die Rückkehr der Eingabeaufforderung, Sie können 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
Zuerst finden wir die Prozess-ID dieser bestimmten Aufgabe, die wir entfernen müssen, um den Port frei zu bekommen
Typ
netstat -n -a -o
Nach dem Ausführen dieses Befehls in der Windows-Befehlszeile (cmd) Wählen Sie die PID aus, die meiner Meinung nach in der letzten Spalte 3312 ist
Geben Sie nun ein
taskkill /F /PID 3312
Sie können jetzt eine Gegenprüfung durchführen, indem Sie den Befehl netstat eingeben.
NOTIZ:Manchmal können Sie diesen Befehl unter Windows nicht direkt auf CMD ausführen, sodass Sie zuerst diese Schritte ausführen müssen Von Start-> Eingabeaufforderung (klicken Sie mit der rechten Maustaste auf die Eingabeaufforderung, und führen Sie sie als Administrator aus)
Es ist sehr einfach, die Portnummer aus der PID in Windows abzurufen.
Im Folgenden sind die Schritte aufgeführt:
1) Gehen Sie zu Ausführen -> geben Sie cmd ein -> drücken Sie die Eingabetaste.
2) Schreiben Sie den folgenden Befehl ...
netstat -aon | findstr [port number]
(Notiz:Fügen Sie keine eckigen Klammern ein.)
3) Drücken Sie die Eingabetaste...
4) Dann gibt Ihnen cmd die Details des Dienstes, der auf diesem Port läuft, zusammen mit der PID.
5) Öffnen Sie den Task-Manager, klicken Sie auf die Registerkarte „Dienst“ und gleichen Sie die PID mit der des Cmd ab. Fertig.
So erhalten Sie eine Liste aller besitzenden Prozess-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 dieser Port frei wird
Taskkill /F /IM pidof a process
Öffnen Sie einfach eine Befehlsshell und geben Sie Folgendes ein:(sagen wir, 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
das ist wie erwähnt Hier
Wenn Sie dazu ein GUI-Tool verwenden möchten, finden Sie hier: SysInternals TCPView.
Führen Sie PowerShell 5 unter Windows 10 oder Windows Server 2016 aus Get-NetTCPConnection
Cmdlet.Ich vermute, 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 erhalten, indem Sie die Ausgabe formatieren.Die Immobilie, die Sie suchen, ist OwningProcess
.
Wenn Sie die ID des Prozesses herausfinden möchten, der Port 443 überwacht, führen Sie diesen 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 einer Tabelle mit den gesuchten Eigenschaften:
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 den Namen des Prozesses herausfinden möchten, führen Sie diesen 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
Um herauszufinden, welcher spezifische Prozess (PID) welchen Port verwendet:
netstat -anon | findstr 1234
Wobei 1234 die PID Ihres Prozesses ist.[Gehen Sie zum Task-Manager -> Registerkarte „Dienste/Prozesse“, um die PID Ihrer Anwendung herauszufinden.]
netstat -ao
Und netstat -ab
Sagen Sie Ihnen die Anwendung, aber wenn Sie kein Administrator sind, erhalten Sie die Meldung „Der angeforderte Vorgang erfordert eine Erhöhung“.
Es ist nicht ideal, aber wenn Sie den Prozess-Explorer von sysinternals verwenden, können Sie zu den Eigenschaften bestimmter Prozesse gehen und auf der Registerkarte „TCP“ nachsehen, ob sie den Port verwenden, an dem Sie interessiert sind.Ein bisschen wie eine Nadel-und-Heuhaufen-Sache, aber vielleicht hilft es jemandem ...
Geben Sie den Befehl ein: netstat -aon | findstr :DESIRED_PORT_NUMBER
Wenn ich zum Beispiel Port 80 finden möchte: netstat -aon | findstr :80
Diese Antwort wurde ursprünglich in veröffentlicht dieser Thread.
Ich empfehle CurrPorts von NirSoft.
CurrPorts kann die angezeigten Ergebnisse filtern. TCPView verfügt nicht über diese Funktion.
Notiz:Sie können mit der rechten Maustaste auf die Socket-Verbindung eines Prozesses klicken und „Ausgewählte TCP-Verbindungen schließen“ auswählen (Sie können dies auch in TCPView tun).Dadurch werden häufig Verbindungsprobleme mit Outlook und Lync behoben, nachdem ich das VPN gewechselt habe.Mit CurrPorts können Sie Verbindungen auch über die Befehlszeile mit dem Parameter „/close“ schließen.
Netstat
- -a zeigt alle Verbindungs- und Überwachungsports an
- -b zeigt ausführbare Dateien an
- -n Stoppt die Auflösung von Hostnamen (numerische Form)
-o besitzender Prozess
netstat -bano | findstr "7002"
netstat -ano > ano.txt
Currports Tool hilft beim Suchen und Filtern
Befolgen Sie diese Tools :- Von cmd :- C:\> netstat -anob
mit Administrator Privileg.
http://technet.microsoft.com/en-us/sysinternals/bb896653 - Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896645 - Prozess-Dump
http://technet.microsoft.com/en-us/sysinternals/bb896644 - Portmonitor
Alles von sysinternals.com
Wenn Sie nur wissen möchten, wie der Prozess läuft und welche Threads unter jedem Prozess laufen, empfehle ich Ihnen, sich darüber zu informieren wmic
.Wunderbares Cmd-Line-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 kurz die gesamte Prozessliste an.Um mehr zu erfahren, können Sie einfach mitmachen /?
Beherrschung von Windows, z. B.
c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
und so weiter und so fort.:) :)
netstat -a -o Hier wird die PID des Prozesses angezeigt, der auf einem bestimmten Port ausgeführt wird.
Merken Sie sich die Prozess-ID und gehen Sie zur Registerkarte „Task-Manager und Dienste“ oder „Details“ und beenden Sie den Prozess, der dieselbe PID hat.
Auf diese Weise können Sie einen Prozess beenden, der auf einem bestimmten Port in Windows ausgeführt wird.
Für diejenigen, die Powershell verwenden, versuchen Sie es 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
Powershell verwenden...
...das wäre dein Freund (ersetze 8080 durch deine 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.
Kurze Erklärung
Select-String
wird verwendet, um die lange Ausgabe von zu filtern netstat
für die entsprechenden Zeilen.
-Pattern
testet jede Zeile anhand eines regulären Ausdrucks.
-Context 0,1
gibt für jede Musterübereinstimmung 0 führende Zeilen und 1 nachfolgende Zeile aus.
Programmatisch benötigen Sie Dinge von iphlpapi.h, Zum Beispiel GetTcpTable2().Strukturen wie MIB_TCP6ROW2 enthalten die Eigentümer-PID.
Eine Single-Line-Lösung, die mir hilft, ist diese. Ersetzen Sie einfach 3000 durch Ihren Port
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
Öffne das
command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
.Typ
netstat -aon | findstr '[port_number]'
Ersetzen Sie [port_number] durch die tatsächliche Portnummer, die Sie überprüfen möchten, und drücken Sie die Eingabetaste.
- Wenn der Port von einer Anwendung verwendet wird, werden die Details dieser Anwendung angezeigt.Die Nummer, die in der letzten Spalte der Liste angezeigt wird, ist die PID (Prozess-ID) dieser Anwendung.Notieren Sie sich dies.
Typ
tasklist | findstr '[PID]'
Ersetzen Sie die [PID] durch die Zahl aus dem obigen Schritt und drücken Sie die Eingabetaste.
- Ihnen wird der Anwendungsname angezeigt, der Ihre Portnummer verwendet.
Wenn Sie unter Windows Dinge finden möchten, die Port 1234 abhören oder mit ihm verbunden sind, führen Sie an der cmd-Eingabeaufforderung Folgendes aus:
netstat -na | find "1234"
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