AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 45516
In Process
Jeff Atwood
Jeff Atwood
Asked: 2009-07-26 03:19:19 +0800 CST2009-07-26 03:19:19 +0800 CST 2009-07-26 03:19:19 +0800 CST

推荐用于 IIS 监控的 LogParser 查询?

  • 772
锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

随着 Stack Overflow 的增长,我们开始仔细查看我们的 IIS 日志以识别有问题的 HTTP 客户端——比如流氓网络蜘蛛、设置大页面每秒刷新的用户、写得不好的一次性网络爬虫、狡猾的尝试增加页面计数的用户数不胜数,依此类推。

我提出了一些LogParser查询,它们可以帮助我们在指向 IIS 日志文件时识别大多数奇怪和异常情况。

URL 的最高带宽使用率

SELECT top 50 DISTINCT 
SUBSTR(TO_LOWERCASE(cs-uri-stem), 0, 55) AS Url, 
Count(*) AS Hits, 
AVG(sc-bytes) AS AvgBytes, 
SUM(sc-bytes) as ServedBytes 
FROM {filename} 
GROUP BY Url 
HAVING Hits >= 20 
ORDER BY ServedBytes DESC
url 命中 avgbyte 服务
------------------------------------------------- - ---- -------- --------
/favicon.ico 16774 522 8756028
/content/img/search.png 15342 446 6842532

URL 的热门点击

SELECT TOP 100 
cs-uri-stem as Url, 
COUNT(cs-uri-stem) AS Hits 
FROM {filename} 
GROUP BY cs-uri-stem 
ORDER BY COUNT(cs-uri-stem) DESC
网址命中
------------------------------------------------- - ----
/content/img/sf/vote-arrow-down.png 14076
/content/img/sf/vote-arrow-up.png 14018

IP / User-Agent 的最高带宽和点击次数

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
Count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent) 
ORDER BY TotalBytes desc
客户端用户代理totbytes命中
------------- ------------------------------------- -------- --------- -----
66.249.68.47 Mozilla/5.0+(兼容;+Googlebot/2.​​1;135131089 16640
194.90.190.41 omgilibot/0.3++omgili.com 133805857 6447

按 IP / User-Agent 按小时划分的最高带宽

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY sum(sc-bytes) desc
hr 客户端用户代理 totbytes 命中
-- ------------- ----------------------------------- ------ -------- ----
9 194.90.190.41 omgilibot/0.3++omgili.com 30634860 1549
10 194.90.190.41 omgilibot/0.3++omgili.com 29070370 1503

按 IP / User-Agent 按小时计算的热门点击

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
count(*) as Hits, 
Sum(sc-bytes) AS TotalBytes 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY Hits desc
hr 客户端用户代理命中数字节
-- ------------- ----------------------------------- ------ ---- --------
10 194.90.190.41 omgilibot/0.3++omgili.com 1503 29070370
12 66.249.68.47 Mozilla/5.0+(兼容;+Googlebot/2.​​1 1363 13186302

{filename} 当然是 IIS 日志文件的路径,例如

c:\working\sologs\u_ex090708.log

我为良好的 IIS LogParser 查询做了很多网络搜索,但发现的很少。上面的这 5 个,极大地帮助了我们识别严重的问题客户。但我想知道——我们缺少什么?

还有哪些其他方法可以对 IIS 日志进行切片和切块(最好使用 LogParser 查询)来挖掘它们的统计异常?你有在你的服务器上运行的任何好的 IIS LogParser 查询吗?

iis logparser
  • 8 8 个回答
  • 48504 Views

8 个回答

  • Voted
  1. splattne
    2009-07-26T03:47:52+08:002009-07-26T03:47:52+08:00

    黑客活动或其他攻击的一个很好的指标是每小时的错误数。以下脚本返回返回超过 25 个错误代码的日期和时间。根据网站上的流量(以及您的 Web 应用程序的质量 ;-) 调整该值。

    SELECT date as Date, QUANTIZE(time, 3600) AS Hour, 
           sc-status as Status, count(*) AS ErrorCount
    FROM   {filename} 
    WHERE  sc-status >= 400 
    GROUP BY date, hour, sc-status 
    HAVING ErrorCount > 25
    ORDER BY ErrorCount DESC
    

    结果可能是这样的:

    日期小时状态错误计数
    ---------- -------- ------ ------
    2009-07-24 18:00:00 404 187
    2009-07-17 13:00:00 500 99
    2009-07-21 21:00:00 404 80
    2009-07-03 04:00:00 404 45
    ...
    

    下一个查询检测到来自一个 IP 地址的单个 URL 的命中数异常高。在此示例中,我选择了 500,但您可能必须更改边缘情况的查询(例如,不包括 Google London 的 IP 地址 ;-)。)

    SELECT DISTINCT date AS Date, cs-uri-stem AS URL,
          c-ip AS IPAddress, Count(*) AS Hits
    FROM  {filename}
    GROUP BY date, c-ip, cs-uri-stem
    HAVING Hits > 500
    ORDER BY Hits Desc
    
    日期 URL IPAddress 命中
    ---------- ------------------------------------ ----- ---------- ----
    2009-07-24 /Login.aspx 111.222.111.222 1889
    2009-07-12 /AccountUpdate.aspx 11.22.33.44 973
    2009-07-19 /Login.aspx 123.231.132.123 821
    2009-07-21 /Admin.aspx 44.55.66.77 571
    ...
    
    • 19
  2. Adam Brand
    2009-07-26T09:26:09+08:002009-07-26T09:26:09+08:00

    您可以考虑过滤掉合法流量(并扩大范围)的一件事是cs(Cookie)在 IIS 日志中启用,添加一些使用 javascript 设置小 cookie 的代码,然后添加WHERE cs(Cookie)=''.

    由于您的代码很少,每个用户都应该有一个 cookie,除非他们手动禁用 cookie(一小部分人可能会这样做)或者除非该用户实际上是不支持 Javascript 的机器人(例如,wget、httpclient等不支持Javascript)。

    我怀疑如果用户有大量活动,但他们接受 cookie 并启用了 javascript,那么他们更有可能是合法用户,而如果您发现用户有大量活动但不支持 cookie/javascript ,他们更有可能是机器人。

    • 6
  3. James Skemp
    2009-09-11T05:11:26+08:002009-09-11T05:11:26+08:00

    抱歉,还不能评论,所以我不得不回答。

    “按 URL 排列的最高带宽使用情况”查询存在一个小错误。虽然大多数时候你可以接受页面请求并乘以文件大小,但在这种情况下,由于你没有注意任何查询参数,你会遇到一些轻微的问题- 非常不准确的数字。

    要获得更准确的值,只需执行SUM(sc-bytes)而不是MUL(Hits, AvgBytes) as ServedBytes。

    • 6
  4. Christopher_G_Lewis
    2009-10-29T06:12:37+08:002009-10-29T06:12:37+08:00

    Anders Lundström一直在撰写一系列关于常见 LogParser 查询的博客文章。

    我一直在使用这些:

    • LOGPARSER #1:按大小发送的前 10 个图像
    • LOGPARSER #5:前 10 个最慢的 ASPX 页面
    • LOGPARSER #12:排除 500 错误的原因?
    • LOGPARSER #23:从访问您网站的用户那里获取操作系统版本
    • 6
  5. Portman
    2009-08-10T07:07:48+08:002009-08-10T07:07:48+08:00

    这家伙有大约十几个有用的查询:

    http://logparserplus.com/Examples/Queries.aspx

    • 5
  6. dlamblin
    2009-07-31T09:06:50+08:002009-07-31T09:06:50+08:00

    您可能想要查找最长的请求(词干和/或查询),以及服务器接收到的字节数最多的请求。我还会尝试按接收到的字节数和 IP 分组的方法,以便您可以查看是否可能由一个 IP 重复的特定请求格式。

    SELECT TOP 30
    cs-uri-stem,
    cs-uri-query,
    c-ip as Client, 
    SUBSTR(cs(User-Agent), 0, 70) as Agent, 
    cs-bytes,
    c-ip,
    FROM {filename} 
    WHERE cs-uri-stem != '/search'
    ORDER BY LEN(cs-uri-query) desc
    
    SELECT TOP 30
    COUNT(*) AS Hits
    cs-uri-stem,
    cs-uri-query,
    c-ip as Client, 
    SUBSTR(cs(User-Agent), 0, 70) as Agent, 
    cs-bytes,
    c-ip,
    FROM {filename} 
    GROUP BY c-ip, cs(User-Agent), cs-bytes 
    ORDER BY Hits desc
    

    我还会计算一天中一小时一分钟的请求 IP 组的点击次数,或者将请求 IP 与一小时的分钟分组,以查找是否有任何可能是脚本的定期重复访问。这将是对按小时点击数脚本的一个小修改。

    在任何非编程站点上,在日志中搜索 SQL 关键字也是一个好主意,诸如SELECT、UPDATE、和其他奇怪的东西,如DROP、ORing 将它们放在一起并按 IP 计数似乎很方便。对于包括这些在内的大多数网站,这些词很少会出现在 URI 的查询部分中,但在这里它们可能会合法地出现在 URI 词干和数据部分中。我喜欢反转任何点击的 IP,以查看谁在运行预制脚本。我倾向于看到、和。我不是要评判,但从今以后我倾向于阻止它们。在他们的辩护中,这些国家通常人口最多,尽管到目前为止我没有看到太多的说法,或做同样的事情。DELETEFROM sys.tables.ru.br.cz.cn.in.fr.us.au

    SELECT TOP 30
    c-ip as Client, 
    SUBSTR(cs(User-Agent), 0, 70) as Agent, 
    cs-uri-stem,
    LOWER(cs-uri-query) AS q,
    count(*) as Hits,
    SUM(sc-bytes) AS BytesSent,
    SUM(cs-bytes) AS BytesRecv
    FROM {filename} 
    WHERE q like '%select%' OR q like '%sys.tables%' OR etc... 
    GROUP BY c-ip, cs(User-Agent) 
    ORDER BY Hits desc
    

    PS 我无法验证这些查询是否会正确运行。如果需要修复,请自由编辑。

    • 4
  7. GregD
    2009-08-07T12:58:24+08:002009-08-07T12:58:24+08:00

    这些都可以在这里找到(这是解析 IIS 日志文件的绝佳指南,顺便说一句):

    您网站上的 20 个最新文件

    logparser -i:FS "SELECT TOP 20 Path, CreationTime from c:\inetpub\wwwroot*.* ORDER BY CreationTime DESC" -rtp:-1

    Path                                                        CreationTime
    ----------------------------------------------------------- ------------------
    c:\inetpub\wwwroot\Default.asp                              6/22/2003 6:00:01
    c:\inetpub\wwwroot\About.asp                                6/22/2003 6:00:00
    c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
    c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00
    

    20 个最近修改的文件

    logparser -i:FS "SELECT TOP 20 Path, LastWriteTime from c:\inetpub\wwwroot*.* ORDER BY LastWriteTime DESC" -rtp:-1

    Path                                                        LastWriteTime
    ----------------------------------------------------------- ------------------
    c:\inetpub\wwwroot\Default.asp                              6/22/2003 14:00:01
    c:\inetpub\wwwroot\About.asp                                6/22/2003 14:00:00
    c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
    c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00
    

    导致 200 个状态码的文件(以防木马被删除)

    logparser "SELECT DISTINCT TO_LOWERCASE(cs-uri-stem) 作为 URL,Count( ) AS Hits FROM ex .log WHERE sc-status=200 GROUP BY URL ORDER BY URL"-rtp:-1

    URL                                      Hits
    ---------------------------------------- -----
    /About.asp                               122
    /Default.asp                             9823
    /downloads/setup.exe                     701
    /files.zip                               1
    /Products.asp                            8341
    /robots.txt                              2830
    

    显示在一天内访问同一页面超过 50 次的任何 IP 地址

    logparser "SELECT DISTINCT date, c-uri-stem, c-ip, Count( ) AS Hits FROM ex .log GROUP BY date, c-ip, c-uri-stem HAVING HAT>50 ORDER BY Hits Desc" -rtp: -1

    date       cs-uri-stem                         c-ip            Hits
    ---------- ----------------------------------- --------------- ----
    2003-05-19 /Products.asp                       203.195.18.24   281
    2003-06-22 /Products.asp                       210.230.200.54  98
    2003-06-05 /Products.asp                       203.195.18.24   91
    2003-05-07 /Default.asp                        198.132.116.174 74
    
    • 3
  8. BCS
    2009-08-07T11:32:11+08:002009-08-07T11:32:11+08:00

    我不知道如何使用 LogParser 来执行此操作,但查找获取 404 的“phpMyAdmin”(或其他常见漏洞)之类的请求字符串可能是识别脚本攻击的好方法。

    • 0

相关问题

  • 2003 Server企业版不能运行ASP.NET应用程序?

  • 启用集成 Windows 身份验证时,ASP(经典)在哪个帐户下运行?

  • 是否有一种简单的方法可以生成有关 IIS 中“死”文件的报告?

  • IIS 7 中的 URL 重写

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve