Windows IIS日志文件分析程序

时间:2024-03-11 07:13:29 其他范文 收藏本文 下载本文

Windows IIS日志文件分析程序(锦集5篇)由网友“Mr-F”投稿提供,以下是小编精心整理的Windows IIS日志文件分析程序,供大家阅读参考。

Windows IIS日志文件分析程序

篇1:Windows IIS日志文件分析程序

Windows Server具有事件日志记录的功能,其IIS日志文件里记录了包括下列信息:谁访问了您的站点,访问者查看了哪些内容等等,通过定期检查这些日志文件,网站管理员可以检测到服务器或站点的哪些方面易受攻击或存在其他安全隐患。

不过,目前的日志分析工具并不是很完善,有些功能并不具备,特别是针对某个URL地址进行攻击的分析并不多,下面是一个VB Script程序,保存为VBS程序后可以在服务器上运行,用于分析和检测IIS日志里针对某个URL地址进行攻击的IP地址。

“代码开始

targeturl = ”/archives/2761.html“ ”受攻击网站的URL地址。

logfilepath = “C:\LogFiles\W3SVC\ex110813.log” “受攻击网站的日志路径。

On Error Resume Next

Set fileobj = CreateObject(”scripting.filesystemobject“)

Set fileobj2 = CreateObject(”scripting.filesystemobject“)

Set myfile = fileobj2.opentextfile(logfilepath, 1, False)

Do While myfile.atendofstream True

myline = myfile.readline

myline2 = Split(myline, ” “)

newip = myline2(9)

myurl = myline2(5)

If targeturl = myurl Then

writelog newip

End If

Loop

myfile.Close

Set fileobj2 = Nothing

Msgbox ”结束.“

Sub writelog(errmes)

ipfilename = ”blockip.txt“

Set logfile = fileobj.opentextfile(ipfilename, 8, True)

logfile.writeline errmes

logfile.Close

Set logfile = Nothing

End Sub

”代码结束

分析出来的IP如果出现异常,可以通过程序,将其批量添加到IIS的屏蔽IP列表里,下面是网上找到的一段VBScript代码,将其改名为vbs后,把上面那段程序的IP导入,即可批量屏蔽攻击者的IP地址。

“代码开始

”/*=========================================================================

“ * Intro VBScript使用ADSI为IIS批量添加屏蔽或允许访问的IP

” * FileName VBScript-ADSI-IIS-Add-Deny-Grant-IP-Change-MetaBase.xml.vbs

“ *==========================================================================*/

”AddDenyIP2All “192.168.1.106,255.255.255.0”

“AddDenyIP ”123456“,”127.0.0.1“

”AddDenyIP2All “14.113.226.116”

“添加要屏蔽的IP或一组计算机,到一个指定站点上

Sub AddDenyIP(strWebNo, strDenyIp)

On Error Resume Next

Set SecObj = GetObject(”IIS://LocalHost/W3SVC/“ & strWebNo & ”/Root“)

Set MyIPSec = SecObj.IPSecurity

MyIPSec.GrantByDefault = True

IPList = MyIPSec.IPDeny

i = UBound(IPList) + 1

ReDim Preserve IPList(i)

IPList(i) = strDenyIp

MyIPSec.IPDeny = IPList

SecObj.IPSecurity = MyIPSec

SecObj.Setinfo

End Sub

”添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点

“如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点

Sub AddDenyIP2All(strDenyIp)

On Error Resume Next

Set SecObj = GetObject(”IIS://LocalHost/W3SVC“)

Set MyIPSec = SecObj.IPSecurity

MyIPSec.GrantByDefault = True

IPList = MyIPSec.IPDeny

i = UBound(IPList) + 1

ReDim Preserve IPList(i)

IPList(i) = strDenyIp

MyIPSec.IPDeny = IPList

SecObj.IPSecurity = MyIPSec

SecObj.Setinfo

End Sub

”添加允许的IP或一组计算机,到一个指定站点上

Sub AddGrantIP(strWebNo, strGrantIp)

On Error Resume Next

Set SecObj = GetObject(“IIS://LocalHost/W3SVC/” & strWebNo & “/Root”)

Set MyIPSec = SecObj.IPSecurity

MyIPSec.GrantByDefault = False

IPList = MyIPSec.IPGrant

i = UBound(IPList) + 1

ReDim Preserve IPList(i)

IPList(i) = strGrantIp

MyIPSec.IPGrant = IPList

SecObj.IPSecurity = MyIPSec

SecObj.Setinfo

End Sub

“添加允许的IP或一组计算机,到IIS公共配置,以应用到所有站点

”如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点

Sub AddGrantIP2All(strGrantIp)

On Error Resume Next

Set SecObj = GetObject(“IIS://LocalHost/W3SVC”)

Set MyIPSec = SecObj.IPSecurity

MyIPSec.GrantByDefault = False

IPList = MyIPSec.IPGrant

i = UBound(IPList) + 1

ReDim Preserve IPList(i)

IPList(i) = strGrantIp

MyIPSec.IPGrant = IPList

SecObj.IPSecurity = MyIPSec

SecObj.Setinfo

End Sub

“显示IIS公共配置里禁止访问的IP

Sub ListDenyIP()

Set SecObj = GetObject(”IIS://LocalHost/W3SVC“)

Set MyIPSec = SecObj.IPSecurity

IPList = MyIPSec.IPDeny ”IPGrant/IPDeny

WScript.Echo Join(IPList, vbCrLf)

“ For i = 0 To UBound(IPList)

” WScript.Echo i + 1 & “-->” & IPList(i)

“ Next

End Sub

篇2:Windows Vista安装程序日志文件的位置

Windows Vista 安装程序日志文件位于硬盘上的不同位置,这些位置取决于各个安装阶段。本文将介绍在哪里可以找到这些日志文件以及哪些日志文件对于解决每一安装阶段的问题最有用。

下层阶段

下层阶段是在以前的操作系统中运行的 Windows Vista 安装阶段。下表列出了此安装阶段中的重要日志文件。

日志文件说明C:\WINDOWS\setupapi.log包含有关设备更换、驱动程序更改和主要系统更改(例如,Service Pack 安装和修补程序安装)的信息。

注意:此日志文件仅由 Microsoft Windows XP 和早期版本使用。C:\$WINDOWS.~BT\Sources\Panther\setupact.log 包含有关安装过程中的安装操作的信息。C:\$WINDOWS.~BT\Sources\Panther\setuperr.log 包含有关安装过程中的安装错误的信息。C:\$WINDOWS.~BT\Sources\Panther\miglog.xml 包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。C:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。

Windows 预安装环境阶段

Windows 预安装环境(Windows PE 或 WinPE)阶段是在下层阶段结束时重新启动之后或使用 Windows Vista 安装媒体启动计算机时进行的 Windows Vista 安装阶段。下表列出了此安装阶段中的重要日志文件。

日志文件说明X:\$WINDOWS.~BT\Sources\Panther\setupact.log 包含有关安装过程中的安装操作的信息。X:\$WINDOWS.~BT\Sources\Panther\setuperr.log 包含有关安装过程中的安装错误的信息。X:\$WINDOWS.~BT\Sources\Panther\miglog.xml 包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。X:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。C:\$WINDOWS.~BT\Sources\Panther\setupact.log 包含有关安装过程中的安装操作的信息。C:\$WINDOWS.~BT\Sources\Panther\setuperr.log 包含有关安装过程中的安装错误的信息。C:\$WINDOWS.~BT\Sources\Panther\miglog.xml 包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。C:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。

注意:您可能还会在 X:\WINDOWS 目录中看到日志文件。此目录中的 Setupact.log 文件包含有关在 Windows Vista 安装屏幕上选择的初始选项的进度信息。当使用 Windows Vista 安装媒体启动计算机时会出现 Windows Vista 安装屏幕。在 Windows Vista 安装屏幕上单击“立即安装”后,会启动 Setup.exe 文件,并且将不再使用此日志文件。

联机配置阶段

当接收到以下消息时,表示联机配置阶段(第一个启动阶段)开始:

请在 Windows 准备第一次启动时稍等一会。

在此阶段,将安装基本硬件支持。如果是升级安装,则还会迁移数据和程序。下表列出了此安装阶段中的重要日志文件。

日志文件说明C:\WINDOWS\PANTHER\setupact.log包含有关安装过程中的安装操作的信息。C:\WINDOWS\PANTHER\setuperr.log包含有关安装过程中的安装错误的信息,

C:\WINDOWS\PANTHER\miglog.xml包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。C:\WINDOWS\INF\setupapi.dev.log包含有关即插即用设备和驱动程序安装的信息。C:\WINDOWS\INF\setupapi.app.log包含有关应用程序安装的信息。C:\WINDOWS\Panther\PostGatherPnPList.log包含有关联机配置阶段之后系统上捕获的设备的信息。C:\WINDOWS\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。

欢迎使用 Windows 阶段

欢迎使用 Windows 阶段包含以下选项和事件:

?提供可创建用户帐户的选项。?提供可指定计算机名称的选项。?Windows 系统评估工具 (Winsat.exe) 完成性能测试以确定 Windows 体验索引级别。

欢迎使用 Windows 阶段是用户登录之前最后的安装阶段。下表列出了此安装阶段中的重要日志文件。

日志文件说明C:\WINDOWS\PANTHER\setupact.log包含有关安装过程中的安装操作的信息。C:\WINDOWS\PANTHER\setuperr.log包含有关安装过程中的安装错误的信息。C:\WINDOWS\PANTHER\miglog.xml包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。C:\WINDOWS\INF\setupapi.dev.log包含有关即插即用设备和驱动程序安装的信息。C:\WINDOWS\INF\setupapi.app.log包含有关应用程序安装的信息。C:\WINDOWS\Panther\PostGatherPnPList.log包含有关联机配置阶段之后系统上捕获的设备的信息。C:\WINDOWS\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。C:\WINDOWS\Performance\Winsat\winsat.log包含有关 Windows 系统评估工具性能测试结果的信息。

回滚到 Windows XP 阶段

如果 Windows Vista 升级安装失败,并且您已成功将安装回滚到 Windows XP 桌面,则此桌面上会存在几个您可用于故障排除的日志文件。下表列出了此阶段中的重要日志文件。

日志文件说明C:\$WINDOWS.~BT\Sources\Panther\setupact.log 包含有关安装过程中的安装操作的信息。C:\$WINDOWS.~BT\Sources\Panther\miglog.xml 包含有关用户目录结构的信息。此信息包含安全标识符 (SID)。C:\$WINDOWS.~BT\Sources\Panther\setupapi\setupapi.dev.log包含有关即插即用设备和驱动程序安装的信息。C:\$WINDOWS.~BT\Sources\Panther\setupapi\setupapi.app.log包含有关应用程序安装的信息。C:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log包含有关下层阶段期间系统上最初捕获的设备的信息。C:\$WINDOWS.~BT\Sources\Panther\PostGatherPnPList.log包含有关联机配置阶段之后系统上捕获的设备的信息。

这篇文章中的信息适用于:

Windows Vista Business?Windows Vista Enterprise?Windows Vista Home Premium?Windows Vista Home Basic?Windows Vista Ultimate?Windows Vista Business 64-bit edition?Windows Vista Enterprise 64-bit edition?Windows Vista Home Premium 64-bit edition?Windows Vista Home Basic 64-bit edition?Windows Vista Ultimate 64-bit edition

篇3:windows IIS 日志文件如何查看及分析Windows服务器操作系统

本文章来告诉你关于windows IIS 日志文件如何查看及分析,有需要的同学可以参考一下本文章的一些经验之谈,

IIS文件的格式相关的基础知识

IIS 格式是固定的(不能自定义的) ASCII 格式,IIS 格式包括一些基本项目,如用户的 IP 地址、用户名、请求日期和时间、服务状态码和接收的字节数。另外,IIS 格式还包括详细的项目,如所用时间、发送的字节数、动作(例如,GET 命令执行的下载)和目标文件。这些项目用逗号分开,使得格式比使用空格作为分隔符的其他 ASCII 格式更易于阅读。时间记录为本地时间。

举例IIS日志文件:

--------------------------------------------------------------------------------

#Software: Microsoft Internet Information Services 6.0

#Version: 1.0

#Date: -05-18 05:00:51

2007-05-18 07:17:59 W3SVC739 60.28.240.139 GET www.111cn.net - 80 - 66.249.65.67 Mozilla/5.0+(compatible;+Googlebot/2.1;++www.google.com/bot.html) 200 0 0

--------------------------------------------------------------------------------

一、IIS日志格式注解

dateDE: 活动发生的日期。

timeDE: 活动发生的时间。

c-ipDE: 访问服务器的客户端 IP 地址。

cs-username:访问服务器的已验证用户的名称。这不包括用连字符 (-) 表示的匿名用户。

s-sitename: 客户端所访问的该站点的 Internet 服务和实例的号码。

s-computername:生成日志项的服务器名称。

s-ip:生成日志项的服务器的 IP 地址。

s-port:客户端连接到的端口号。

cs-method:客户端试图执行的操作(例如 GET 方法)。

cs-uri-stem:访问的资源;例如 Default.htm。

cs-uri-query:客户端正在尝试执行的查询(如果有)。

sc-status:以 HTTP或FTP术语表示的操作的状态。

sc-win32-status:用 Windows® 使用的术语表示的操作的状态。

sc-bytes:服务器发送的字节数。

cs-bytes:服务器接收的字节数。time-taken:操作花费的时间长短(亳秒)。

cs-version:客户端使用的协议(HTTP,FTP)版本,

对于 HTTP,这将是 HTTP 1.0 或 HTTP 1.1。

cs-host:显示主机头的内容。

cs(User-Agent):在客户端使用的浏览器。

cs(Cookie):发送或接收的 Cookie 的内容(如果有)。

cs(Referer):用户访问的前一个站点。此站点提供到当前站点的链接。

二、【IIS日志定义】

客户端IP地址:提出请求的客户机的 IP 地址。

用户名:访问服务器的已验证用户的名称。这不包括用连字符 (-) 表示的匿名用户。

日期:活动发生的日期。

时间:活动发生的时间。

服务和实例:网站实例显示为 W3SVC#;FTP 站点实例显示为 MSFTPSVC#,其中 # 是站点的实例。

计算机名:服务器的网络基本输入/输出系统 (NetBIOS) 名称。

服务器的 IP 地址:为请求提供服务的服务器的 IP 地址。

所用时间:操作花费的时间长短(亳秒)。

发送字节数:从客户端向服务器发送的字节数。

接收字节:客户端从服务器接收到的字节数。

服务状态码:HTTP 或 FTP 状态码。

Windows 状态码:用 Windows 使用的术语表示的操作的状态。

请求类型:服务器收到的请求类型(例如 GET 和 PASS)。

操作目标:操作目标 URL。

参数:传递给脚本的参数

三、【IIS常用状态码】

1、200 0 64 状态码

64的出现不代表百度要K你,但是64的大量出现确实会带来很大的问题,网络不可达,由于某种原因无法完全打开页面,或者网络不稳定这些原因,导致蜘蛛无法带回页面或者说不抓取该页面。

2、304 0 0

这个返回码代表蜘蛛访问的页面没有更新,和他之前来的时候是一样的,所以看到这个不要担心,蜘蛛来过,只不过你没有更新,所以他也不愿意带走这个页面。

3、404 0 0

这个是代表404页面,但是有个很严重的问题,这个返回码告诉我们,蜘蛛来到了404页面并把他带走了,崩溃~~~~,要是这样的话基本上你要倒霉了,因为你有太多的404,那么蜘蛛就会不断是抓取,不断的带走,这样会造成无数的重复页面,最终导致K站或者降权,正确的返回代码是404 0 64 这就代表蜘蛛没有抓取你这个页面。

4、500错误

500错误是服务器内部错误,是由程序的错误造成的,我不懂程序,但是500错误是会给你减分的,这点基本的逻辑都可以想的到,发现500错误,马上查看是哪个页面的,然后去修正以下错误吧!

5、302

在日志中发现302的返回码也是需要注意的,302为临时重定向,如果你是长期的将这个页面重定向到另一个页面,麻烦你使用301永久重定向,如果是302的话百度蜘蛛下次来还会访问这个页面,这样又会造成复制大量页面的问题,结果肯定是K,所以,抽空检查以下。

【温馨提醒IIS日志一般存放的路径:C:WINDOWSsystem32LogFilesW3SVC1】

篇4:IIS日志文件分析器ReadLogs探秘(五)

意外监控器所使用的CDB命令

(作者:青苹果工作室编译

意外监控器所使用的一些命令在调试的时候是有用的,下面是这些命令及其相关的输出。

Kv 命令

意外监控器运行的第一个命令是Kv 。它显示的是在挑错时刻激活的流的函数调用返回堆栈。读这个堆栈是从底部向顶部:最顶部的函数是调用的最后一个函数,而最底部的函数则是这个流调用的第一个函数。

输出样本(x86平台):

ChildEBP RetAddr Args to Child

00f8fdf8 53d0f7f3 003070ac 00307078 00306d48 0x1000113c [Stdcall: 0]

00f8fe5c 53d0ad45 00306ee4 00f8ff0c 00f8ff4c w3svc!AddFilterResponseHeaders+0x26

00f8ff20 53d01ce6 00f8ff4c 00f8ff68 003154b0 w3svc!HTTP_REQUEST__DoDirList+0x2f7

00f8ff50 53d01f56 00f8ff68 00315478 00315460 w3svc!&127;ole32_NULL_THUNK_DATA+0x96e

00f8ff6c 53d04adb 00000166 00000000 00000001 w3svc!&127;ole32_NULL_THUNK_DATA+0xbde

00f8ff88 539895d0 00315460 00000166 00000000 w3svc!HTTP_REQ_BASE__`vftable+0x1fd3

00f8ffb8 77f04f2c abcdef01 776a2254 00000028 infocomm!AtqPoolThread+0x1c8

00f8ffec 00000000 53989408 abcdef01 00000000 kernel32!BaseThreadStart+0x51

输出样本(alpha平台):

Callee-SP Return-RA Call Site

0815ffc0 77e6f5b8 : ntdll!DbgBreakPoint+0x4

0815ffc0 77e6cc48 : KERNEL32!DebugBreak+0x8

0815ffd0 00000000 : KERNEL32!BaseThreadStart+0x60

函数的调用返回堆栈列出了在给定流中激活的所有函数。意思是函数1调用了函数2,函数2最终又调用了函数3,等等。当最后一个被调用的函数结束了其工作时,它就“展开”,或者说是返回了调用它的那个函数;而那个函数结束后也返回调用它的函数,依次类推。调用返回堆栈列出了什么调用了什么,以及函数正确运行后代码如何返回。因为这个堆栈是故障堆栈,你就可以知道在堆栈顶部列出的函数所发生的访问冲突。但是这不一定说明这个函数引发了实际问题。问题也许是由于另一个函数向堆栈传递了错误的指针,或者甚至于是由一个不同的流引起的。在堆和堆栈冲突中可以看到有关详细内容。

请注意当确认文件没有装载符号,堆栈顶部的命令并不列出调用命令。当堆栈装载到ReadLogs时,通过使用装载的模块的列表,它试图将这个函数调用分解到一个友好的名字中。首先它获得进行调用的内存地址(0x1000113c), 然后寻找拥有这个内存地址的装载的DLL。

!inetdbg.mod

IIS调试器增加到CDB的一个扩展是Inetdbg.dll文件。如果这个文件存在于Windows NT 目录中(或本地调试目录中),这样CDB就可以使用这个命令了。如果在这个扩展命令之前增加一个! 符号,那么CDB就寻找这个DLL,然后将这个命令传递到扩展。这时,你调用Inetdbg 扩展,并在mod命令中传递。这个命令在Inetinfo 内存空间中堆积了所有当前装载的模块的列表,并返回下面的信息(这是一个省略的列表):

输出样本:

Start End Entry Path

01000000 01006000 01001122 C:WINNTSystem32inetsrvinetinfo.exe

77f60000 77fbc000 00000000 C:WINNTSystem32tdll.dll

78000000 78047000 7800546d C:WINNTsystem32MSVCRT.dll

77f00000 77f5e000 77f01000 C:WINNTsystem32KERNEL32.dll

77dc0000 77dfe000 77dc1000 C:WINNTsystem32ADVAPI32.dll

77e70000 77ec1000 77e7a2a2 C:WINNTsystem32USER32.dll

77ed0000 77efc000 00000000 C:WINNTsystem32GDI32.dll

10000000 10024000 10001650 C:InetPubscriptsselfdestruct.dll

如果想要确定是什么代码正在Inetinfo 内存空间运行,这些信息是有用的。在前面的 kv 命令中,你的函数是未分解的。要分解它,你要使用内存地址-―0x1000113c,看它是否在Selfdestruct.dll的起始地址和结束地址范围内。

!inetdbg.ver

Inetdbg 可以使用的另一个扩展是ver 命令。这个命令列出了从装载的DLL中提取出来的所有版本信息。大多数DLL的版本信息都是在实际文件的头部。这个扩展就试图从这里获取这些信息:

输出样本:

Module @ 0x01000000 = inetinfo.exe

dwFileFlags = 0x00000000 (FREE)

CompanyName = Microsoft Corporation

FileDescription = Internet Information Services Application v 1.0

FileVersion = 4.00

InternalName = INETINFO.EXE

LegalCopyright = Copyright (C) Microsoft Corp. 1981-

riginalFilename = INETINFO.EXE

ProductName = Microsoft(R) Windows NT(TM)

Operating System ProductVersion = 4.00

Module @ 0x77f60000 = ntdll.dll

dwFileFlags = 0x00000000 (FREE)

CompanyName = Microsoft Corporation

FileDescription = NT Layer DLL

FileVersion = 4.00

InternalName = ntdll.dll

LegalCopyright = Copyright (C) Microsoft Corp. 1981-1996

riginalFilename = ntdll.dll

ProductName = Microsoft(R) Windows NT(TM)

Operating System ProductVersion = 4.00

在这个例子中,没有列出存在问题的DLL(Selfdestruct.dll),

Inetdbg.mod 不能显示那些不能恢复版本信息的DLL的任何信息。ReadLogs 将 ver 命令中每个条目的文件名与这里的条目相比较,然后将可以得到的版本信息增加到列表中所有的DLL上。如果没有可用的版本信息,ReadLogs 就仅仅增加这样一句话“没有这个DLL的可用的版本信息”。ReadLogs 就是用这个命令的输出来显示版本信息。如果想要确定你是否在运行一个给定DLL的适当版本,这个信息是非常有用的。

注意:在某些运行Windows NT Service Pace (SP) 4的机器上, ver 命令运行是完全失败的。如果希望获取适当的版本信息,可以将这个命令运行两次。这时ReadLogs 就会特意寻找一个没有包含任何错误的输出的版本,并用这个设置来显示版本信息。如果这两次运行都失败了,ReadLogs 就不能显示版本信息了。

~*kb

~*kb命令指示调试器为内存空间上的每个流保存一套堆栈的副本(同kv)。(~ 命令说”选择一个流“; * 命令说 ”所有的流",然后你可以加上你想要对所有流运行的任何命令,这里是 kb)。你可以用这个命令来看看在发生冲突的时候发生了一些别的什么。如果你在排除100%CPU利用率和死锁的故障,也可以使用这个信息。每个堆栈都同kv 堆栈的分析方法相同。

运行调试器,你可以用这个信息排除100%CPU利用率的故障,在你捕捉到流计数器的地方还可以运行一个性能监控器日志。对于一个100%CPU利用率的问题,你可以手动给调试器挑错,然后停止PerfMon 日志。通过分析PerfMon 日志,你就获取了正在使用CPU的流的号码。你还可以在~*kb 命令所列出的有同样号码的流上使用ReadLogs (或手动检查调试日志文件)。这样就告诉你流在做什么并指出“罪犯”是谁。

注意:要捕捉流的输出,你必须使用PerfMon 的日志功能,要等到100%利用率发生才能起动日志。仅仅在图表中看看流会得到错误的流号码。

u eip-50 eip+20 (只在x86平台)

这个u命令指示调试器显示存在于提供的地址范围内的汇编代码。这时你是在请求从扩展指令指针(EIP)寄存器所指向的50个字节之前到EIP指向的20个字节之后的那些代码。EIP寄存器通常指向要执行的代码的下一行。你可以看到在冲突发生时代码在做些什么。

输出样本(缩略):

ntdll!RtlpWaitForCriticalSection+0x45:

77f6cc16 0000 add [eax],al

77f6cc18 008b0d805afa add [ebx+0xfa5a800d],cl

77f6cc1e 7739 ja ntdll!RtlpWaitForCriticalSection+0x88 (77f6cc59)

77f6cc20 48 dec eax

77f6cc21 2475 and al,0x75

77f6cc23 2333 and esi,[ebx]

77f6cc25 c0894604894608 ror byte ptr [ecx+0x46890446],0x8

77f6cc2c 89460c mov [esi+0xc],eax

77f6cc2f 894610 mov [esi+0x10],eax

!locks

这个!locks 命令显示的信息是关于当前运行代码的哪个部分被标记为关键部分(CS)。有关CS的详细讨论可以看理解锁那部分。

输出样本:

CritSec w3svc!MDIDMappingTable+100 at 68c2b1b0

LockCount 0

RecursionCount 1

OwningThread 156

EntryCount 0

ContentionCount 0

*** Locked

!inetdbg.atq Cg

这个atq 命令显示的信息与IIS非同步流排队有关。流排队是IIS特有的功能。当一个新的请求进入IIS时,它就需要处理一个流。由于创建一个流从时间和CPU使用的方面来说是比较昂贵的,因此IIS保持着一套随时处理引入的请求的工作流;IIS则管

篇5:IIS日志文件分析器ReadLogs探秘(三)

理解Windows NT 和Windows NT调试器

(作者:青苹果工作室编译 2001年01月12日 15:21)

意外监控器的基础是称为Cdb.exe的Windows NT调试器,作为一个用户级的调试器,意外监控器可以调试用户模式程序而不是核心模式程序。CDB是通过查找某种访问冲突工作的。当发生冲突时,Windows NT就生成一个标记,这个标记激活调试器并暂停调试器所隶属的程序。因为程序暂停了,系统为程序保留全部的内存空间,保留的状态与发生冲突时的状态一样。这个功能允许我们运行来自CDB的命令,这些命令将来自内存的某些信息堆积到日志中。

图6:CDB程序

程序、流及其它内在材料

因为这个文档包含了许多关于程序、流以及堆栈的参考内容,因此在文中包括这些内容的一些入门知识是适当的。另外,有关这些内容的详细信息可以在以下出版物中找到:

●Window 应用程序编程, 第四版,作者是Jeffrey Richter (Microsoft 出版社)。

●Windows NT 内幕, 第二版,作者是David Solomon (Microsoft 出版社)。

一个程序通常就解释为“一个运行程序的一个例示”。一个流则是“一个程序执行中的一条路”。这些简单的术语建立起了Windows NT 如何操作的概念。一个程序起动,创建在任务管理器中列出的程序。在这个程序内部,有一个或多个流,它们执行产生应用程序的所有代码。完成工作、访问内存、产生程序的输出,这些都是由流完成的。Windows NT 是一个多任务、多流的操作系统。因此,它可以在同一时间运行多个应用程序,而每个应用程序都可以在同一时间处理多个任务。Windows NT是通过在所有的活动流中分割CPU时间并且给每个流一个“时间片段”来完成以上任务的。考虑一下这种情况,你就会发现在任意给定时间,在任意给定处理器上只有一个流在运行。时间片段非常短,因此这些流好象是在同步运行,而实际上并不是这样。这就使调试变得简单,因为如果发生了一个问题,那就是当前正在运行的流产生的。进一步地研究就会发现,这并不能担保这个有过失的流就是罪魁祸首。它也许是另一个流的牺牲品(请看堆和堆栈故障部分)。

这个文档中并没有提到Windows NT 是如何管理流的执行的(有关这个话题的讨论可以看上面列出的书目)。但是流可以由于某些原因而自愿放弃一些属于它们的时间,包括它们也许正在等待来自另一个流或用户的一些信息。在这些情况下,你就能看到对堆栈的调用,如:

●WaitForSingleObject

●WaitForMultipleObject

●WaitForCriticalSection

●Sleep

●SleepEx

所有这些调用只不过意味着进行这些调用的流想要走开一下,在它继续工作之前要等待一些时间的发生。当可以继续处理的时候,Windows NT 会将这些流唤醒。

内存

这部分描述在程序中内存的基本用法。记住在Windows NT 中,每个程序都有4GB的虚拟可寻址内存,而其中有2GB是系统内存。系统内存是共享的(意思是只有一套,由所有的程序所共用)。下表概括了在Windows NT 4.0中,内存空间是如何为所有用户模式程序所映射的。

注意:这种映射不一定适用于Windows NT 企业版。Windows NT 企业版可以有3GB的用户内存和1GB的系统内存。

范围(十六进制)空间大小功能0 to FFFF64 kilobytes (KB)禁止访问区10000 to 7FFEFFFF2 GB 192 KB私用程序地址空间7FFDE000 to 7FFFFFFF136 KB为不同Windows NT 函数预留80000000 to FFFFFFFF2 GB系统内存

虚拟可寻址内存

正如前面所提到的,Windows NT 给每个程序4GB的内存,

但是对于那些只有64MB的实际内存(甚至于更少)而运行Windows NT 的系统来说,这怎么可能呢?是这样的,程序有4GB的虚拟地址内存,不一定使用全部的4GB。要理解Windows NT 是如何做到的,首先看看基本的编程概念。

在早期的DOS程序中,程序在其中运行的内存空间数量是一个令人担心的问题。而且,工业上为不同型号的机器建立了不同版本的程序。其它问题包括程序是否使用了扩展的或扩充的内存以及额外内存是否足够。通过允许Windows NT 将虚拟地址空间设置成4GB,现在所有的程序都在平面内存模式下运行。现在你不必再为如何编译程序而担心。只需要让Windows NT 将虚拟地址的调用转换成物理地址即可。

当你调试一个用户模式应用程序时,你不必介意转换中发生了什么,因为调试器所显示的所有内存就象程序所看到的一样--在虚拟内存地址空间。记住了这一条,我们就来看看Windows NT 内存布局的一个简单例子。

内存空间布局

当Windows NT 上的一个程序起动时,系统就建立起内存空间,然后在这个空间中编排内存的位置。Windows NT 编排内存的方式要依应用程序而定,但是对于所有的程序而言也有统一的规则。在一个程序的内存中有4部分:

图7:内存空间布局

●内存数据部分(绿色)包含应用程序所使用的数据和变量。每当程序执行一个命令malloc那样的命令,Windows NT 就在堆内部给这个应用程序一定的空间,允许应用程序按照自己的需要来使用这些空间。然后应用程序读内存、向内存写入或在结束时将其返回堆(也就是所谓的释放内存)。在虚拟内存和堆部分有更详细的讨论。

●内存的代码部分(兰色)包含了应用程序的实际命令和指令。在程序装载时,Windows NT 分配这部分内存。为了保护程序的完整性,Windows NT 把这部分内存标为只读/执行。在理解DLL部分有关于代码装载及其对调试的影响的讨论。

●内存的堆栈部分(黄色)包含着程序执行的“路标”。程序是由组件(或模块)组成的,而这些模块是由函数组成的。函数可以接收输入(称为自变量或参数),也可以返回结果(称为返回值)。为了让程序跟踪它到了哪里(哪个函数调用了什么)和传递过来了哪些值,程序使用一个后进先出列表(LIFO),这就称为堆栈。在解剖堆栈部分有关于堆栈以及如何阅读堆栈的讨论。

●内存的未用部分(灰色)不属于前面三种的范畴。因为Windows NT 在使用内存方面是动态的,因此随着程序使用和释放内存,这部分内存增长或收缩。

虚拟内存和堆

Windows NT允许程序使用和存储内存,它使用两种方法--堆 和虚拟分配内存(第三种方法内存映射文件不在本文讨论范围之内)。堆 指Windows NT 为一个应用程序预留并允许你使用的内存。堆通常适用于大量的小片数据的情况,而虚拟分配内存则是一个程序专门为它自己保留的内存。通常它用来保存大块的数据。这两种内存分配的其它区别在于:

●虚拟分配内存可以在程序之间共享,允许内存作为共享数据的一种方法。而堆 内存则不能共享。

●性能监控器中的私用字节计数器不显示共享的内存,这不一定是当前使用的内存的实际大小。

●Windows NT生成一个1MB的默认堆,当它需要较大的空间时,Windows NT 自动调节堆的大小。而增加虚拟分配内存则是由应用程序负责的。

要查看程序内存的布局,可以使用Windows NT 资源工具箱中的PViewer.exe来获取详细的分析。

理解DLL

DLL为Windows 的功能和速度提供了核心的解释。使用DLL的概念非常简单。一个库是一个程序可能要用到的一套程序,库中通常包含着许多程序都会用到的公共程序。建立一个库并将它包含在程序中,这样就不用每次用到时都重新写这些程序。要使用库中的程序,就必须将它连接到程序,在开发阶段这是经常发生的。这个方法有一个缺点就是每个程序都需要这个库的一个副本,这是用来快速地定制内存和磁盘空间的。Windows 解决这个问题的方法是允许在运行时间(应用程序执行的时候)将库连接到应用程序。通过允许多个不同的应用程序共享同一个DLL,Windows 就获取了更高的效率。即使有5个应用程序可能要用到这个DLL,也只需要在内存中装载一个副本。

网络入侵检测方法

局域网监控的专业工具:Netrobocop

网络读者访问流量统计分析的论文

WIN技巧:如何保证文件传输服务器FTP的安全

SVG网页设计软件实现分析论文

电子审计轨迹分析的论文

响应承诺书

WIN技巧:内网用户建个人服务器很简单

《文件的查找与创建快捷方式》课件

操作系统实习报告

Windows IIS日志文件分析程序
《Windows IIS日志文件分析程序.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【Windows IIS日志文件分析程序(锦集5篇)】相关文章:

入侵后的3个重要痕迹清理2024-02-23

调优日志切换(Tuning Log Switches)数据库教程2022-04-30

python自定义解析简单xml格式文件的方法2022-05-07

如何入侵FBI核心网络2023-04-24

闭上眼睛,清理你的心2022-05-07

网络安全的应急预案2023-07-23

详解SQL Server中数据库快照工作原理综合教程2023-07-05

win 安装 sqlserver 的方法数据库教程2022-05-14

高枕无忧免费端口监控软件PortReporter2022-04-30

网络层安全服务与攻击分析2023-12-10