【问题标题】:Counting POST Attempts in apache log计算 Apache 日志中的 POST 尝试次数
【发布时间】:2015-02-09 01:20:15
【问题描述】:

运行:CentOS 6

我正在尝试按 IP 计算对 PHP 登录页面进行的所有 POST 尝试的计数、总数和排序。基本上,apache 日志将如下所示:

127.0.0.1 - - [10/Dec/2014:12:35:51 -0500] "POST /wp-login.php HTTP/1.0" 200 6520 "-" "-"
127.0.0.1 - - [10/Dec/2014:12:35:51 -0500] "POST /wp-login.php HTTP/1.0" 200 6520 "-" "-"
127.0.0.2 - - [10/Dec/2014:12:35:51 -0500] "POST /wp-login.php HTTP/1.0" 200 6520 "-" "-"

我希望能够发出一个命令,输出每个 IP 尝试 POST 到 /wp-login.php 页面的次数的结果。因此,对于上述 3 条日志,我想发出一个返回类似以下内容的命令:

2 127.0.0.1 /wp-login.php
1 127.0.0.2 /wp-login.php

这告诉我每个唯一 IP 向该特定页面发送 POST 的次数,并且从高到低排序(反之亦然)。

到目前为止,我想出的基本上是打印我需要的结果,但不会“计算”或“排序”它们。这就是我所拥有的:

grep "POST" /var/log/httpd/domains/domain.com.log | grep wp-login.php | awk '{print $1,substr($7,1)}

该命令基本上打印第一列和第七列(截断)。从我一直在阅读和尝试的内容来看,我相信我需要使用 unique -c 和/或 sort 命令,但我似乎无法让它按我的需要工作,因为我假设“日期”正在抛出关闭每个日志的唯一性,所以我得到每个日期每个 IP 的计数。

如果有人能帮我解决这个问题,将不胜感激!

【问题讨论】:

    标签: sorting search awk grep cut


    【解决方案1】:

    尝试这样做:

    $ awk '
        $6 ~ "POST" && $7 ~ "/wp-login\.php"{ips[$1]++}
        END{for (ip in ips) {print ip, ips[ip], "POSTs"}}
    ' /var/log/httpd/domains/domain.com.log
    

    【讨论】:

    • 我不太清楚这是在做什么,但它似乎只返回以下内容:2498POSTs
    • 好吧,做到了!非常感谢。看来我需要深入了解awk
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2012-03-12
    相关资源
    最近更新 更多