Як перевірити, чи заблокований порт на машині Windows?


105

На платформі Windows, які вбудовані параметри я повинен перевірити, чи localhostзаблокований порт (наприклад, 3306) на моїй локальній машині (як в )?


1
Просто для уточнення, ви маєте на увазі заблоковану, як заблоковану брандмауером або шлюзом, або ви маєте на увазі, що вже використовуєте щось інше?
шквальмен

1
Тест аудит My PC Firewall дозволяє перевірити певний порт або діапазон портів від зовнішнього джерела.
Пітер Стюер

Відповіді:


111

Оскільки ви перебуваєте на машині Windows, це можна зробити,

  • Виконайте таку команду і знайдіть слухача ": 3306" (ви не згадали про UDP / TCP). Це підтвердить, що на порту щось працює.

    netstat -a -n

  • Після цього, якщо ви очікуєте вхідних з'єднань на цьому порту і відчуваєте, що брандмауер може блокувати їх, ви можете запустити журнал брандмауера Windows і перевірити журнали на відключені з'єднання.

    • Перейдіть до Брандмауера Windows, Додаткові налаштування
    • Натисніть кнопку "Налаштування" поруч із "Місцевим підключенням"
    • Виберіть "Журнал скинутих пакетів"
    • Подивіться на розташування файлу журналу (якщо немає, визначте його)
    • Натисніть кнопку ОК
    • Тепер, коли робиться спроба з'єднання (припускаючи, що ви знаєте, коли це робиться), подивіться на файл журналу, щоб виявити краплю на порт 3306.
    • Якщо це помічено, ви хочете додати виняток для цього порту.
  • Є ще одна команда для перевірки стану брандмауера
    (Оновлення для користувачів Windows 7 - як зазначено Nickнижче - використовувати netsh брандмауер advfirewall )

    стан шоу брандмауера

    • тут буде перераховано заблоковані порти, а також активні порти прослуховування з асоціаціями програм
  • Ця команда скидає детальну інформацію про конфігурацію брандмауера Windows

    показати конфігурацію брандмауера


Якщо у вас є активний блок (вхідні з'єднання відкидаються брандмауером) після того, як ви починаєте вести журнал, ви повинні бачити це в журналі.

Якщо ви користуєтеся програмою / службою, яка прослуховується на 3306, конфігурація брандмауера повинна показувати, що її ввімкнено. Якщо це не відображається, ви, ймовірно, пропустили додавання виключення з брандмауером, щоб дозволити це додаток / послугу.

Нарешті, порт 3306 зазвичай використовується для MySQL. Отже, я припускаю, що ви працюєте на цьому сервері Windows MySQL-сервер. Тому ви повинні побачити слухача для 3306, який приймає вхідні з'єднання. Якщо ви цього не бачите, вам потрібно спочатку попрацювати зі своїм додатком (MySQL).


4
+1 для чудових деталей
Sage

3
Починаючи з Windows Vista, команда "мережевий брандмауер" застаріла. Він рекомендує замість цього використовувати "мережевий брандмауер advfirewall" та посилатися на статтю go.microsoft.com/fwlink/?linkid=121488
Nick DeVore

5
Щоб проаналізувати вихід у командному рядку, додайте |find "3306"до команди, наприкладC:\Windows\System32>netstat -an |find "3306"
Cees Timmerman

Я не можу знайти кнопку налаштувань, вказану на кроці 2 другої рекомендації ...
Bassie


23

NETSTATпідкаже, чи слухає порт, але він не скаже вам, чи порт відкритий для зовнішнього світу. Я маю на увазі під цим те, що NETSTATможе свідчити про те, що 0.0.0.0 є СПИСОК на порту 3306, але брандмауер все ще може блокувати той порт, який перешкоджає зовнішнім з'єднанням; тому недостатньо покладатися на NETSTATсамотужки.

Найкращий спосіб перевірити, чи порт заблокований, - це зробити сканування портів з клієнтської машини.

Існує багато способів зробити сканування портів, але оскільки ви згадали, що перебуваєте в Windows, то я запропоную утиліту командного рядка Microsoft PortQryта графічну версію PortQryUI

Щоб перевірити всі відкриті порти:

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

Щоб перевірити конкретний порт:

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

Наприклад, протестувати веб-інтерфейс маршрутизатора на 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

Що повертає:

TCP port 80 (http service): LISTENING

Де тестування на локальній машині без HTTPD не повертається:

TCP port 80 (http service): NOT LISTENING

Використовуючи утиліту PortScan, ви отримаєте один з 3 результатів.

  • Listening означає, що сервер прослуховує вказаний порт
  • Filtered означає, що він отримав пакет підтвердження TCP з набором прапора Reset, який, ймовірно, вказує на брандмауер або проблему з програмним забезпеченням
  • Not Listening означає, що він взагалі не отримав відповіді

telnetінший варіант командного рядка, який зазвичай встановлюється в ОС за замовчуванням. Ця утиліта командного рядка може бути використана швидким способом перевірити, чи відповідає порт на запит мережі.

Для використання telnetви просто видасте таку команду з командного рядка:

telnet localhost 3306

Команда, наведена вище, повинна дати вам швидку індикацію, чи відповідає порт 3306на localhost.


Я завантажую PortQryUI, і я перевірив після того, як я заблокував і включив порт 445 в tcp і udp, він показує однакове прослуховування в tcp, а не прослуховування в udp.
Liam neesan

17

З PowerShell 4.0 ви можете використовувати команду Test-NetConnection

Якщо ви хочете перевірити порт 3306, як у вашому прикладі, це команда

Test-NetConnection -ComputerName localhost -Port 3306

Документація TechNet Test-NetConnection


+1 для цього. Справді приємна альтернатива, яка не потребує установки нічого на більшості сучасних віконних машин.
DCaugs

5

Якщо ви можете зателефонувати до порту з локальної машини (використовуючи зовнішню IP-адресу), а не з іншої машини - тоді вона блокується десь між ними.

Зауважте, що брандмауер локальної машини може запобігти навіть перші дії.


Зауважте, що telnet більше не встановлюється в Win7 та новіших системах.
Алексіс Вілке

@AlexisWilke Це неправильно. Telnet можна встановити
deepdive

4
Щоб встановити telnet з командного рядка: dism / online / Enable-Feature / FeatureName: TelnetClient
Jason Massey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.