Проверьте, открыт ли удаленный хост / порт - Не можете использовать 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

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


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.


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.