Как проверить, заблокирован ли порт на Windows-машине?

На платформе Windows какие внутренние параметры мне нужно проверить, заблокирован ли порт (3306, например) на моем локальном компьютере (как в localhost)?

87 голосов | спросил Boris Pavlović 16 J0000006Europe/Moscow 2009, 18:21:51

4 ответа


98

Поскольку вы находитесь на машине Windows, это можно сделать,

  • Выполните следующую команду и найдите прослушиватель «: 3306» (вы не указали UDP /TCP). Это подтвердит, что на порту что-то работает.

    netstat -a -n

  • После этого, если вы ожидаете входящих соединений на этом порту и чувствуете, что брандмауэр может их блокировать, вы можете запустить ведение журнала брандмауэра Windows и проверить журналы для отключенных соединений

    • Перейти к брандмауэру Windows, расширенным настройкам
    • Нажмите кнопку «Настройки» рядом с «Подключение по локальной сети»
    • Выберите «Пакеты с отложенным протоколом»
    • Посмотрите на местоположение файла журнала (если нет, укажите его)
    • Нажмите «ОК»
    • Теперь, когда попытка подключения сделана (если вы знаете, когда это будет сделано), посмотрите файл журнала для перехода на порт 3306.
    • Если это видно, вам нужно добавить исключение для этого порта.
  • Существует еще одна команда для проверки состояния брандмауэра
    (Обновление для пользователей Windows 7 - как указано ниже Nick) - используйте netsh advfirewall firewall )

    Состояние брандмауэра netsh показывает состояние

    • в этом списке будут указаны заблокированные порты, а также активные порты прослушивания с ассоциациями приложений
  • Эта команда сбросит конфигурацию брандмауэра Windows

    netsh firewall show config


Если у вас есть активный блок (входящие соединения удаляются брандмауэром) после начала регистрации, вы должны увидеть это в журнале.

Если вы используете приложение /услугу, прослушивающую 3306, конфигуратор брандмауэра должен показать, что он включен. Если это не видно, вы, вероятно, пропустили добавление исключения из брандмауэра, чтобы разрешить это приложение /службу.

Наконец, порт 3306 обычно используется для MySQL. Итак, я полагаю, вы используете сервер MySQL на этой машине Windows. Поэтому вы должны видеть слушателя, принимающего входящие соединения. Если вы этого не видите, вам нужно работать с вашим приложением (MySQL), чтобы начать сначала.

ответил nik 16 J0000006Europe/Moscow 2009, 18:28:46
15

NETSTAT расскажет вам, является ли порт прослушиванием , но он не скажет вам, что порт open во внешний мир. Что я имею в виду, так это то, что NETSTAT может показать, что 0.0.0.0 является LISTENING на порту 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 с установленным флагом сброса, который, вероятно, указывает на проблему с брандмауэром или программным обеспечением.
  • Not Listening означает, что он вообще не получил ответа

telnet - это еще один параметр командной строки, который обычно устанавливается в ОС по умолчанию. Эта утилита командной строки может быть использована быстро, чтобы узнать, отвечает ли порт на сетевой запрос.

Чтобы использовать telnet, вы просто выпустите следующую команду из командной строки:

telnet localhost 3306

Приведенная выше команда должна дать вам быструю индикацию, если отвечает 3306 на localhost.

ответил Tim Penner 4 AMpMon, 04 Apr 2016 03:47:22 +030047Monday 2016, 03:47:22
5

Если вы можете telnet подключиться к порту с локального компьютера (используя внешний IP-адрес), но не с другого компьютера, то он блокируется где-то между ними.

Обратите внимание, что брандмауэр на вашем локальном компьютере может предотвратить даже первое действие.

ответил Brent 16 J0000006Europe/Moscow 2009, 18:27:24
5

Так как PowerShell 4.0 вы можете использовать команду Test-NetConnection

Если вы хотите протестировать порт 3306, как в вашем примере, команда

Test-NetConnection -ComputerName localhost -Port 3306

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

ответил Marcel Janus 17 Jpm1000000pmWed, 17 Jan 2018 17:56:05 +030018 2018, 17:56:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132