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

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 
  • Как защитить от сканеров портов?
  • Как «закрыть» открытые порты?
  • Использование регулярных выражений для анализа адресов ip из журналов
  • nmap не показывает sshd?
  • nmap не сообщает обо всех открытых портах?
  • mass_dns: warning: Невозможно определить какие-либо DNS-серверы. Обратный DNS отключен
  • Выполнение сценария Nmap для обнаружения сердечной недостаточности терпит неудачу
  • Используйте awk для поиска всех портов для каждого IP-адреса, у которых есть https open
  • telnet для хоста / порта работает, пока на этом хосте не прослушивается сервис на этом порту
  • Выполнение nmap в сети
  • Что делает следующий скрипт?
  • Извлечение результатов из команды в терминале
  • Interesting Posts

    Как удалить «блокировку» из удаленных, но все еще используемых файлов в Linux?

    Linux Mint не загружается, если не удается смонтировать (совместно используемое) устройство, указанное в fstab

    Как исправить частые сбои openhot?

    восстановить lvm после потери таблицы разделов

    Touchegg хорошо справляется с событиями 3 и 4 пальца, но «игнорирует» 2 события пальца

    pacman – файл, принадлежащий двум пакетам

    Awk – строка печати, если номер находится между столбцом 1 и столбцом 2

    VPN-клиенты, не достигшие Интернета

    Raspbian: проблема с перенаправлением вывода в скрипте udev

    Установка Debian не загружается после установки драйверов Nvidia

    Что означает эхо "{@@ ##}"?

    Как кодировать / декодировать JPG-файл для последовательности int?

    Почему мой оконный менеджер (stumpwm) показывает крест на указателе мыши, когда он находится над корневым окном?

    Как запустить программу с ограниченными разрешениями

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

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