Улучшение bash-скрипта
Мне нужно улучшить этот скрипт:
nmap -PN -p 9292 -sN 192.68.12.14 | grep "open"
Мне нужно проверить подключение к IP 192.168.15.24
в порту 9292
,
Если порт открыт, выведите "порт 9292 открыт"
Если порт закрыт, выведите "порт 9292 закрыт"
Результат будет взят из айсинга для проверки.
Любая идея?
2 ответа
Помимо правильного ответа @DopeGhoti с использованием netcat, ваш скрипт можно улучшить, изменив некоторые параметры Nmap и добавив несколько.
-sN
означает "сканирование TCP NULL", что является очень необычным режимом сканирования raw-сокетов, требующим привилегий root. Он также обладает странным свойством только маркировать порты как "закрытые" или "нефильтрованные", но никогда не "открытые". Вы, вероятно, хотите вместо этого обычное сканирование TCP Connect, используя-sT
вариант.- Nmap попытается сделать обратный поиск имени (
PTR
) по умолчанию. Избегайте этой ненужной задержки с-n
вариант. - Использование нормального вывода экрана Nmap в сценарии не рекомендуется, даже для чего-то такого простого, потому что оно может меняться между версиями. Для стабильного формата, пригодного для машинного анализа, используйте grepable (
-oG
) или XML (-oX
) -PN
это старое (устарело в 2010 году) написание-Pn
, Он пропускает этап обнаружения хоста, поэтому, вероятно, хорошая идея для вашего сценария.
Пример со всеми этими изменениями:
nmap -n -Pn -sT -p 9292 -oG - | grep '/open/'
Это требует netcat
пакет:
if nc -z 192.68.12.14 9292; then
echo "Port is open"
else
echo "Port is closed"
fi
nc -z
попытается установить соединение с указанным хостом и портом; это возвращает 0
код завершения при успехе и ненулевой код в противном случае. На самом деле он ничего не выводит на терминал. Чтобы получить желаемый результат, я использую if
заявление для проверки результатов проверки соединения, и echo
соответствующий результат для терминала.