Мне нужно извлечь IP-адрес и путь к файлу из отчета Nessus, используя текстовый обработчик

регулярное выражение

Мне нужно извлечь IP-адрес и путь к файлу из отчета Nessus, используя обработчики текста, такие как Grep / Awk / Sed / Tr и т. Д ….

У меня есть сценарий, чтобы изолировать IP-адрес и путь к файлу, но мне нужно обработать текст дальше и удалить «не была исправлена ​​удаленная версия …»

192.168.1.1 - C:\WINDOWS\SYSTEM32\GPPREF.DLL HAS NOT BEEN PATCHED. REMOTE VERSION : 6.2.9200.16384 SHOULD BE : 6.2.9200.16859" 192.168.1.2 THE REMOTE HOST IS MISSING ONE OF THE FOLLOWING ROLLUP KBS : - 4022719 - 4022722C:\WINDOWS\SYSTEM32\BCRYPT.DLL HAS NOT BEEN PATCHED. REMOTE VERSION : 6.1.7601.23796 SHOULD BE : 6.1.7601.23816" 192.168.1.3 - C:\WINDOWS\SYSTEM32\GPPREF.DLL HAS NOT BEEN PATCHED. REMOTE VERSION : 6.2.9200.16384 SHOULD BE : 6.2.9200.16859" 192.168.1.4 - C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL12.ACT7\MSSQL\BINN\SQLSERVR.EXE HAS NOT BEEN PATCHED. REMOTE VERSION : 2014.120.5000.0 SHOULD BE : 2014.120.5203.0" 

Таким образом, конечный результат должен выводить из приведенных выше примеров следующее:

192.168.1.1 \ WINDOWS \ SYSTEM32 \ GPPREF.DLL

192.168.1.2 \ WINDOWS \ SYSTEM32 \ BCRYPT.DLL

192.168.1.3 \ WINDOWS \ SYSTEM32 \ GPPREF.DLL

192.168.1.4 \ ПРОГРАММНЫЕ ФАЙЛЫ \ MICROSOFT SQL SERVER \ MSSQL12.ACT7 \ MSSQL \ BINN \ SQLSERVR.EXE



Мой сценарий до сих пор:

! / Bin / Баш

* если ["$ 1" == ""]; тогда

 echo "No file specified." echo "Usage: nesparse [filename.csv]" 

еще

 cat $1 | tr -d "\n" | tr "\r" "\n" | awk -F '","' '{ print $5,$13 }' | grep "has not been patched." | sort -u | awk '{ match($0,/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*[cC]:\\(.*) has.*/; ip=substr $0,RSTART,RLENGTH);print ipadd ip} ' 

*

Раздел приведенного ниже кода обрабатывает текст в приведенных выше примерах: 5 долларов США печатают IP-адрес и 13 долларов за печать пути к файлу:

! / Bin / Баш

* если ["$ 1" == ""]; тогда

 echo "No file specified." echo "Usage: nesparse [filename.csv]" 

еще

 cat $1 | tr -d "\n" | tr "\r" "\n" | awk -F '","' '{ print $5,$13 }' | 

grep "не был исправлен." | sort -u *

Вторая трубка awk

* awk '{match ($ 0, / ([0-9] +. [0-9] +. [0-9] +. [0-9] +). [cC]: \ (. ) имеет. * / *

имеет правильное регулярное выражение для соответствия требуемому мне выводу (см. рис.), но у меня возникла проблема с печатью вывода regex'd

Что это за линия:

* ip = substr $ 0, RSTART, RLENGTH); print ipadd ip} '*

Бонусная точка:

Регулярное выражение IP соответствует любой цифре, поэтому 192.168.1.1 / 1.1.1.1, но оно также соответствует номерам версий в приведенных выше примерах (2014.120.5203.0). В идеале мне нужно изменить это регулярное выражение: * [0-9] +. [0- 9] +. [0-9] +. [0-9] + *

ограничить его 0.0.0.0 -> 255.255.255.255

  • Список (или перемещение) только файлов с определенным количеством строк?
  • Использование grep с символической ссылкой
  • Как объединить эти два grep-регулярных выражения
  • Рекурсивный поиск не работает для grep on solaris
  • grep: отображать имя файла один раз, затем отображать контекст с номерами строк
  • Perl один вкладыш для поиска слов длиной более 63 символов
  • Как проверить, соответствует ли имя файла шаблону?
  • Выполнять команду в переменной
  • 4 Solutions collect form web for “Мне нужно извлечь IP-адрес и путь к файлу из отчета Nessus, используя текстовый обработчик”

    sed решение:

     sed -E 's/^(([0-9]+\.){3}[0-9]+).*(C:\\.+) *HAS NOT BEEN PATCHED.*/\1 - \3/' reportfile 
      sed -rn '/NOT BEEN PATCHED/ {s/(^\[.*\]).*C:(.*) HAS.*$/\1 - \2/p} ' filename 

    Сосредоточьтесь на записях, которые «NOT BEEN PATCHED», а затем вытащите разделы требуемой строки (в скобках), заменив текст на разделы и два (IP-адрес и имя файла)

    Я предполагаю, что ip-адрес всегда будет в квадратных скобках здесь. Если это не так, вам нужно сопоставить шаблон для IP-адреса.

     $ sed -E -n -e '/ HAS NOT BEEN PATCHED/ { s/^(\[[^]]*\]).*([AZ]:)/\1 - \2/; s/ HAS NOT BEEN PATCHED.*//p}' nessus.log [IP address] - C:\WINDOWS\SYSTEM32\GPPREF.DLL [IP address] - C:\WINDOWS\SYSTEM32\BCRYPT.DLL [IP address] - C:\WINDOWS\SYSTEM32\GPPREF.DLL [IP address] - C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL12.ACT7\MSSQL\BINN\SQLSERVR.EXE 

    Для каждой строки, которая соответствует HAS NOT BEEN PATCHED , HAS NOT BEEN PATCHED все между IP-адресом и буквой первого диска ( [AZ]: HAS NOT BEEN PATCHED . «IP-адрес» определяется как все внутри квадратных скобок в начале строки, которая не является квадратной скобкой ( [^]]* ). Затем HAS NOT BEEN PATCHED все, начиная от HAS NOT BEEN PATCHED до конца строки и напечатайте измененную строку.

    Моя рекомендация заключалась бы в использовании символа табуляции \t в качестве разделителя полей между IP-адресом и именем пути вместо - (пробел, тире, пробел). Это облегчит работу с более поздними версиями.

    В / HAS NOT BEEN.../ regexps включают пробел в начале, чтобы избежать оставления символа пробела на выходе.

    Решение Awk:

     awk '/HAS NOT BEEN PATCHED/ { match($0,/\[.*\]/);ipadd=substr($0,RSTART,RLENGTH);match($0,/C.* HAS/);fle=substr($0,RSTART,RLENGTH-4);print ipadd" - "fle }' filename 

    Совпадение шаблона с «НЕ БЫЛО ПОСМОТРЕТЬ», а затем извлечь ip-адрес и имя файла с помощью функции совпадения awk. Получите подраздел строки, которая связана с IP-адресом и именем файла, используя возвращаемые переменные RSTART и RLENGTH вместе с функцией substr awk. Распечатайте созданные переменные ipadd и fle.

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