Apache日志文件:显示全天候访问我们的IP

时间:2014-10-13 14:20:57

标签: apache awk

在我寻找机器人的过程中,我想找到一种从我们的Apache访问日志中提取IP地址的方法,这些日志在24小时内每小时都有请求。

例如,这将显示一个列表和每个请求/ bla /

的IP请求数
find . -name logfile.*00 -print0 | xargs -0 fgrep -h '"GET /bla/' | awk '{print $NF}' | sort | uniq -c 

会不会有某种awk告诉我一天中的所有时间都有哪些IP?

或者一些可以做同样的免费网络日志分析器。

有关情况的一些信息:

  1. 我们的robot.txt阻止了所有非静态文件,但被大多数滥用者忽略了
  2. 目前我只对某些工具或awk声明感兴趣,它可以为我提供一个全天候访问我们的IP列表,因为普通用户每天会访问我们6-9个小时但来自不同的时区。
  3. 我们已经有几种方法可以检测IP并将IP列入黑名单,但我想知道这些传播是如何在刚开启并且不间断运行的机器人上进行的。
  4. 上面的awk语句提供了

    Req  IP
    3234 111.222.333.444
     234 222.222.333.444
    5234 333.222.333.444
    

    我正在寻找

    IP              Hrs
    111.222.333.444 24
    222.222.333.444 24
    333.222.333.444 24
    

    或更好:

    IP              Hrs Req
    111.222.333.444 24  3234
    222.222.333.444 24   234
    333.222.333.444 24  5234
    

2 个答案:

答案 0 :(得分:0)

我一直建议在http://piwik.org/找到Piwik。它是最好的日志文件分析工具之一,它是免费的!这是一个 优秀的 工具!!

您会发现它无法在24小时内访问。 Google和Bing属于这些类别。你会想要寻找一些东西:

  • 他们是否访问了图片?
  • 他们访问了robots.txt吗?
  • 他们是否以合理的速度访问您的网站?它是人还是机器?
  • 他们是否正在访问正常/合理数量的页面?它是人还是机器?

还有更多因素,但这已经足够了。只需要这些因素,您就可以快速地从机器中快速确定人类。

你不想做的是做太多的假设。例如,抛弃使用任何代理名称作为某种指示的概念。这是垃圾数据。

您需要做的是研究域名和IP地址,并开始了解这些人(缺少更好的术语)是谁。当然有明显的例如Google,Bing,Yandex和百度。有些将是合法的SEO网站,如MOZ,Ahrefs或Open Site Explorer。您可能希望允许访问这些。但是,有很多SEO刮刀网站和内容刮刀网站。你会发现一些来自中国,俄罗斯甚至波兰的访问。这些往往是垃圾。您甚至可能会看到竞争对手使用Screaming Frog来发现您的网站如何与关键字使用情况竞争。当然,让我们不要忘记那些试图构建和破解您网站的脚本小子。当然需要时间来了解谁对我们的网站有益。然而,虐待者的发现永远不会结束。

您希望尽可能远离Web服务器阻止错误访问。这意味着使用硬件防火墙。但如果这不是您的选择,您将需要探索各种软件防火墙选项,并可能使用ModSecurity和其他工具来保护您的站点。当然总有.htaccess文件(假设Apache)。

这是网站管理员必须每天执行的常见做法。这只是事物的现实。如果您不确定IP地址或域名甚至是访问模式,请在此处发布,我会为您评估并尝试帮助。我研究这些东西是我研究的一个较小的主题领域。我并不总是有答案,但大部分时间我都准备好了,当然我总能做一些研究。

答案 1 :(得分:0)

我决定解决这个问题 - 有太多的IP需要处理。 只需24步即可完成此操作,并提取所有文件中的IP。 我得到了额外的奖金,看看他们每天要做多少次请求。

find . -name access_log.*00 -mtime -2 -print0 | xargs -0 zfgrep --no-filename -w "[13" | grep "2014:00" | awk '{print $NF}' | sort | uniq -c > $HOME/unique13_00.txt;
find . -name access_log.*00 -mtime -2 -print0 | xargs -0 zfgrep --no-filename -w "[13" | grep "2014:01" | awk '{print $NF}' | sort | uniq -c > $HOME/unique13_01.txt;
find . -name access_log.*00 -mtime -2 -print0 | xargs -0 zfgrep --no-filename -w "[13" | grep "2014:02" | awk '{print $NF}' | sort | uniq -c > $HOME/unique13_02.txt;
.
.