Jak dowiedzieć się, który proces nasłuchuje na porcie w systemie Windows?
Jak dowiedzieć się, który proces nasłuchuje na porcie w systemie Windows?
Odpowiedzi:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(Dodaj -n, aby zatrzymać próbę rozwiązania nazw hostów, co znacznie przyspieszy.)
Uwaga Zalecenia Dane dla TCPView . Wygląda bardzo przydatnie!
-a Wyświetla wszystkie połączenia i porty nasłuchiwania.
-b Wyświetla plik wykonywalny zaangażowany w tworzenie każdego połączenia lub portu nasłuchującego. W niektórych przypadkach dobrze znane pliki wykonywalne obsługują wiele niezależnych komponentów, aw tych przypadkach wyświetlana jest sekwencja komponentów zaangażowanych w tworzenie połączenia lub portu nasłuchującego. W tym przypadku nazwa pliku wykonywalnego znajduje się w [] u dołu, u góry jest wywoływany komponent i tak dalej, aż do osiągnięcia TCP / IP. Pamiętaj, że ta opcja może być czasochłonna i zawiedzie, chyba że masz wystarczające uprawnienia.
-n Wyświetla adresy i numery portów w postaci numerycznej.
-o Wyświetla identyfikator procesu właściciela powiązanego z każdym połączeniem.
1234
- możesz użyć tasklist /fi "pid eq 1234"
nazwy i innych szczegółów procesu.
Istnieje natywny interfejs GUI dla systemu Windows:
Lub Uruchom resmon.exe
lub z zakładki wydajności Menedżera zadań .
Użyj TCPView, jeśli potrzebujesz GUI. To stara aplikacja Sysinternals , którą Microsoft wykupił.
Dla Windowsa:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
Dla niemieckiego.
FIND: Parameter format not correct
Przełącznik -b wymieniony w większości odpowiedzi wymaga posiadania uprawnień administratora na komputerze. Tak naprawdę nie potrzebujesz podwyższonych uprawnień, aby uzyskać nazwę procesu!
Znajdź numer pid procesu uruchomionego na numerze portu (np. 8080)
netstat -ano | findStr "8080"
Znajdź nazwę procesu według pid
tasklist /fi "pid eq 2216"
Możesz uzyskać więcej informacji, uruchamiając następujące polecenie:
netstat -aon | find /i "listening" |find "port"
za pomocą polecenia „Znajdź” można filtrować wyniki. find /i "listening"
wyświetli tylko porty, które są „nasłuchujące”. Uwaga: musisz /i
zignorować wielkość liter, w przeciwnym razie wpisz „LISTENING”. | find "port"
ograniczy wyniki tylko do tych, które zawierają określony numer portu. Uwaga: w tym przypadku filtruje również wyniki, które mają numer portu w dowolnym miejscu ciągu odpowiedzi.
FIND: Parameter format not correct
. Musisz dodać spację po kryteriach wyszukiwania. To cię opuści netstat -aon | find /i "listening" | find "1234 "
.
{back tick}
" nasłuchiwanie {back tick}
"" | znalezienie " {back tick}
" port {back tick}
" „(<- zwróć uwagę na cytowane cytaty - wybacz ten termin, back tick
ponieważ nie mogę dodać rzeczywistej postaci, ponieważ uważa ją za wycinanie)
Otwórz okno wiersza polecenia (jako administrator) W polu „Start \ Search” wpisz „cmd”, a następnie kliknij prawym przyciskiem myszy „cmd.exe” i wybierz „Uruchom jako administrator”
Wpisz następujący tekst, a następnie naciśnij Enter.
netstat -abno
-a Wyświetla wszystkie połączenia i porty nasłuchiwania.
-b Wyświetla plik wykonywalny zaangażowany w tworzenie każdego połączenia lub portu nasłuchującego. W niektórych przypadkach dobrze znane pliki wykonywalne obsługują wiele niezależnych komponentów, aw tych przypadkach wyświetlana jest sekwencja komponentów zaangażowanych w tworzenie połączenia lub portu nasłuchującego. W tym przypadku nazwa pliku wykonywalnego znajduje się w [] u dołu, u góry jest wywoływany komponent i tak dalej, aż do osiągnięcia TCP / IP. Pamiętaj, że ta opcja może być czasochłonna i zawiedzie, chyba że masz wystarczające uprawnienia.
-n Wyświetla adresy i numery portów w postaci numerycznej.
-o Wyświetla identyfikator procesu właściciela powiązanego z każdym połączeniem.
Znajdź port, którego słuchasz, w obszarze „Adres lokalny”
Spójrz na nazwę procesu bezpośrednio pod tym.
UWAGA: Aby znaleźć proces w Menedżerze zadań
Zwróć uwagę na PID (identyfikator procesu) obok portu, na który patrzysz.
Otwórz Menedżera zadań Windows.
Wybierz kartę Procesy.
Poszukaj PID zanotowanego podczas wykonywania statystyki sieci w kroku 1.
Jeśli nie widzisz kolumny PID, kliknij Wyświetl / Wybierz kolumny. Wybierz PID.
Upewnij się, że wybrano „Pokaż procesy od wszystkich użytkowników”.
Użyj tylko jednego polecenia:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
gdzie 9000
należy zastąpić numerem portu.
Dane wyjściowe będą zawierać coś takiego:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Wyjaśnienie:
iteruje każdy wiersz od wyniku następującego polecenia:
netstat -aon | findstr 9000
z każdej linii %a
wyodrębniany jest PID ( - tutaj nazwa nie jest ważna) (PID jest 5
th elementem tego wiersza) i przekazywany do następującego polecenia
tasklist /FI "PID eq 5312"
Jeśli chcesz pominąć ten nagłówek i powrót do wiersza polecenia , można użyć:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Wynik:
java.exe 5312 Services 0 130,768 K
findstr :9000
jeśli nie, znajdziesz nawet aplikacje, które zawierają numer (np. Podczas wyszukiwania „80” znajdziesz aplikacje również na porcie 80, 800, 8000).
Najpierw znajdujemy identyfikator procesu tego konkretnego zadania, które musimy wyeliminować, aby uwolnić port:
Rodzaj
netstat -n -a -o
Po wykonaniu tego polecenia w wierszu polecenia systemu Windows (cmd) wybierz pid, który moim zdaniem jest ostatnią kolumną. Załóżmy, że to 3312.
Teraz wpisz
taskkill /F /PID 3312
Możesz teraz sprawdzić krzyżowo, wpisując netstat
polecenie.
UWAGA: czasami system Windows nie pozwala na uruchomienie tego polecenia bezpośrednio na CMD, więc najpierw musisz wykonać następujące kroki:
Z menu Start -> wiersz polecenia (kliknij prawym przyciskiem myszy wiersz polecenia i uruchom jako administrator)
Aby uzyskać listę wszystkich identyfikatorów procesów będących właścicielami powiązanych z każdym połączeniem:
netstat -ao |find /i "listening"
Jeśli chcesz zabić dowolny proces, posiadaj identyfikator i użyj tego polecenia, aby port stał się wolny
Taskkill /F /IM PID of a process
Bardzo łatwo jest uzyskać numer portu z PID w systemie Windows.
Oto kroki:
Idź do uruchomienia → wpisz cmd → naciśnij Enter.
Napisz następujące polecenie ...
netstat -aon | findstr [port number]
(Uwaga: nie dołączaj nawiasów kwadratowych).
Naciśnij Enter...
Następnie cmd poda szczegóły usługi działającej na tym porcie wraz z PID.
Otwórz Menedżera zadań i kliknij kartę usługi i dopasuj PID do tego z cmd, i to wszystko.
Po prostu otwórz powłokę poleceń i wpisz (mówiąc, że twój port to 123456):
netstat -a -n -o | find "123456"
Zobaczysz wszystko, czego potrzebujesz.
Nagłówki to:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
Jak wspomniano tutaj .
findstr 123456
(bez cudzysłowów) albo find "123456"
(z cudzysłowami). (@Josh)
Aby dowiedzieć się, który konkretny proces (PID) korzysta z którego portu:
netstat -anon | findstr 1234
Gdzie 1234 jest PID twojego procesu. [Przejdź do Menedżera zadań → zakładka Usługi / Procesy, aby znaleźć PID Twojej aplikacji.]
-n
zestawu flag dwa razy. -ano
wystarczy.
W programie PowerShell 5 w systemie Windows 10 lub Windows Server 2016 uruchom polecenie Get-NetTCPConnection
cmdlet. Wydaje mi się, że powinien działać również na starszych wersjach systemu Windows.
Domyślne wyjście Get-NetTCPConnection
nie zawiera identyfikatora procesu z jakiegoś powodu i jest nieco mylące. Jednak zawsze można go uzyskać, formatując dane wyjściowe. Właściwość, której szukasz, to OwningProcess
.
Jeśli chcesz znaleźć identyfikator procesu nasłuchującego na porcie 443, uruchom następującą komendę:
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
Sformatuj dane wyjściowe w tabeli z właściwościami, których szukasz:
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
Jeśli chcesz znaleźć nazwę procesu, uruchom następującą komendę:
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
Jeśli chcesz użyć do tego narzędzia GUI, skorzystaj z TCPView Sysinternals .
Wpisz polecenie: netstat -aon | findstr :DESIRED_PORT_NUMBER
Na przykład, jeśli chcę znaleźć port 80: netstat -aon | findstr :80
Ta odpowiedź została pierwotnie zamieszczona na to pytanie .
Netstat:
-o proces posiadania
netstat -bano | findstr "7002"
netstat -ano > ano.txt
CurrPorts narzędzie ułatwia wyszukiwanie i filtr
Otwórz wiersz polecenia - start → Uruchom → cmd
lub menu Start → Wszystkie programy → Akcesoria → Wiersz polecenia .
Rodzaj
netstat -aon | findstr '[port_number]'
Zamień na [port_number]
rzeczywisty numer portu, który chcesz sprawdzić i naciśnij Enter.
Rodzaj
tasklist | findstr '[PID]'
Zastąp [PID]
cyfrę z powyższego kroku i naciśnij Enter.
netstat -ao
i netstat -ab
poinformuje Cię o aplikacji, ale jeśli nie jesteś administratorem systemu, zobaczysz komunikat „Żądana operacja wymaga podniesienia uprawnień”.
Nie jest to idealne rozwiązanie, ale jeśli używasz Eksploratora procesów Sysinternals , możesz przejść do właściwości określonych procesów i spojrzeć na kartę TCP, aby sprawdzić, czy używają portu, który Cię interesuje. To trochę igła i stóg siana ale może to komuś pomóc ...
Polecam CurrPorts z NirSoft.
CurrPorts może filtrować wyświetlane wyniki. TCPView nie ma tej funkcji.
Uwaga: Możesz kliknąć prawym przyciskiem myszy połączenie gniazda procesu i wybrać „Zamknij wybrane połączenia TCP” (możesz to również zrobić w TCPView). To często rozwiązuje problemy z łącznością występujące w programach Outlook i Lync po zmianie sieci VPN. Za pomocą CurrPorts możesz także zamykać połączenia z wiersza poleceń za pomocą parametru „/ close”.
Jedno-liniowe rozwiązanie, które mi pomaga, to właśnie to. Po prostu zastąp 3000 portem:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
Edycja: zmieniono kill
na Stop-Process
na bardziej podobny do języka PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Postępuj zgodnie z tymi narzędziami: Z cmd : C:\> netstat -anob
z uprawnieniami administratora .
Wszystko z sysinternals.com.
Jeśli chcesz tylko wiedzieć, że proces działa i wątki w ramach każdego procesu, polecam dowiedzieć się więcej wmic
. To wspaniałe narzędzie wiersza poleceń, które daje znacznie więcej niż możesz wiedzieć.
Przykład:
c:\> wmic process list brief /every:5
Powyższe polecenie wyświetli listę wszystkich procesów w skrócie co 5 sekund. Aby dowiedzieć się więcej, możesz po prostu przejść do /?
poleceń systemu Windows, na przykład
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
I tak dalej i tak dalej. :)
Posługiwać się:
netstat -a -o
Pokazuje PID procesu uruchomionego na określonym porcie.
Pamiętaj o identyfikatorze procesu i przejdź do Menedżera zadań oraz karty usług lub szczegółów i zakończ proces o tym samym PID.
W ten sposób możesz zabić proces działający na określonym porcie w systemie Windows.
Dla osób korzystających z PowerShell, spróbuj 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
Programowo potrzebujesz rzeczy z iphlpapi.h , na przykład GetTcpTable2 (). Struktury takie jak MIB_TCP6ROW2 zawierają PID właściciela.
Za pomocą PowerShell ... ... to byłby twój przyjaciel (zastąp 8080 numerem portu):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Próbka wyjściowa
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
W tym przykładzie tnslsnr.exe (baza danych OracleXE) nasłuchuje na porcie 8080.
Szybkie wyjaśnienie
Select-String
służy do filtrowania długich wyników netstat
dla odpowiednich linii.-Pattern
testuje każdą linię pod kątem wyrażenia regularnego.-Context 0,1
wyświetli 0 linii wiodących i 1 linię końcową dla każdego dopasowania wzorca.W systemie Windows, jeśli chcesz znaleźć rzeczy nasłuchujące lub podłączone do portu 1234, wykonaj następujące czynności w wierszu polecenia cmd:
netstat -na | find "1234"
Użyj poniższego skryptu wsadowego, który przyjmuje nazwę procesu jako argument i podaje netstat
dane wyjściowe dla procesu.
@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
Na podstawie odpowiedzi z informacjami i zabijaniem , dla mnie przydatne jest połączenie ich w jednym poleceniu . Możesz uruchomić to z cmd, aby uzyskać informacje o procesie nasłuchującym na danym porcie (przykład 8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
Lub jeśli chcesz go zabić:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
Możesz również umieścić te polecenia w pliku nietoperza (będą się nieco różnić - zamień %i
na %%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
Następnie z cmd możesz to zrobić:
portInfo.bat 8080
lub
portKill.bat 8080
.\portInfo.bat 800
w PowerShell daje coś takiego: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
w terminalu PowerShell, a następnie wykonałem .\portInfo.bat 8080
. Dane wyjściowe stanowiła tylko zawartość pliku wsadowego. Bardzo możliwe, że coś przeoczyłem. Uwaga: korzystam z programu PowerShell 6.2.3 w systemie Windows 10. Próbowałem również w zwykłym wierszu polecenia, ale wynik był taki sam: Dane wyjściowe zawartości skryptu. Jestem pewien, że brakuje mi ważnej informacji, aby to zadziałało.
/nh
: @tasklist /nh /fi "pid eq %i"
? I dokładnie drzwi:Findstr ":8080"
W moim przypadku port (3000) nie był w ogóle używany i nie jest widoczny w netstat. Ale! Deinstalator Docker dla Windows rozwiązał problem.