Как определить, открыт ли порт на сервере Windows? [закрыто]

478

Я пытаюсь установить сайт под альтернативным портом на сервере, но порт может быть закрыт брандмауэром. Есть ли способ проверить или открыть конкретный порт, чтобы увидеть, открыт ли он?

Джейсон
источник

Ответы:

732

Предполагая, что это порт TCP (а не UDP), который вы пытаетесь использовать:

  1. На самом сервере используйте netstat -anдля проверки, какие порты прослушивают.

  2. Снаружи просто используйте telnet host port(или telnet host:portв системах Unix), чтобы увидеть, отказано ли соединение, принято или истекло время ожидания.

По этому последнему тесту, тогда вообще:

  • отказ в соединении означает, что на этом порту ничего не работает
  • Принятый означает, что что-то работает на этом порту
  • тайм-аут означает, что брандмауэр блокирует доступ

В Windows 7 или Windows Vista параметр по умолчанию «telnet» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. Чтобы решить эту проблему, просто включите ее: Нажмите * Пуск ** → Панель управленияПрограммыВключить или отключить функции Windows . В списке прокрутите вниз, выберите Telnet Client и нажмите OK.

Альнитак
источник
312
В Win7 или Vista параметр по умолчанию «telnet» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. Чтобы решить эту проблему, просто включите ее: Нажмите Пуск, Панель управления, Программы, а затем Включите или выключите компоненты Windows. В списке прокрутите вниз, выберите Telnet Client и нажмите «OK»
volody
12
@PankajKohli использовать вместо этого клиент Telnet PuTTy . Это не должно быть установлено.
Колин Пикард
52
Что Could not open connection to the host, on port *x*: Connect failedозначает?
Кенни Эвитт
2
@Alnitak Я просто хотел проверить, так как думаю, что это уже отвечает на мой вопрос. Когда я telnet api-3t.sandbox.paypal.com 443получу Connecting to api-3t.sandbox.paypal.com...Could not open connection to the host on port 443: Connect failedэто, потому что это блокирует брандмауэр?
Попай
2
есть разница, если вы открываете telnet.exe, а затем набираете o host portvs open командной строки (cmd.exe), а затем telnet host port
набираете
185

На Windows вы можете использовать

netstat -na | find "your_port"

сузить результаты. Кроме того, можно фильтровать LISTENING, ESTABLISHED, TCPи тому подобное. Имейте в виду, что это с учетом регистра, хотя.

J.Celmer
источник
4
Вы не можете использовать поиск, как это, он будет искать файлы, вы должны использовать grep
Moataz Elmasry
38
@MoatazElmasry, это верно для Linux, но это на сервере Windows, где команда find является правильной. Grep недоступен в Windows. Я только что выполнил указанную здесь команду, и она отлично сработала.
Бен Уайатт
4
Когда я использовал эту команду, т.е. netstat -an | найти "19345", я не получил никакого результата. что это значит?
нанософт
14
findне работал в Windows 10 для меня, но netstat -na | findstr "8080"работал
Arun
6
ничего не происходит, не с find или findstr
полезноBee
85

Если вы проверяете извне, а не с самого сервера и не хотите беспокоиться об установке telnet (так как он не поставляется с последними версиями Windows) или любого другого программного обеспечения, то у вас есть собственный PowerShell:

Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed

(К сожалению, это работает только с PowerShell 4.0 или новее. Чтобы проверить версию PowerShell, введите $PSVersionTable.)

PS: Обратите внимание, что в эти дни есть некоторые претензии к twittersphere, которые намекают, что этот ответ можно улучшить, упомянув «Test-Connection» из PowerShell Core или ярлык «tnc». Смотрите https://twitter.com/david_obrien/status/1214082339203993600 и помогите мне отредактировать этот ответ, чтобы улучшить его, пожалуйста!


(Если у вас PSVersion <4.0, вам не повезло. Проверьте эту таблицу:

Введите описание изображения здесь

Несмотря на то, что вы можете обновить версию PowerShell, установив Windows Management Framework 4.0 , для меня это не помогло, командлет Test-NetConnection по-прежнему недоступен).

knocte
источник
3
Это лучший ответ. Установка telnet не всегда проста на чужих серверах!
TrojanName
Определенно должен быть лучший ответ.
QtRoS
1
Это более надежный вариант, чем telnet, telnet просто зависнет, ничего не сообщая, в то время как он сообщает, что порт доступен в моем случае.
Axk
42

На компьютере с Windows вы можете использовать PortQry от Microsoft, чтобы проверить, прослушивает ли приложение уже определенный порт, используя следующую команду:

portqry -n 11.22.33.44 -p tcp -e 80
Gunjan Moghe
источник
4
Firewalled порты обычно отображаются как «FILTERED».
Dlanod
Вы также можете использовать этот инструмент для проверки UDP-порта:portqry -n 11.22.33.44 -p udp -e 19132
Antony
41

Я сделал это так:

netstat -an | find "8080" 

из телнета

telnet 192.168.100.132 8080

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

Сарвар Нишонбоев
источник
Когда я использовал эту команду, т.е. netstat -an | найти "19345", я не получил никакого результата. что это значит? -
Нанософт
2
это означает, что этот порт свободен
Сарвар Нишонбоев
Я получаю сообщение об ошибке , когда я бегу netstat -an | find "8080"он говорит,no such file named "8080"
Pragyaditya Дас
24

Если telnetнет в наличии, загрузите PuTTY . Это значительно превосходящий клиент Telnet, SSH и т. Д., Который будет полезен во многих ситуациях, а не только в этой, особенно если вы управляете сервером.

Machtyn
источник
Да, но не для вставки кода Forth, скажем, с AmForth (если только не используется PuTTY в сочетании с Edit Overflow ).
Питер Мортенсен
13

Вы хотите инструмент для этого? Есть веб-сайт по адресу http://www.canyouseeme.org/ . В противном случае вам понадобится какой-нибудь другой сервер, чтобы перезвонить вам и посмотреть, открыт ли порт ...

Дуглас Мейл
источник
12

Используйте это, если вы хотите увидеть все используемые и прослушивающие порты на сервере Windows:

netstat -an |find /i "listening"

Посмотреть все открытые, прослушивающие, установленные порты:

netstat -a
zehnaseeb
источник
7

На Windows Server вы можете использовать

netstat -an | where{$_.Contains("Yourport")}
Derbium
источник
Не решает проблему брандмауэра.
маркиз Лорн
5
Это работает на powershell
Paco Zarate
Или вы имеете в виду "сервер Windows"?
Питер Мортенсен
4

PsPing от Sysinternals тоже очень хорош.

Питер Мортенсен
источник
Хороший инструмент. Пример кода: PsPing -n 20 -i 0 имя_сервера: порт
Asher
1

Вот что сработало для меня:

  • Откройте командную строку
  • Тип telnet
  • Microsoft Telnet> open <имя хоста или IP-адрес> <пробел> <порт>

Он подтвердит, открыт ли порт.

p_champ
источник
0

Еще одна полезная программа, которую я нашел, а также хорошая и небольшая, - это PortQry Command Line Port Scanner версии 2.0 .

Вы можете пропинговать сервер и порт, и он сообщит вам состояние порта. Для этого есть утилита командной строки и пользовательский интерфейс.

Gilberto
источник