Проверить статус одного порта на удаленном хосте
Мне нужна командная строка, которая может проверять состояние порта на удаленном хосте. Я пробовал ping xxx.xxx.xxx.xxx:161
, но он не распознал "хост". Я думал, что это был "хороший" ответ, пока я не сделал ту же команду против хоста, который, как я знаю, открыл этот порт. Это для пакетного файла в Windows, который проверяет состояние удаленного порта, а затем запускает команду, которая использует этот удаленный порт для получения информации, затем команду проверки удаленного порта снова, а затем команду, которая использует этот порт на следующем сервере для получения информации, и так далее. Я повсюду смотрел и думал, что пинг может это сделать, но должны быть разные версии ping, я полагаю, что сервер, на котором я это делаю, не показывает эту опцию.
Просто для усмешки я попробовал веб-интерфейс удаленного контроля портов с веб-сайта - и результаты были верны как для "проблемного" сервера, так и для правильного сервера. Однако я не могу использовать это в пакетном запуске с более 500 IP-адресами сервера.
Есть ли что-то, что я могу сделать, это просто? Мои навыки Perl чрезвычайно ржавые (используйте его или теряйте), не знаю других языков на основе Windows, кроме партии. Unix - это мое умение, но это должно быть выполнено с Widows Server 2003.
Ответы
Ответ 1
Кажется, вы ищете сканер портов, например 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
Ответ 2
В командной строке вы можете использовать команду 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
Ответ 3
В сценариях я обнаружил, что команда 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 секунд.
Если вы также хотите проверить, действительно ли хост, вам нужно также проверить код выхода 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
для полного списка кодов выхода.
Ответ 4
Нажмите 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":
В противном случае вы войдете в открытый порт (пока не отобразится пустой экран)
Ответ 5
Используйте команду 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
Ответ 6
nc или 'netcat' также имеет режим сканирования, который может быть полезен.
Ответ 7
Я думаю, что вы ищете Hping (http://www.hping.org/), который имеет версию Windows.
"Интерфейс вдохновлен ping (8) команда unix, но hping не только для отправки запросов эхо-запросов ICMP. Он поддерживает TCP, UDP, ICMP..."
Также очень полезно, если вы хотите увидеть, где по маршруту, который заблокирован TCP-порт (например, брандмауэром), где ICMP может не быть.
Ответ 8
В 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
Связано: Проверить, доступен ли порт в удаленной системе (без telnet) в SU