
Заранее прошу прощения, так как вопрос простой.
Итак, я пытаюсь просканировать класс 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'