Как передать несколько строк параметру без цикла for?

У меня есть следующая команда для обработки вывода nmap, содержащего список ips, которые мне просили сканировать:

cat ping-sweep.txt | grep "report for" | cut -d " " -f5 

Это дает мне список только ip (по одному на строку), который я бы хотел отсканировать для веб-серверов.

Я могу сканировать отдельный хост следующим образом:

 nmap -v -p 80,443,8080 10.1.1.1 

Я бы хотел выполнить это сканирование на каждом ip в моем списке, однако его использование в nmap не работает. Нужно ли создавать сценарий bash с помощью foreach чтобы сделать это, или есть что-то простое, что мне не хватает?

  • удалить строки в файле list_file из другого файла (ов)
  • Найдите данные о емкости и самый старый файл в формате Busybox
  • отправка нескольких вложений с помощью uuencode
  • Как удалить файлы из папки с более чем 60 файлами в unix?
  • Скрипт сопоставляет буквенный шаблон по нескольким строкам?
  • Как мне ожидать «echo -e»? \ С»?
  • Как писать повторяющиеся строки свободной формы в файл, так же быстро, как «dd»?
  • Передача аргументов из файла в сценарий bash
  • 3 Solutions collect form web for “Как передать несколько строк параметру без цикла for?”

    Первым шагом будет попытка использовать Nmap так, как он был разработан. Поскольку Nmap выполняет обнаружение хоста («ping sweep») перед каждым сканированием портов, вы можете выполнить оба действия одновременно с помощью этой простой команды:

     nmap -p 80,443,8080 [TARGETS] 

    Если вам действительно нужно выполнить обнаружение хоста отдельно от сканирования порта, то используйте надежные машинные возможности вывода Nmap, такие как XML или Grepable . Для более старых версий Nmap самым простым способом было бы сделать обнаружение хоста и сохранить вывод Grepable следующим образом:

     nmap -sn [TARGETS] -oG ping-sweep.gnmap 

    Затем вы можете легко извлечь IP-адреса с помощью awk:

     awk '/Status: Up/{print $2}' ping-sweep.gnmap > targets.txt 

    и импортировать их непосредственно в Nmap:

     nmap -p 80,443,8080 -iL targets.txt 

    В качестве альтернативы, с Nmap 7.00 или новее, вы можете использовать формат вывода XML, сохраненный с -oX ping-sweep.xml и -oX ping-sweep.xml -xml :

     nmap -p 80,443,8080 --script targets-xml --script-args newtargets,iX=ping-sweep.xml 

    При любом из этих параметров, если сканирование обнаружения хоста достаточно недавно, вы можете добавить параметр -Pn чтобы пропустить этап обнаружения хоста сканирования порта. Это экономит вам небольшую скорость сканирования, так как вы должны быть в состоянии рассчитывать на те же самые хосты, которые все еще работают.

    То, что вам действительно не нужно делать, – это любое решение, включающее циклы или xargs , так как в итоге они запускают отдельный экземпляр Nmap для каждой цели. Это расточительно и ненужно, так как каждому экземпляру придется дублировать работу по загрузке файлов данных и отправке временных зондов для мониторинга пропускной способности сети, а отдельные экземпляры будут конкурировать друг с другом за сетевые ресурсы, а не за сотрудничество. Кроме того, в конце концов вам придется рекомбинировать свои отдельные выходы.

    В общем случае вы можете использовать xargs для передачи каждой строки в качестве аргумента командной строки для команды, например:

     cat ping-sweep.txt | grep "report for" | cut -d " " -f5 | xargs -I'{}' nmap -v -p 80,443,8080 '{}' 

    Вы можете дать nmap все адреса для сканирования в качестве параметров, например:

     nmap -v -p 80,443,8080 $(grep "report for" ping-sweep.txt | cut -d" " -f5) 

    Это запускает grep в вашем файле (нет необходимости в cat ), затем фильтрует выход grep через cut , и результат этого используется для создания командной строки nmap . Это называется подстановкой команд .

    В оболочке есть петли, и вы можете использовать их разными способами:

     grep "report for" ping-sweep.txt | cut -d" " -f5 | while read ip; do nmap -v -p 80,443,8080 "${ip}" done 

    или

     for ip in $(grep "report for" ping-sweep.txt | cut -d" " -f5); do nmap -v -p 80,443,8080 "${ip}" done 

    Оба они будут запускать nmap с одним адресом за раз.

    Interesting Posts

    Как использовать разрез для разделения по нескольким пробелам?

    apt-get build-dep не может найти исходный пакет для emacs24

    Использование прохода на нескольких компьютерах. Какой ключ pgp можно разделить?

    Установка разрешения EFI Framebuffer при загрузке

    Я могу ssh на удаленную машину, но я не могу использовать scp для копирования локальных файлов на удаленную машину

    В Makefile, как я могу начать обработку файла до его завершения?

    проблема с печатью: одна страница на ПК печатает на нескольких страницах

    Объединение командной строки в защищенные паролем беспроводные сети в Ubuntu, Arch Linux или других дистрибутивах?

    Есть ли причина использовать « || команда "вместо" && command "?

    Arch + LXDE + lxdm -> INIT: Ид. «X» слишком быстро возникает: отключено на 5 минут

    Linux Vs UNIX – ядро ​​- как понять разницу?

    Bash однострочный, чтобы временно добавить путь для цепочечных команд без дополнительного вызова bash?

    Как установить источник APT по умолчанию

    Что такое «цитата»?

    Мышь вялая / прерывистая

    Linux и Unix - лучшая ОС в мире.