it-swarm.com.ru

Проверьте состояние одного порта на удаленном хосте

Мне нужна командная строка, которая может проверить состояние порта на удаленном хосте. Я пытался ping xxx.xxx.xxx.xxx:161, но он не распознает "Хост". Я думал, что это был "хороший" ответ, пока я не выполнил ту же команду для хоста, который, как я знаю, открыл этот порт. Это для пакетного файла в Windows, который проверит состояние удаленного порта, затем запустит команду, которая использует этот удаленный порт для информации, затем снова команду проверки удаленного порта, а затем команду, которая использует этот порт на следующем сервере для информации , и так далее. Я искал повсюду и думал, что ping может сделать это, но должны быть различные версии ping, я полагаю, поскольку сервер, на котором я делаю это, не показывает эту опцию.

Просто ради смеха, я попробовал веб-проверку удаленного порта с веб-сайта - и результаты были правильными как для "проблемного" сервера, так и для правильного сервера. Тем не менее, я не могу использовать это в пакетном запуске с 500+ IP-адресов серверов.

Есть ли что-то, что я могу сделать, это просто? Мои навыки Perl чрезвычайно ржавые (используйте их или потеряйте), я не знаю других языков для Windows, кроме пакетных. Unix - это мой навык, но он должен быть выполнен с Widows Server 2003.

151
Sheila

Похоже, вы ищете сканер портов, например nmap или netcat , оба из которых доступны для Windows, Linux и Mac OS X.

Например, проверьте telnet на известном ip:

nmap -A 192.168.0.5/32 -p 23

Например, найдите открытые порты от 20 до 30 на Host.example.com:

nc -z Host.example.com 20-30
142
Glenn

В командной строке вы можете использовать команду telnet. Например, для подключения к IP 192.168.10.1 с портом 80,

telnet 192.168.10.1 80

Чтобы включить telnet в Windows 7 и выше нажмите . В связанной статье включите telnet через панель управления -> программы и функции -> функции windows -> клиент telnet или просто запустите его в командной строке администратора:

dism /online /Enable-Feature /FeatureName:TelnetClient
120
Naveen Yedugani

В целях написания сценариев я обнаружил, что команда curl может сделать это, например:

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

Возможно, это может не сработать для всех служб, так как curl может возвращать разные коды ошибок в некоторых случаях (согласно комментарию), поэтому добавление следующего условия может работать надежно:

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

Примечание: добавлен -m5 для установки максимального времени ожидания соединения 5 секунд.

Если вы также хотите проверить, действителен ли Host, вам необходимо также проверить код выхода 6:

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve Host: foo
FAIL

Чтобы устранить неисправность возвращенного кода ошибки, просто запустите: curl Host:port, например:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

Смотрите: man curl для полного списка кодов выхода.

24
kenorb

Нажмите Windows + R введите cmd и Enter

В командной строке введите

telnet "machine name/ip" "port number"

Если порт не открыт, это сообщение будет отображаться:

"Connecting To "machine name"...Could not open connection to the Host, on port "port number":

В противном случае вы попадете в открытый порт (отобразится пустой экран).

22
Leo

Используйте команду nc,

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

Вы также можете использовать команду telnet

telnet <ip/Host> port
18
minhas23

у nc или 'netcat' также есть режим сканирования, который может быть полезен.

4
caskey

В Bash вы можете использовать файлы псевдоустройств, которые могут открыть TCP соединение с соответствующим сокетом. Синтаксис /dev/$tcp_udp/$Host_ip/$port.

Вот простой пример, чтобы проверить, работает ли Memcached:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

Вот еще один тест, чтобы увидеть, доступен ли конкретный веб-сайт:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

Для получения дополнительной информации проверьте: Руководство по расширенному написанию сценариев Bash: Глава 29. /dev и /proc .

Related: Проверьте, доступен ли порт в удаленной системе (без telnet) в SuperUser.

Дополнительные примеры см .: Как открыть сокет TCP/UDP в командной оболочке bash (статья).

2
kenorb

Я думаю, что вы ищете Hping ( http://www.hping.org/ ), который имеет версию для Windows.

"Интерфейс основан на команде unix ping (8), но hping не только может отправлять эхо-запросы ICMP. Он поддерживает TCP, UDP, ICMP ..."

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

2
Trueblood