Назад | Перейти на главную страницу

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

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

Поскольку вы работаете на компьютере с Windows, это можно сделать:

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

    netstat -a -n

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

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

    netsh firewall показывает состояние

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

    netsh firewall показать конфигурацию


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

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

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

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, вы получите один из трех результатов.

  • Listening означает, что сервер прослушивает указанный порт
  • Filtered означает, что он получил пакет подтверждения TCP с установленным флагом сброса, который, вероятно, указывает на проблему брандмауэра или программного обеспечения
  • Not Listening означает, что он вообще не получил ответа

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

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

telnet localhost 3306

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

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

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

Test-NetConnection -ComputerName localhost -Port 3306

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

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

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