【发布时间】:2011-12-04 02:24:52
【问题描述】:
我的服务器的 CPU 使用率异常高,我可以看到 Apache 使用了太多内存。 我有一种感觉,我正在被一个 IP DOS - 也许你能帮我找到攻击者?
我使用以下行来查找 10 个最“活跃”的 IP:
cat access.log | awk '{print $1}' |sort |uniq -c |sort -n |tail
前 5 个 IP 向服务器发出的请求大约是“普通”用户的 200 倍。但是,我无法确定这 5 个是否只是非常频繁的访问者,或者他们正在攻击服务器。
有没有办法,将上述搜索指定为一个时间间隔,例如。最后两个小时还是今天 10 点到 12 点之间?
干杯!
2011 年 10 月 23 日更新 - 我需要的命令:
获取最近 X 小时内的条目 [这里两个小时]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print Date FS $4}' access.log
在过去 X 小时 [这里两个小时] 内获取最活跃的 IPs
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print $1}' access.log | sort |uniq -c |sort -n | tail
获取相对时间跨度内的条目
awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print Date FS Date2 FS $4}' access.log
获取绝对时间跨度内的条目
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $0}' access.log
在绝对时间跨度内获取最活跃的 IP
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $1}' access.log | sort |uniq -c |sort -n | tail
【问题讨论】:
-
我很懒;我会将日志复制到 Excel 中并创建一个数据透视表...
-
@Ben “现在你有两个问题。”