Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

Хотя 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.

Ни 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