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


106

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


1
Просто чтобы прояснить, вы имеете в виду заблокированный, как заблокированный брандмауэром или шлюзом, или вы уже имеете в виду что-то еще?
squillman

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

Ответы:


111

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

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

    netstat -a -n

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

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

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

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

    netsh firewall show config


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

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

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


4
+1 для больших деталей
Мудрец

3
Начиная с Windows Vista, команда «netsh firewall» устарела. Вместо этого рекомендуется использовать «netsh advfirewall firewall» и ссылаться на статью go.microsoft.com/fwlink/?linkid=121488
Ник ДеВор

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

Я не могу найти кнопку настроек, указанную в шаге 2 второй рекомендации ...
Басси


24

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 с установленным флагом сброса, который, вероятно, указывает на проблему с брандмауэром или программным обеспечением
  • Not Listening означает, что он вообще не получил ответа

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

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

telnet localhost 3306

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


Я загружаю PortQryUI и проверил после того, как заблокировал и включил порт 445 в tcp и udp, он показывает одинаковое прослушивание в tcp и не прослушивание в udp.
Лиам Нисан

17

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

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

Test-NetConnection -ComputerName localhost -Port 3306

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


+1 за это. Действительно хорошая альтернатива, которая не требует установки чего-либо на большинство современных компьютеров с Windows.
DCaugs

5

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

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


Обратите внимание, что telnet больше не устанавливается в Win7 и более новых системах.
Алексис Уилк

@AlexisWilke Это не правильно. Telnet может быть установлен
глубокое погружение

4
Чтобы установить telnet из командной строки: dism / online / Enable-Feature / FeatureName: TelnetClient
Джейсон Мэсси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.