在apache日志中计算POST尝试次数

时间:2014-12-10 18:07:32

标签: sorting search awk grep cut

跑步: 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命令,但我似乎无法让它按照我需要的方式工作,因为我认为“ date“正在抛弃每个日志的唯一性,所以我每个日期都按IP计算。

如果有人能帮助我,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

尝试这样做:

$ 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