Проверить если удаленный хост / порт открыт - нельзя использовать ни GNU Netcat, ни NMap - RHEL 7

На работе группа разработчиков инфраструктуры развертывает новые виртуальные машины с установленным RHEL7 в качестве базовой ОС. Этот конкретный образ поставляется с версией Netcat nmap-ncat и не имеет установленного NMap. Нам запрещается устанавливать что-либо на машины.

Раньше мы использовали GNU Netcat с параметром -z для сканирования удаленного хоста / порта, чтобы проверить, открыт ли он. Примерно так:

nc -z -v -w 3 remote.host.name 1234

Как я могу добиться такой же проверки с новым ncat , у которого нет параметра -z в системе, в которой я не могу установить nmap ?

17
задан 9 July 2016 в 22:36
3 ответа

Bash позволяет подключаться к портам TCP и / или UDP путем перенаправления к специальным файлам:

/ dev / tcp / host / port Если хост - допустимое имя хоста или Интернет адрес, а порт - это целочисленный номер порта или имя службы, Bash пытается откройте соответствующий сокет TCP.

/ dev / udp / host / port Если host - допустимое имя хоста или адрес в Интернете, а порт - это целочисленный номер порта или имя службы, Bash пытается откройте соответствующий сокет UDP.

Ошибка при открытии или создании файла приводит к сбою перенаправления.

Итак, чтобы проверить, можете ли вы подключиться к порту 80 на www.example.com, должно работать следующее:

echo -n > /dev/tcp/www.example.com/80

Если порт заблокирован, вы получите сообщение «В соединении отказано» или тайм-аут.

16
ответ дан 2 December 2019 в 20:30

Хотя Ncat еще не поддерживает -z , вы можете добиться того же поведения с перенаправлением оболочки:

$ ncat google.com 80 </dev/null >/dev/null && echo "yes"
yes
$ ncat google.com 81 </dev/null >/dev/null && echo "yes"
Ncat: Connection timed out.
$ ncat scanme.nmap.org 1234 </dev/null >/dev/null && echo "yes"
Ncat: Connection refused.

Тайм-аут подключения можно настроить с помощью - Вариант w

РЕДАКТИРОВАТЬ: Ncat 7.25BETA2 представил параметр -z , который работает так же, как и с GNU netcat, но только на отдельных портах. Если вам нужно сканировать диапазоны портов, вы должны использовать Nmap.

9
ответ дан 2 December 2019 в 20:30

Ни netcat, ни telnet, ни nmap не нужны. Bash проще, портативнее и эффективнее.

Открытая проверка

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" 

Открытая / закрытая проверка

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" || echo "Closed"

Проверка диапазона портов

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
2
ответ дан 2 December 2019 в 20:30

Теги

Похожие вопросы