
Instalujesz nową aplikację webową, uruchamiasz konsolę zarządzającą (np. antywirusa) albo konfigurujesz certyfikat SSL. Nagle pojawia się błąd: port 443 jest już w użyciu. Jako doświadczony administrator odpalasz konsolę i wpisujesz znane i lubiane polecenie, aby namierzyć winowajcę:
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Zamiast oczekiwanej nazwy aplikacji, system wypluwa jedną, irytującą odpowiedź: System (PID 4).
Ślepy zaułek? Nie do końca. Dziś pokażę Ci, dlaczego Windows ukrywa przed Tobą tę informację i jak za pomocą jednego polecenia wyciągnąć ją na światło dzienne.
Dlaczego netstat i PowerShell kłamią?
Z technicznego punktu widzenia system wcale nie kłamie. Kiedy widzisz, że port 80 lub 443 jest zajęty przez proces o ID 4 (System), oznacza to, że nasłuchuje na nim http.sys.
http.sys to sterownik trybu jądra w systemie Windows (Kernel-mode HTTP API). Wiele nowoczesnych aplikacji (takich jak serwer IIS, konsole antywirusów np. G-Data, czy usługi Exchange) nie nasłuchuje na portach bezpośrednio. Zamiast tego, rejestrują one swoje adresy URL właśnie w sterowniku http.sys. Ponieważ jest to sterownik jądra, narzędzia takie jak netstat czy standardowe polecenia PowerShell przypisują ten ruch do głównego procesu systemowego.
Jak znaleźć prawdziwą aplikację? Użyj netsh!
Aby zajrzeć "pod maskę" sterownika http.sys i zobaczyć, kto dokładnie zlecił mu nasłuchiwanie, musimy sięgnąć po narzędzie netsh.
Otwórz wiersz poleceń (cmd) lub PowerShell z uprawnieniami administratora i wpisz to jedno "magiczne" polecenie:
netsh http show servicestate
To polecenie wygeneruje sporo tekstu, ale interesują nas dwie konkretne rzeczy w sekcji Request queues (Kolejki żądań):
-
Registered URLs (Zarejestrowane adresy URL) – tutaj zobaczysz, czy adres pasuje do usługi, której szukasz (np.
https://+:443/Console/). -
Process IDs assigned to queue (Identyfikatory procesów przypisane do kolejki) – to jest nasz Święty Graal. Zobaczysz tu rzeczywisty PID aplikacji!
Krok końcowy: Łączymy kropki
Gdy netsh wypluje konkretny numer PID (np. 5432), wystarczy wrócić do PowerShell-a lub otworzyć Menedżer Zadań, aby sprawdzić, co to za aplikacja:
Get-Process -Id 5432
Wynik? W ułamku sekundy dowiadujesz się, że port 443 blokuje usługa GDataManagementConsole.exe (lub jakakolwiek inna, która zrobiła Ci niespodziankę). Możesz teraz zmienić jej konfigurację, zatrzymać usługę i kontynuować swoją pracę.
Znajomość netsh http show servicestate to as w rękawie, który oszczędzi Ci godzin frustracji. Zapisz to polecenie w swoim notatniku – gwarantuję, że jeszcze nie raz Ci się przyda!
