Jak sprawdzić, czy port jest zablokowany na komputerze z systemem Windows?

105

Na natywnych opcjach na platformie Windows muszę sprawdzić, czy port (na przykład 3306) na moim komputerze lokalnym (jak w localhost) jest blokowany?

Boris Pavlović
źródło
1
Wyjaśniając, czy masz na myśli zablokowane, jak w przypadku zablokowania przez zaporę ogniową lub bramę, czy masz na myśli już używany przez coś innego?
squillman
1
Test Audit My PC Firewall pozwala przetestować określony port lub zakres portów z zewnętrznego źródła.
Peter Stuer

Odpowiedzi:

111

Ponieważ korzystasz z komputera z systemem Windows, możesz to zrobić,

  • Wykonaj następujące polecenie i poszukaj detektora „: 3306” (nie wspomniałeś o UDP / TCP). Potwierdzi to, że coś działa na porcie.

    netstat -a -n

  • Następnie, jeśli oczekujesz połączeń przychodzących na tym porcie i uważasz, że zapora może je blokować, możesz rozpocząć rejestrowanie zapory systemu Windows i sprawdzić dzienniki pod kątem przerwanych połączeń

    • Przejdź do Zapory systemu Windows, Ustawienia zaawansowane
    • Kliknij przycisk Ustawienia obok „Połączenie lokalne”
    • Wybierz „Rejestruj odrzucone pakiety”
    • Spójrz na lokalizację pliku dziennika (jeśli nie istnieje, zdefiniuj ją)
    • Kliknij OK
    • Teraz, gdy podejmowana jest próba połączenia (zakładając, że wiesz, kiedy to jest zrobione), spójrz na plik dziennika pod kątem upuszczenia na porcie 3306.
    • Jeśli to się pojawi, będziesz chciał dodać wyjątek dla tego portu.
  • Jest jeszcze jedno polecenie, aby sprawdzić stan zapory
    (aktualizacja dla użytkowników systemu Windows 7 - jak opisanoNick poniżej - użyj zapory netsh advfirewall )

    netsh firewall show state

    • wyświetli to listę zablokowanych portów, a także aktywnych portów nasłuchujących ze skojarzeniami aplikacji
  • To polecenie zrzuci szczegóły konfiguracji zapory systemu Windows

    netsh firewall show config


Jeśli masz aktywny blok (połączenia przychodzące są odrzucane przez zaporę) po rozpoczęciu rejestrowania, powinieneś zobaczyć to w dzienniku.

Jeśli korzystasz z aplikacji / usługi nasłuchującej na 3306, konfiguracja zapory ogniowej powinna pokazywać, że jest włączona. Jeśli nie jest to widoczne, prawdopodobnie przegapiłeś dodanie wyjątku do zapory, aby zezwolić na tę aplikację / usługę.

Wreszcie port 3306 jest zwykle używany dla MySQL. Zakładam, że używasz serwera MySQL na tym komputerze z systemem Windows. Powinieneś zatem zobaczyć detektor dla 3306 akceptujących połączenia przychodzące. Jeśli tego nie widzisz, musisz najpierw pracować z aplikacją (MySQL).

nik
źródło
4
+1 za wspaniałe szczegóły
Sage
3
Począwszy od systemu Windows Vista polecenie „netsh firewall” jest przestarzałe. Zaleca użycie zamiast tego „netsh advfirewall firewall” i odwołuje się do artykułu go.microsoft.com/fwlink/?linkid=121488
Nick DeVore
5
Aby przeanalizować dane wyjściowe w wierszu polecenia, dodaj |find "3306"do polecenia, np.C:\Windows\System32>netstat -an |find "3306"
Cees Timmerman
Nie mogę znaleźć przycisku ustawień określonego w kroku 2 drugiej rekomendacji ...
Bassie
23

NETSTATpowie ci, czy port nasłuchuje, ale nie powie ci, czy port jest otwarty na świat zewnętrzny. Rozumiem przez to, że NETSTATmoże pokazywać, że 0.0.0.0 SŁUCHUJE na porcie 3306, ale zapora może nadal blokować ten port, który uniemożliwia połączenia zewnętrzne; więc nie wystarczy polegać NETSTATwyłącznie na sobie.

Najlepszym sposobem sprawdzenia, czy port jest zablokowany, jest skanowanie portu z komputera klienta.

Istnieje wiele sposobów skanowania portów, ale ponieważ wspomniałeś, że jesteś w systemie Windows, zasugeruję narzędzie wiersza polecenia Microsoft PortQryi wersję graficzną PortQryUI

Aby przetestować wszystkie otwarte porty:

portqry.exe -n #.#.#.#   

Aby przetestować określony port:

portqry.exe -n #.#.#.# -e #

Na przykład, aby przetestować interfejs sieciowy routera pod adresem 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

Które zwraca:

TCP port 80 (http service): LISTENING

Gdzie jako testowanie na komputerze lokalnym bez uruchomionego HTTPD zwraca:

TCP port 80 (http service): NOT LISTENING

Za pomocą narzędzia PortScan uzyskasz jeden z 3 wyników.

  • Listening oznacza, że ​​serwer nasłuchuje na określonym porcie
  • Filtered oznacza, że ​​otrzymał pakiet potwierdzenia TCP z ustawioną flagą Resetuj, co prawdopodobnie oznacza zaporę lub problem z oprogramowaniem
  • Not Listening oznacza, że ​​w ogóle nie otrzymał odpowiedzi

telnetjest kolejną opcją wiersza poleceń, która zazwyczaj jest domyślnie instalowana w systemie operacyjnym. Za pomocą tego narzędzia wiersza polecenia można szybko sprawdzić, czy port odpowiada na żądanie sieciowe.

Aby użyć telnet, wystarczy wydać następujące polecenie z wiersza polecenia:

telnet localhost 3306

Powyższe polecenie powinno dać ci szybkie wskazanie, czy port 3306na localhostodpowiada.

Tim Penner
źródło
Pobieram PortQryUI i sprawdziłem po tym, jak zablokowałem i włączyłem port 445 zarówno w tcp, jak i udp, pokazuje to samo nasłuchiwanie w tcp i nie nasłuchiwanie w udp.
Liam neesan
17

Od PowerShell 4.0 możesz użyć polecenia Test-NetConnection

Jeśli chcesz przetestować Port 3306 jak w twoim przykładzie, to polecenie to

Test-NetConnection -ComputerName localhost -Port 3306

Dokumentacja TechNet Test-NetConnection

Marcel Janus
źródło
+1 za to. Naprawdę fajna alternatywa, która nie wymaga instalacji niczego na większości nowoczesnych maszyn z systemem Windows.
DCaugs
5

Jeśli możesz telnet do portu z komputera lokalnego (używając zewnętrznego adresu IP), ale nie z innego komputera - oznacza to, że jest on blokowany gdzieś pomiędzy.

Pamiętaj, że zapora na komputerze lokalnym może uniemożliwić nawet pierwszą akcję.

Brent
źródło
Zauważ, że telnet nie jest już instalowany na Win7 i nowszych systemach.
Alexis Wilke,
@AlexisWilke To nie jest poprawne. Telnet można zainstalować
deepdive
4
Aby zainstalować telnet z wiersza polecenia: dism / online / Enable-Feature / FeatureName: TelnetClient
Jason Massey