Usando expressões regulares para analisar endereços IP de logs

0

Eu tenho uma grande varredura nmap contendo um número de logs. Estou tentando transformar isso em uma lista de apenas ip's.

Quando executo meu comando, recebo feedback como o seguinte:

Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2017-03-17 21:27 EDT
Nmap scan report for 10.10.1.22
Host is up (0.13s latency).
PORT   STATE SERVICE
25/tcp open  smtp
MAC Address: 00:50:56:89:7C:D5 (VMware)

Nmap scan report for 10.0.1.72
Host is up (0.22s latency).
PORT   STATE SERVICE
25/tcp open  smtp
MAC Address: 00:50:56:89:55:06 (VMware)

Estou tentando recuperar apenas uma lista de ip's usando o seguinte:

nmap -n -p 25 10.11.1.1-254 --open | grep '\d{1,3}\.\d{1,3}\.\d\.\d{1,3}'

E também tentei uma correspondência do awk:

nmap -n -p 25 10.11.1.1-254 --open | awk '/\d{1,3}\.\d{1,3}\.\d\.\d{1,3}/ { print $0 } '

Nenhum resultado é retornado, apesar de poder ver uma saída quando removo tudo à direita do meu canal e também é possível filtrar corretamente os ip's com a regex no meu bloco de notas.

Qual conhecimento eu estou sentindo falta?

    
por Michael A 18.03.2017 / 03:09

2 respostas

2

Você começa a usar o formato de saída adequado para o Nmap para esse tipo de coisa. A opção de saída Grepable do Nmap ( -oG ) produz resultados em um formato fácil de analisar é consistente entre as versões, ao contrário da saída normal "legível". Veja como obter a lista de todos os sistemas com a porta 25 aberta:

nmap -p 25 --open 10.11.1.1-254 -oG - | awk '/^Host/{print $2}'

O Nmap produzirá uma linha como esta:

Host: 64.13.134.52 (scanme.nmap.org)    Ports: 25/open/tcp//smtp///

E o comando awk combinará com base na linha "Host" começando e imprimirá o segundo campo, o endereço IP.

    
por 18.03.2017 / 05:09
2

\d é uma extensão de expressão regular compatível com perl (PRCE): sua versão de grep pode suportar isso com a opção -P

grep -P '\d{1,3}\.\d{1,3}\.\d\.\d{1,3}'

Caso contrário, você pode usar [0-9] para dígitos decimais; no entanto, observe que as chaves são literais em expressões regulares básicas, portanto, você precisa do modo estendido -E ou deve ignorá-las

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]\.[0-9]{1,3}'

ou

grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}'
    
por 18.03.2017 / 03:17