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


17

На роботі команда інфраструктури впроваджує нові VM з 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. Наприклад: чи може сервер додатків говорити TCP на сервері БД на порту 1521.
λ Jonas Gorauskas

Відповіді:


16

Bash дозволяє підключатися до портів TCP та / або UDP шляхом перенаправлення на спеціальні файли:

/dev/tcp/host/port Якщо хост - це дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, Bash намагається відкрити відповідний TCP-розетку.

/dev/udp/host/port Якщо хост - це дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, Bash намагається відкрити відповідний сокет UDP.

Невміння відкрити або створити файл призводить до збою перенаправлення.

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

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

Якщо порт заблокований, ви отримуєте або повідомлення про відмову від з'єднання, або час очікування.


1
Ви також можете зателефонувати до порту
Райан Бабчишин

Так, але мінімальна установка в RHEL 7 не включає telnet RPM, де баш завжди присутній.
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параметра.

EDIT: 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.