2016-08-24 23 views
0

的greppable Nmap的輸出如下所示:對於IP地址,主機,端口號,端口狀態,協議,服務和服務版本(如果有),我該如何awk或grep greppable Nmap輸出?

Host: 9.2.1.100 (hello.world.com)  Status: Up 

Host: 9.2.1.100 (hello.world.com)  Ports: 21/closed/tcp//ftp///, 22/closed/tcp//ssh///, 
23/closed/tcp//telnet///, 25/closed/tcp//smtp///, 80/open/tcp//http//Citrix Metaframe ICA Browser/, 
110/filtered/tcp//pop3///, 139/open/tcp//netbios-ssn//Microsoft Windows netbios-ssn/, 
443/closed/tcp//https///, 445/open/tcp//microsoft-ds//Windows Server 2003 3790 Service Pack 2 microsoft-ds/, 
3389/open/tcp//ms-wbt-server//Microsoft Terminal Service/  Seq Index: 256  IP ID Seq: Incremental 

我的問題是我怎麼用awk或grep來解析輸出,使我得到如下: IP地址,主機,端口狀態(限只有開放端口),協議,服務和服務版本(如果有的話)?

9.2.1.100\thello.world.com\t80\topen\ttcp\thttp\tCitrix Metaframe ICA Browser\n 
9.2.1.100\thello.world.com\t139\topen\ttcp\tnetbios-ssn\tMicrosoft Windows netbios-ssn\n 

...

+0

指出端口列表從字段#5開始,只是從字段#5迭代到最後一個查找字符串'/ open /'。你最好使用'awk'。你必須記住,一個端口信息與下一個端口信息用逗號','分開。 – Jdamian

回答

0

有100萬不同的方式來解析這個輸出,而這可能不是最漂亮的,但我相信這應該工作:

grep 'Ports:' $1 | while read -r line 
do 
    ip=$(echo $line | grep -oP '(?<=^Host:)(\d{1,3}\.){3}\d{1,3}') 
    name=$(echo $line | grep -Po "(?<=^Host: $ip \()[^\)]*") 
    echo "$line" | grep -Po '(?<=\tPorts:)[^\t]*\t' | sed -e 's/, /\n/g' | sed -e 's%/%\t%g' | cut -d/ -f 1-3,5,7 | sed -e "s/^/$ip\t$name\t/g" 
done 
在此

具體的例子是你必須將這段代碼保存到一個文件中,並用包含nmap輸出的文件的名稱作爲參數執行它。 無論如何,here你可以找到關於nmap命令的grepable輸出的完整解釋。他們甚至解釋了它應該如何解析,但我沒有時間閱讀它,所以我只是在這裏寫了這個小腳本。 我希望你會覺得這有幫助。

相關問題