
Peço desculpas antecipadamente, pois esta é uma pergunta simples.
Então, estou tentando digitalizar uma Classe C para identificar todos os servidores de e-mail por IP. A grande maioria dos IPs não são servidores de correio. Estou tentando filtrar os que são.
Eu tentei o seguinte, mas eles não retornaram o que eu queria.
nmap -p 25 192.168.15.1-254 | grep report && grep open
e
nmap -p 192.168.15.1-254 (grep report | grep open)
Existe um utilitário diferente que devo usar? Ou é um problema com minha sintaxe?
Responder1
Não está claro para mim, você precisa de strings contendo apenas report ou open? Se sim, use:
grep
:
nmap | grep -E "report|open"
sed
:
nmap | sed '/report\|open/!d'
se reportar e abrir junto
grep
:
nmap | grep report | grep open
sed
:
nmap | sed '/report.*open\|open.*report/!d'
Responder2
Em vez de pós-processar com grep, tente passar a --open
opção para o Nmap. Isso ocultará todas as portas fechadas ou filtradas. Você também pode usar as opções -oG
ou -oA
para gerar resultados "grepáveis". Aqui está um exemplo que faz o que acho que você está procurando:
nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24
Os resultados seriam em smtp-servers-20120607.nmap
, smtp-servers-20120607.gnmap
e smtp-servers-20120607.xml
. Você pode obter endereços IP para servidores SMTP abertos da seguinte forma:
awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap
Se você realmente precisa de tudo isso em um pipeline, você pode fazer assim:
nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'
Responder3
Você precisa de um canal para ambas grep
as invocações:
nmap ... | grep report | grep open
Ou, já que você marcou com awk
, apenas informativamente:
nmap ... | awk '/report/ && /open/'
E sed
:
nmap ... | sed '/report/!d;/open/!d'