ネットワークログファイルで一致するオープンポートの数を計算する

ネットワークログファイルで一致するオープンポートの数を計算する

次のウェブログファイルがあります。

Nmap scan report for 192.168.1.51
Host is up.
PORT     STATE    SERVICE
80/tcp   open     http
443/tcp  open     https
8080/tcp open     http-proxy
443/tcp  open     https
8080/tcp open     http-proxy
8082/tcp filtered redcap
8083/tcp filtered https-alt

Nmap scan report for 192.168.1.201
Host is up.
PORT     STATE    SERVICE
80/tcp   open   http
443/tcp  filtered https
8281/tcp filtered http-proxy
8080/tcp open     sedan
8801/tcp filtered https-alt

Nmap scan report for 192.168.1.17
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   http
443/tcp  closed https
9081/tcp open      ecan

Nmap scan report for 192.168.1.10
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   ftp
443/tcp  open   https
9081/tcp open      standard

IPアドレスとIPアドレスごとに開いているポート数を抽出したいので、結果は次のようになります。

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1

ベストアンサー1

awk解決策:

awk 'BEGIN{RS=""; FS="\n"} 
    {split($1,a," "); host[a[5]] = 0; for (i=1; i<=NF; i++) if (match($i,"open") != 0) 
        host[a[5]]++} END{for (each in host) print each " - " host[each]}' file

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1

このコマンドでは、レコード区切り文字はRS空行に設定され、“”フィールド区切り文字は改行文字に設定されます\n。次に、awk各レコードの最初の行を分割し、IPアドレスに関連付けられた分割配列の5番目のエントリをキャプチャします。次に、Awk残りのフィールドを繰り返して、NF各フィールドで「open」文字列を見つけます。存在する場合は、openホストアレイの関連付けられたIPアドレスに対して計算されます。最後にawk結果を印刷します。

おすすめ記事