使用 Awk 在 Bro 日志中搜索在线文本文件中找到的 IP/关键字

使用 Awk 在 Bro 日志中搜索在线文本文件中找到的 IP/关键字

我正在检查 Bro 日志,并希望找到一种使用 AWK 从跟踪器获取 IP 的方法关联并自动在 Bro 日志中搜索这些 IP,将每次匹配的结果打印到[custom-name].txt文件中。

更多信息:

我是 awk 的新手,但试图将事情拼凑在一起。如果有更好的方法来做到这一点,我不感谢 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,如果在http.log中找到链接第2行的IP,则打印结果到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 时,我真的不知道从哪里开始。但是,如果我可以从本地文本文件中提取它,这将为我提供一个工作起点。

答案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): 这就是所谓的流程替代和 是一些 shell(bash、zsh 和 ksh,但也可能是其他 shell)具有的技巧,它使您能够将进程的输出视为另一个命令的输入文件。
  • 因此,片段看到两个“文件”,第一个是命令管道awk的输出,第二个是文件。wgetgrephttp.log
  • NR==FNR{a[$1]=NR; next}: NR 是当前输入行号,FNR相同但不同当前文件。仅当读取第一个文件时,两者才相等。因此,这将创建一个数组,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

请注意,它brobro-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 这样做最终会变得多余。

相关内容