Выделение нескольких строк из вывода Nmap

Выделение нескольких строк из вывода Nmap

Заранее прошу прощения, так как вопрос простой.

Итак, я пытаюсь просканировать класс C, чтобы идентифицировать все почтовые серверы по IP. Подавляющее большинство IP-адресов не являются почтовыми серверами. Я пытаюсь отфильтровать те, которые являются таковыми.

Я попробовал следующее, но они не вернули то, что я хотел.

nmap -p 25 192.168.15.1-254 | grep report && grep open 

и

nmap -p 192.168.15.1-254 (grep report | grep open)

Есть ли другая утилита, которую мне следует использовать? Или это проблема с моим синтаксисом?

решение1

Мне не ясно, вам нужны строки, содержащие только report или open? Если так, используйте: grep:

nmap | grep -E "report|open"

sed:

nmap | sed '/report\|open/!d'

если отчет и открыть вместе

grep:

nmap | grep report | grep open

sed:

nmap | sed '/report.*open\|open.*report/!d'

решение2

Вместо постобработки с помощью grep попробуйте передать --openопцию Nmap. Это скроет все закрытые или отфильтрованные порты. Вы также можете использовать опции -oGили -oAдля вывода результатов, поддающихся "grepable". Вот пример, который, как я думаю, делает то, что вы ищете:

nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24

Результаты будут в smtp-servers-20120607.nmap, smtp-servers-20120607.gnmap, и smtp-servers-20120607.xml. Вы можете получить IP-адреса для открытых SMTP-серверов следующим образом:

awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap

Если вам действительно нужно все это в одном конвейере, вы можете сделать это следующим образом:

nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'

решение3

Вам понадобится труба для обоих grepвызовов:

nmap ... | grep report | grep open

Или, поскольку вы отметили тегом awk, просто для информации:

nmap ... | awk '/report/ && /open/'

И sed:

nmap ... | sed '/report/!d;/open/!d'

Связанный контент