O nmap pode exibir apenas hosts com portas específicas abertas?

13

Pode nmap listar todos os hosts na rede local que tenham SSH e HTTP abertos? Para fazer isso, posso executar algo como:

nmap 192.168.1.1-254 -p22,80 --open

No entanto, isso lista os hosts que possuem QUALQUER uma das portas de lista abertas, enquanto eu gostaria que os hosts tenham TODAS as portas abertas. Além disso, a saída é bastante detalhada:

# nmap 192.168.1.1-254 -p22,80 --open

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds

O que estou procurando é uma saída como:

192.168.1.16

como o host acima é o único com TODAS as portas abertas.

Eu certamente posso pós-processar a saída, mas eu não quero depender do formato de saída do nmap, eu prefiro que o nmap faça isso, se houver uma maneira.

    
por Brian 31.12.2015 / 16:20

3 respostas

7

Não há uma maneira de fazer isso dentro do Nmap, mas seu comentário sobre não querer "confiar no formato de saída do nmap" me permite apontar que o Nmap tem dois formatos de saída estáveis para análise legível por máquina. A mais antiga é a saída Grepable ( -oG ) , que funciona bem para processamento com perl, awk e grep, mas faltam algumas das saídas mais avançadas (como saída de script NSE, razões de porta, traceroute, etc.). O formato mais completo é saída XML ( -oX ) , mas pode ser um exagero para o seu fins.

Você pode salvar essas saídas em arquivos com -oG , -oX ou -oA (ambos os formatos mais a saída de texto "normal") ou enviar um direto para stdout: nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

    
por 31.12.2015 / 17:48
2

Considere também este awk one-liner:

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

Ele imprimirá todos os hosts com todas as portas abertas especificadas como esta:

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt
    
por 22.07.2017 / 19:43
0

Experimente: nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

Isso fará a varredura de suas portas em seu alcance e canalizará a saída em formato greppable procurando por portas abertas, em seguida, imprimirá os endereços IP que se encaixam em qualquer um desses critérios.

    
por 13.12.2018 / 01:14