Помощь в bash для нескольких потоков

У меня есть список IP-адресов, и мне нужно проверить их на открытые порты, используя nmap . Пока что мой сценарий выглядит так:

 #!/bin/bash filename="$1" port="$2" echo "STARTING NMAP" while IFS= read -r line do nmap --host-timeout 15s -n $line -p $2 -oN output.txt | grep "Discovered open port" | awk {'print $6'} | awk -F/ {'print $1'} >> total.txt done <"$filename" 

Он работает отлично, но он медленный, и я хочу проверить, например, 100 IP-адресов из файла одновременно, вместо того, чтобы запускать их один за другим.

  • Найти тип маршрутизатора
  • Как передать несколько строк параметру без цикла for?
  • Почему ufw не применяет правила брандмауэра для трафика, поступающего с виртуальной виртуальной машины VM
  • Как защитить от сканеров портов?
  • nmap-скрипт, необходимый для вывода текста в формат csv
  • NMAP-зондинг VirtualBox Client
  • Тесты MTU (IPv4) в Linux
  • Как просмотреть все имена устройств в локальной сети?
  • 3 Solutions collect form web for “Помощь в bash для нескольких потоков”

    Вот один из способов:

     #!/bin/bash filename="$1" port="$2" echo "STARTING NMAP" ## Read the file in batches of 100 lines for((i=100;i<=$(wc -l < "$filename");i+=100)); do head -n "$i" "$filename" | tail -n 100 | while IFS= read -r line do ## Launch the command in the background nmap --host-timeout 15s -n $line -p $2 -oN output.txt | grep "Discovered open port" | awk {'print $6'} | awk -F/ {'print $1'} >> total.txt & done ## Wait for this batch to finish before moving to the next one ## so you don't spam your CPU wait done 

    Вы можете использовать опцию -iL для передачи файла в список IP-адресов назначения, которые могут быть разделены пробелами, вкладками или новыми строками и не нуждаются в цикле.

    Вы можете запускать команды в фоновом режиме:

     nmap ... >> total.txt & 

    Может быть полезно подождать внутри скрипта для завершения всех фоновых процессов:

     [...] done <"$filename" wait 
    Interesting Posts

    Почему пакет «harden» пакетов недоступен для Debian Jessie (8.0)?

    Подстановочные знаки командной строки

    Установите Flash-плеер без привилегий root в Iceweasel (Firefox)

    Как я могу переименовать файлы устройств для моего устройства чтения карт памяти?

    Squid + Squidguard – перенаправление HTTP-трафика

    systemd недооценивает время загрузки. Как я могу попробовать выскочить?

    Проблемы с нокаутом ubuntu

    Emacs, как интерпретировать этот отчет отладчика Lisp

    Назначить путь к переменной, которая не существует

    Судебно-медицинский анализ: найти все файлы, модифицированные вокруг известного

    Ввод верхнего регистра включается периодически

    Что означает `: -` в сценарии оболочки

    Изменение размера раздела на слишком маленькое значение после сокращения файловой системы

    Как передать строковый параметр в функции bash?

    создание архива с использованием tar, включая все «dotfiles», но исключая все подкаталоги и структуру каталога wo

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