На платформе Windows, какие собственные параметры мне нужно проверить, есть ли порт (например, 3306) на моем локальном компьютере (как в localhost
), блокируется?
Поскольку вы работаете на компьютере с Windows, это можно сделать:
Выполните следующую команду и найдите прослушиватель ": 3306" (вы не упомянули UDP / TCP). Это подтвердит, что на порту что-то запущено.
netstat -a -n
После этого, если вы ожидаете входящих подключений к этому порту и чувствуете, что брандмауэр может их блокировать, вы можете использовать запустить ведение журнала брандмауэра Windows и проверьте журналы на наличие разорванных соединений
Есть еще одна команда для проверки состояния межсетевого экрана
(Обновлено для пользователей 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
Если вы можете подключиться к порту через Telnet с локального компьютера (используя внешний IP-адрес), но не с другого компьютера, то он заблокирован где-то посередине.
Обратите внимание, что брандмауэр на вашем локальном компьютере мог предотвратить даже первое действие.