nmap -p 22 -iL /root/diapazon.txt | grep -B5 "22/tcp open" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" > /root/results.txt;
cat /root/results.txt;
Стоит он потому что ему нужно сначала выполнить задачу по сканированию, потом уже грепать. По идее это можно решить циклом:
while read /root/results.txt do ...
Но это по идее у меня такое не запустилось и как цикл работать не стало. Плюс большое количество диапазонов таким простым образом нельзя сканировать, nmap просто повиснет. Нужно поставить таймауты, максимальное количество задач и можно ещё -T5 поставить. Вернусь домой, могу скинуть как у меня такой скрипт выглядит. Кстати ещё один минус в файле все ip будут без пробелов, это здорово усложняет читаемость, но для продолжения работы с ними у софта проблем не возникает, если сделать cat то он выдаст все ip в по одному в каждой строке. Пробовал текст преобразовать sed, но не получилось. К сожалению сейчас вообще на это все мало времени остается. :_(
[doublepost=1509009848,1509002949][/doublepost]нашел опции для nmap:
nmap -T5 -p 22 -Pn -iL /root/diapazon.txt --max-retries 3 --min-hostgroup 100 --max-hostgroup 600 --host-timeout 180s
-T5 увеличивает уровень агрессии скана до максимума.
-Pn считать все хосты онлайн
--max-retries 3 количество повторных попыток просканировать хост. Можно поставить больше, но как я понимаю будет и так просканированно достаточно большое количсетво адресов, так что не имеет смысла ставить больше.
--max-hostgroup 600 возможно критичная опция в данном вопросе. Поскольку nmap увеличивает группу сканируемых хостов с каждым разом и в какой то момент просто виснет из-за их большого количества, когда идет объемная задача. Это предотвращает зависание.
--host-timeout 180s это таймаут если хост не сканится.
grep -B5 "22/tcp open" тут ищется строка 22 open и берется 5 вышестоящих строк где с заданными опциями и распологается ip хоста.
grep -E -o
-E подразумевает применение регулярного выражения, а -o говорит что нужно забирать только символы соответствующие шаблону.
(и кстати да, лучше большое количество все таки сканировать masscan, скорость будет выше, может тогда создам отдельную тему для него, хотя у него опций конечно поменьше)
[doublepost=1509045132][/doublepost]Собственно самый простой вариант сканирования на порт:
masscan -p22 --conection-timeout 15 --open -iL /root/diapazon.txt | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" > /root/results.txt;
работает быстрее, результат читабельный. Думаю nmap в таком случае лучше использовать что бы он выводил ip с открытым портом и определенной ОС.