Awkを使用して、BroログでオンラインテキストファイルのIP /キーワードを検索します。

Awkを使用して、BroログでオンラインテキストファイルのIP /キーワードを検索します。

Broログをチェックしており、AWKを使用してトラッカーからIPを取得する方法を探しています。協会そして、BroログからこれらのIPを自動的に検索し、各一致結果をファイルに[custom-name].txt印刷します。

追加情報:

私は初めてawkに触れましたが、いくつかを1つにまとめようとしています。これを行うより良い方法がある場合は、awkに感謝しません。効率的であればいいようです。

Excel関数を使用して、間違ったIP列(リンクで定期的に更新されたもの)を非常に長いawk OR文字列に手動でリンクします。

cat http* | awk '/123\.456\.789\.012/ || /2nd IP/ || /3rd IP/' | sort -n > file.txt

現在、http.logには一般的なBroヘッダーがあります... TS UID ID.orig_h ID.orig_pなど。

素人の観点から私がやりたいことは次のとおりです。

ライン1のIPの場合協会http.logで見つかった場合は、line_1_ip.txtに結果を印刷します。 IP 接続ライン 2 が http.log で見つかった場合、結果を line_2_ip.txt に出力します。

IPフラグメントは次のとおりです。

#############################################################################################
# abuse.ch ZeuS IP blocklist "BadIPs" (excluding hijacked sites and free hosting providers) #
#                                                                                           #
# For questions please refer to https://zeustracker.abuse.ch/blocklist.php                  #
#############################################################################################

103.230.84.239
103.241.0.100
103.26.128.84
103.4.52.150
103.7.59.135
104.218.48.99
104.219.232.12
104.236.55.19
107.150.58.84
108.61.193.211

ただテキストファイルです。

実際、IPを抽出するためにリモートWebページを参照するときにどこから始めるべきかわかりません。ただし、ローカルテキストファイルから抽出できる場合は、作業の出発点になります。

答え1

入力形式を見たことがないので、解析したいものが何であるかわかりませんが、IPリストを読んでその出力ファイルに印刷したい場合は、次のことを試すことができます。

awk 'NR==FNR{a[$1]=NR; next} {
    for(ip in a){ 
        if($0~ip){ 
            print >> "line_"a[ip]"_ip.txt" 
        } 
    }
}}' <(wget -O - "https://zeustracker.abuse.ch/blocklist.php?download=badips" 2>/dev/null | 
    grep -Ev "#|^ *$") http.log 

しかし、少し複雑なので、簡単に解いてみましょう。

  • wget -O - https://zeustracker.abuse.ch/blocklist.php?download=badips 2>/dev/null | grep -Ev "#|^ *$":IPリストをダウンロードし、含まれている行または#空白の行を削除し、標準出力に印刷します。
  • <(command):これは…プロセスの交換これは、プロセスの出力を他のコマンドの入力ファイルとして処理できるようにするいくつかのシェル(bash、zsh、kshなど)のトリックです。
  • したがって、フラグメントには2つの「ファイル」が表示されます。 1つ目はawkコマンドパイプの出力、2つ目はファイルです。wgetgrephttp.log
  • NR==FNR{a[$1]=NR; next}:NRは現在の入力ライン番号であり、FNR同じですが異なります。現在のファイル。 2 つは、最初のファイルを読み取る場合にのみ同じです。したがって、aキーがIPで値が現在行番号である配列が生成されます。
  • for(ip in a):配列を繰り返してa各キー(IP)をip
  • if($0~ip){}:この行($0)がこれと一致する場合ip
  • print >> "line_"a[ip]"_ip.txt"line_:そのIPの入力行番号を示すファイルに行を印刷します_ip.txt。これ>>により、ファイルが追加され上書きされなくなります。

答え2

ログファイルからデータをbro抽出します。bro-cut

次のことができます。

bro-cut id.orig_h id.resp_h < conn.log | grep -wFf <(
  curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips' |
  grep '^[^#]'
)

そしてawk

awk '
  NR == FNR {
    if (/^[^#]/) bad[$0]=""
    next
  }
  ($1 in bad) || ($2 in bad)
' <(curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips') \
  <(bro-cut id.orig_h id.resp_h < conn.log)

(ループで厳しい文字列マッチングを実行するのではなく、ハッシュテーブルを使用する方が効率的です。)

さらに、新しい脅威ルールセットには、これらのZeusトラッカーのリスト(および他のリスト)を追跡するルールがあります。したがって、bro-idsに加えて、ルールセットでsnort / surricataを使用している場合、broを使用して実行することは最終的に重複します。

関連情報