跑步: 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计算。
如果有人能帮助我,我们将不胜感激!
答案 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