nmap出力をgrepする方法は?

nmap出力をgrepする方法は?

私は巨大なscan.gnmapファイルを持っています:

Host: 1.1.1.1 ()    Status: Up
Host: 1.1.1.1 ()    Ports: 80/open/tcp//http//nginx/, 443/open/tcp//ssl|http//nginx/    Ignored State: filtered (4998)
Host: 2.2.2.2 (foo.com) Status: Up
Host: 2.2.2.2 (foo.com) Ports: 80/open/tcp//http//awselb|2.0/, 443/open/tcp//ssl|http//Apache httpd 2.4.41 (() PHP|5.3.29)/ Ignored State: filtered (4998)
Host: 3.3.3.3 (bar.com) Status: Up
Host: 3.3.3.3 (bar.com) Ports: 25/open/tcp//smtp?///    Ignored State: filtered (4999)
Host: 4.4.4.4 ()    Status: Up
Host: 4.4.4.4 ()    Ports: 80/open/tcp//http//Microsoft-Azure-Application-Gateway|v2/, 443/open/tcp//ssl|https//Microsoft-Azure-Application-Gateway|v2/ Ignored State: filtered (4998)
Host: 5.5.5.5 (foobar.com)  Status: Up
Host: 5.5.5.5 (foobar.com)  Ports: 80/open/tcp//http?///, 443/open/tcp//ssl|https?///   Ignored State: filtered (4998)
Host: 6.6.6.6 ()    Status: Up
Host: 6.6.6.6 ()    Ports: 80/open/tcp//http//Microsoft IIS httpd 10.0/, 443/open/tcp//ssl|http//Microsoft IIS httpd 10.0/, 454/open/tcp//ssl|upnp//Microsoft IIS httpd/, 1221/open/tcp//http//Microsoft HTTPAPI httpd 2.0 (SSDP|UPnP)/, 4022/open/tcp//dnox?///, 4024/open/tcp//tnp1-port?///, 7654/open/tcp//unknown///   Ignored State: filtered (4993)

ポート番号の追加中にすべてのHTTPサービス(ポート1221、454、および443のサービスを含む)を抽出しようとしましたが、失敗しました。

$ awk '/open/{print $2" "$5}' scan.gnmap | sed -e 's/\// /g' | awk '/http/{print $1":"$2}'

1.1.1.1:80
2.2.2.2:80
4.4.4.4:80
5.5.5.5:80
6.6.6.6:80

すべてのHTTPホスト:ポートの組み合わせを抽出する最も簡単な方法は何ですか?

ベストアンサー1

POSIX awk を使用した要件の可能な説明は次のとおりです。

$ cat tst.awk
BEGIN { OFS=":" }
{ ip = $2 }
sub(/^([^[:space:]]+[[:space:]]+){3}Ports:[[:space:]]+/,"") {
    n = split($0,f,/\/[^,]+(,[[:space:]]*|[[:space:]]*$)/)
    for (i=1; i<n; i++) {
        port = f[i]
        if ( !seen[ip,port]++ ) {
            print ip, port
        }
    }
}

$ awk -f tst.awk file
1.1.1.1:80
1.1.1.1:443
2.2.2.2:80
2.2.2.2:443
3.3.3.3:25
4.4.4.4:80
4.4.4.4:443
5.5.5.5:80
5.5.5.5:443
6.6.6.6:80
6.6.6.6:443
6.6.6.6:454
6.6.6.6:1221
6.6.6.6:4022
6.6.6.6:4024
6.6.6.6:7654

awkが文字クラスをサポートしておらず、POSIXと互換性がない場合は、すべてをおよびに[[:space:]]変更してください[ \t][^[:space:]][^ \t]

おすすめ記事