Улучшение 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 соответствующий результат для терминала.

Другие вопросы по тегам