На платформе Windows какие собственные опции нужно проверить, не заблокирован ли порт (например, 3306) на моей локальной машине (как в localhost
)?
Поскольку вы находитесь на компьютере с Windows, эти вещи можно сделать,
Выполните следующую команду и найдите прослушиватель ": 3306" (вы не упомянули UDP/TCP). Это подтвердит, что что-то работает в порту.
netstat -a -n
После этого, если вы ожидаете входящие соединения через этот порт и чувствуете, что брандмауэр может их блокировать, вы можете начать протоколирование брандмауэра Windows и проверьте журналы на предмет разорванных соединений
Есть еще одна команда для проверки состояния брандмауэра
(Обновление для пользователей Windows 7 - как указано в Nick
ниже - используйте netsh advfirewall firewall )
netsh firewall показать состояние
Эта команда выведет подробности конфигурации брандмауэра Windows
netsh firewall show config
Если у вас есть активный блок (входящие соединения сбрасываются брандмауэром) после начала регистрации, вы должны увидеть это в журнале.
Если вы используете приложение/службу, которая прослушивает 3306, настройка брандмауэра должен показать, что он включен. Если этого не видно, вы, вероятно, пропустили добавление исключения с брандмауэром, чтобы разрешить это приложение/службу.
Наконец, порт 3306 обычно используется для MySQL. Итак, я предполагаю, что вы используете сервер MySQL на этой машине Windows. Поэтому вы должны увидеть слушателя 3306, принимающего входящие соединения. Если вы этого не видите, вам нужно сначала поработать с вашим приложением (MySQL).
NETSTAT
сообщит вам, если порт прослушивает, но не сообщит, если порт открыт для внешнего мира. Под этим я подразумеваю, что 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
отвечает.
Начиная с PowerShell 4.0 вы можете использовать команду Test-NetConnection
Если вы хотите проверить порт 3306, как в вашем примере, команда
Test-NetConnection -ComputerName localhost -Port 3306
Если вы можете подключиться к порту через telnet с локального компьютера (используя внешний IP-адрес), но не с другого компьютера, он будет заблокирован где-то посередине.
Обратите внимание, что брандмауэр на вашем локальном компьютере может предотвратить даже первое действие.