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

17

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

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

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

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

λ Йонас Гораускас
источник
1
Почему вы проверяете, открыт ли / закрыт порт? Является ли это частью решения для мониторинга?
ewwhite
1
Мы работаем над тем, чтобы -zвойти в Ncat, но некоторое время он не будет в Red Hat, я уверен: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Я должен проверить, открыты ли сетевые ACL между точкой A и точкой B. Например: может ли сервер приложений
обмениваться

Ответы:

16

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

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

HBruijn
источник
1
Вы также можете telnet в порт
Райан Бабчишин
Да, но минимальная установка в RHEL 7 не включает RPM telnet, где всегда присутствует bash.
HBruijn
2
В самом деле? Как все изменилось.
Райан Бабчишин
1
@RyanBabchishin, а также множество рекомендаций по безопасности требуют удаления клиента telnet на том основании, что его использование для входа во что-либо еще небезопасно; игнорируя его обширные способы устранения неполадок.
Джейсон Мартин
@JasonMartin Pfft
Райан Бабчишин
9

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

bonsaiviking
источник
2

Ни 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
AGS
источник