Ordina gli host tramite porte aperte usando NMap

4

Sono stato incaricato di eseguire una scansione NMap sulla nostra rete aziendale e compilare un elenco di endpoint solo in tempo reale. Il mio problema è come procedere per separare gli host tramite le loro porte aperte (stampante / endpoint). Ad esempio, desidero rimuovere tutte le stampanti / gli host dal file di output nmap (-oN) Corp.txt se la porta 9100 (stampante) è aperta. L'elenco deve inoltre mantenere il nome host / IP in relazione ai numeri di porta e allo stato di apertura.

Di seguito è riportato un esempio del comando che sto eseguendo e il suo output:

nmap -p 80,135,9100 -oN ~/Documents/Corp.txt 10.33.131.1/24

Nmap scan report for itbrn1745.domain.net (10.33.131.13)
Host is up (0.91s latency).
PORT     STATE  SERVICE
80/tcp   closed http
135/tcp  open   msrpc
9100/tcp closed jetdirect


Nmap scan report for itPC.domain.net (10.33.131.37)
Host is up (0.0033s latency).
PORT     STATE    SERVICE
80/tcp   open     http
135/tcp  open     msrpc
9100/tcp filtered jetdirect

Nmap scan report for ap4403.a740 (10.33.131.56)
Host is up (0.0046s latency).
PORT     STATE    SERVICE
80/tcp   open     http
135/tcp  filtered msrpc
9100/tcp open     jetdirect

Qualsiasi consiglio nella logica di compilare un elenco di soli endpoint live sulla rete è molto apprezzato.

    
posta Duck 07.06.2016 - 20:33
fonte

2 risposte

2

Nmap ha formati di output alternativi esattamente per questo motivo. L'output normale ( -oN ) che mostri è solo per la leggibilità umana e non deve essere elaborato con script, poiché è soggetto a modifiche non definite dalla versione alla versione.

I visualizzatori di output Nmap più completi (come Zenmap o ScanHub ) utilizza il formato di output XML ( -oX ), che è il formato leggibile dalla macchina che contiene i risultati completi della scansione, comprese le funzionalità avanzate come gli script NSE e traceroute. Se si intende utilizzare queste funzionalità o espandere la scansione e il reporting oltre le semplici query "tutti gli host con questa porta", l'utilizzo di uno di questi visualizzatori di output o la scrittura personale che utilizza XML sono le opzioni migliori. Esistono librerie per l'analisi dell'XML di Nmap per i linguaggi di programmazione più comuni.

Per domande semplici come questa, puoi anche utilizzare il formato di output Grepable di Nmap (% codice%). In questo modo tutti i dati di scansione della porta per un host su una riga insieme all'IP e al nome host sono tali:

Host: 10.33.131.56 (ap4403.a740)    Ports: 80/open/tcp//http///, 9100/open/tcp//jetdirect///

In questo caso, potresti solo -oG per rimuovere quelle righe.

Durante la scansione, preferisco utilizzare l'opzione "tutte le uscite" ( grep -v ' 9100/open' ) per salvare l'output Normal, XML e Grepable sullo stesso nome file (con -oA , .nmap e .xml estensioni, rispettivamente). In questo modo ho tutti i formati di output nel caso in cui ho bisogno di fare post-processing o voglio fare rapidamente una scansione visiva attraverso l'output.

    
risposta data 07.06.2016 - 21:09
fonte
1

Come menzionato @bonsaiviking, Nmap supporta diversi formati di output e ci sono numerosi strumenti di terze parti che possono aiutarti a lavorare con quei dati. Se vuoi semplicemente analizzare i dati sulla riga di comando per una semplice soluzione fire-and-forget, uno script di shell che usa l'opzione -oG è probabilmente il modo più semplice.

Per darti un'idea, ecco una sveltina che ho trovato in PowerShell per il tuo scenario. (In base al percorso del file nel tuo esempio, sembra che tu stia usando Linux, non il mio strong, ma il concetto generale è abbastanza portabile se comprendi il tuo ambiente operativo e gli strumenti disponibili.)

nmap -p 80,135,9100 -oG - 10.33.131.1/24 | Where-Object -FilterScript {$_.Contains('Ports:') -and !($_.Contains('9100/open/tcp/'))} | Out-File "$env:UserProfile\Documents\Corp.txt"

Nota: quanto sopra non è stato completamente testato. Dovresti eseguire le tue esecuzioni e verifiche di esempio per essere certo che l'output includa tutti i dati desiderati prima di fare affidamento su di esso.

Lo script sopra è abbastanza semplice.

  • La porzione nmap è esattamente la stessa dell'originale, con una modifica. Il formato di output è stato modificato da -oN a -oG e il target di output è stato modificato in - in modo che l'output greppable venga inviato alla console (in cui verrà successivamente reindirizzato tramite la pipeline) anziché a un file.
  • Where-Object ci consente di filtrare una matrice di oggetti in base ai criteri che vogliamo. In questo caso, lo stiamo usando contro l'output greppable di Nmap, che PowerShell memorizza come una matrice di stringhe. L'opzione -FilterScript ci consente di definire uno script PowerShell (che dovrebbe produrre $true o $false , o un valore equivalente) per decidere cosa viene filtrato (solo gli elementi che risolvono in $true saranno inclusi nell'output). Questo script di filtro viene scritto per restituire solo gli elenchi delle porte e solo per gli host che non dispongono di una porta aperta su TCP 9100.
  • Out-File ci consente di prendere l'output di PowerShell e di scaricarlo in un file. Qui, $env:UserProfile viene utilizzato per indirizzare la cartella del profilo dell'utente corrente e il resto specifica "Corp.txt" nell'area "Documenti" dell'utente.
risposta data 07.06.2016 - 22:14
fonte

Leggi altre domande sui tag