
Ich entschuldige mich im Voraus, da dies eine einfache Frage ist.
Ich versuche also, eine Klasse C zu scannen, um alle Mailserver anhand der IP zu identifizieren. Die überwiegende Mehrheit der IPs sind keine Mailserver. Ich versuche, diejenigen herauszufiltern, die es sind.
Ich habe Folgendes versucht, aber ich habe nicht das bekommen, was ich wollte.
nmap -p 25 192.168.15.1-254 | grep report && grep open
Und
nmap -p 192.168.15.1-254 (grep report | grep open)
Gibt es ein anderes Dienstprogramm, das ich verwenden sollte? Oder liegt das Problem an meiner Syntax?
Antwort1
Mir ist nicht klar, ob Sie Zeichenfolgen benötigen, die nur „report“ oder „open“ enthalten. Wenn ja, verwenden Sie:
grep
:
nmap | grep -E "report|open"
sed
:
nmap | sed '/report\|open/!d'
if melden und gemeinsam öffnen
grep
:
nmap | grep report | grep open
sed
:
nmap | sed '/report.*open\|open.*report/!d'
Antwort2
Anstatt die Nachbearbeitung mit grep durchzuführen, versuchen Sie, die --open
Option an Nmap zu übergeben. Dadurch werden alle geschlossenen oder gefilterten Ports ausgeblendet. Sie können die Optionen -oG
oder -oA
auch verwenden, um „grepbare“ Ergebnisse auszugeben. Hier ist ein Beispiel, das das tut, was Sie meiner Meinung nach suchen:
nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24
Die Ergebnisse würden in smtp-servers-20120607.nmap
, smtp-servers-20120607.gnmap
, und erscheinen smtp-servers-20120607.xml
. Sie können IP-Adressen für offene SMTP-Server wie folgt abrufen:
awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap
Wenn Sie dies wirklich alles in einer Pipeline benötigen, können Sie es folgendermaßen machen:
nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'
Antwort3
Sie benötigen eine Pipe zu beiden grep
Aufrufen:
nmap ... | grep report | grep open
Oder, da Sie mit markiert haben awk
, nur zur Information:
nmap ... | awk '/report/ && /open/'
Und sed
:
nmap ... | sed '/report/!d;/open/!d'