2016-08-24 4 views
0

greppable Nmapの出力は次のようになります。 IPアドレス、ホスト、ポートステータス(に限ら:IPアドレス、ホスト、ポート番号、ポートステータス、プロトコル、サービス、およびサービスバージョン(存在する場合)のgreppable Nmap出力をどのようにawkまたはgrepしますか?

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を使用して行う方法ですオープンポートのみ)、プロトコル、サービス、およびサービスバージョン(存在する場合)

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を使うのがよいでしょう。 1つのポート情報はカンマ '、'で区切られていることに注意してください。 – Jdamian

答えて

0

あり、この出力を解析するために万人の異なる方法があり、これはおそらくきれいではありませんが、私は、これは動作するはずと信じています。この中

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出力に関する完全な説明があります。彼らはそれがどのように解析されるべきかを説明することさえあるが、私はそれを読む時間がなかったので、ここでこの小さなスクリプトを書いた。 この情報が役立ちますようにお願いいたします。

関連する問題