Помощь в 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-адресов из файла одновременно, вместо того, чтобы запускать их один за другим.

  • почему nmap показывает одни и те же порты иногда как фильтрованные, а иногда и закрытые?
  • Сортировка блока строк, совпадающих только с первым
  • Как указать брандмауэр stateful vs stateless с nmap ACK scan
  • mass_dns: warning: Невозможно определить какие-либо DNS-серверы. Обратный DNS отключен
  • nmap не показывает sshd?
  • Запуск nmap через Tor
  • Выводить только IP-адреса онлайн-машин с nmap
  • Почему nmap закрыл мою связь?
  • 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

    В то время как цикл с результатом от функции – BASH

    Nginx loadbalancing между PHP-FPM и Apache

    Получение права собственности на файл, когда файл и каталог доступны для чтения / записи

    Конфигурация пространства постоянных сетевых пространств

    Синтаксис командной строки синтаксиса в интерпретационных правилах?

    Получить пароль для входа в opensuse 13.2?

    Чистая установка Debian 8.3 отсутствует PermitRootLogin в ssh_config (не может войти в ssh root)

    Локальная сеть без использования протокола IP в Linux

    Как узнать, действительно ли последовательный порт передает данные, не открывая устройство?

    Правильный способ подключения жесткого диска

    Особенности, которые имеет ядро ​​Linux, а Windows – нет?

    Установите папку FUSE в общий ресурс CIFS с правильными разрешениями

    Quagga перестала работать после обновлений в Stretch

    KVM: сеть частично потеряна для хоста, гости в порядке

    TMUX 2.3 копировать в буфер обмена

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