1.LogParser是什么?
官方文档解释:log Parser是一款功能强大的多功能工具,可提供对基于文本的数据(例如日志文件,XML文件和CSV文件)以及Windows®操作系统上的关键数据源(例如事件日志,注册表, 文件系统和ActiveDirectory®的查询以及输出。
您可以告诉Log Parser所需的信息以及处理方式。 查询结果可以在基于文本的自定义格式中输出,也可以持久保存到SQL,SYSLOG或图表等更特殊的目标中。
2.LogParser的组成部分
日志解析器由三个组件组成:输入格式,类似SQL的核心查询引擎,输出格式
输入格式:是通用日志或记录提供者;日志等同于SQL表中的行,并且输入格式可以认为是包含要处理的数据的SQL表。
Log Parser的内置输入格式文件可以从以下数据中检索或处理指定数据:
- IIS日志文件(W3C,IIS,NCSA,集中式二进制日志,HTTP错误日志,URLScan日志,ODBC日志)
- Windows事件日志
- 通用XML,CSV,TSV和W3C-格式化的文本文件(例如,Exchange跟踪日志文件,个人防火墙日志文件,WindowsMedia®Services日志文件,FTP日志文件,SMTP日志文件等)
- Windows注册表
- 活动目录对象
- 文件和目录信息
- NetMon .cap捕获文件
- 扩展/合并的NCSA日志文件
- ETW痕迹
- 自定义插件(通过公共COM界面)
类似SQL的核心引擎:使用包含通用SQL语句(SELECT,WHERE,GROUP BY,HAVING,ORDER BY),聚合函数(SUM,COUNT,AVG, MAX,MIN)和丰富的功能集(例如SUBSTR,CASE,COALESCE,REVERSEDNS等)
输出格式: 它们可以被视为接收数据处理结果的SQL表。
Log Parser的内置输出格式可以:
- 将数据以不同格式(CSV,TSV,XML,W3C,用户定义的等)写入文本文件
- 将数据显示到控制台或屏幕
- 创建图表并将其保存为GIF或JPG图像文件
- 将数据发送到SYSLOG服务器
- 将数据发送到SQL数据库
3.常用输入格式
- Windows事件日志
- IIS日志文件
- Windows注册表
- XML,CSV等数据文件格式
(1)Windows事件日志EVT 文件格式字段:
EVT输入格式生成的输入记录包含以下15列:
Name | Type | Description |
EventLog | STRING | Name of the Event Log or Event Log backup file containing this event |
RecordNumber | INTEGER | Index of this event in the Event Log or Event Log backup file containing this event |
TimeGenerated | TIMESTAMP | The date and time at which the event was generated (local time) (日志产生事件) |
TimeWritten | TIMESTAMP | The date and time at which the event was logged (local time) (日志记录事件) |
EventID | INTEGER | The ID of the event (事件ID) |
EventType | INTEGER | The numeric type of the event (事件类型号) |
EventTypeName | STRING | The descriptive type of the event (事件类型名) |
EventCategory | INTEGER | The numeric category of the event |
EventCategoryName | STRING | The descriptive category of the event |
SourceName | STRING | The source that generated the event ( 源名称) |
Strings | STRING | The textual data associated with the event (文本数据集) |
ComputerName | STRING | The name of the computer on which the event was generated (生成日志的计算机名称) |
SID | STRING | The Security Identifier associated with the event SID(安全ID) |
Message | STRING | The full event message (全文消息) |
Data | STRING | The binary data associated with the event |
(2)IIS 日志格式字段
IIS生成的日志文件记录包含以下列:
Name | Type | Description |
LogFilename | STRING | Full path of the log file containing this entry |
LogRow | INTEGER | Line in the log file containing this entry |
UserIP | STRING | The IP address of the client that made the request |
UserName | STRING | The name of the authenticated user that made the request, or NULL if the request was from an anonymous user |
Date | TIMESTAMP | The date on which the request was served (local time) |
Time | TIMESTAMP | The time at which the request was served (local time) |
ServiceInstance | STRING | The IIS service name and site instance number that served the request |
HostName | STRING | The name of the server that served the request |
ServerIP | STRING | The IP address of the server that served the request |
TimeTaken | INTEGER | The number of milliseconds elapsed since the moment the server received the request to the moment the server sent the last response chunk to the client |
BytesSent | INTEGER | The number of bytes in the request sent by the client |
BytesReceived | INTEGER | The number of bytes in the response sent by the server |
StatusCode | INTEGER | The response HTTP or FTP status code |
Win32StatusCode | INTEGER | The Windows status code associated with the response HTTP or FTP status code |
RequestType | STRING | The HTTP request verb or FTP operation |
Target | STRING | The HTTP request uri-stem or FTP operation target |
Parameters | STRING | The HTTP request uri-query, or NULL if the requested URI did not include a uri-query |
4.Windows登录类型
安全日志登录部分的事件 ID 和登录类型代码都具有一定含义:
(1)事件 ID(Event ID)
Event ID(2000/XP/2003) | Event ID(Vista/7/8/2008/2012) | 描述 |
528 | 4624 | 成功登录 |
529 | 4625 | 失败登录 |
680 | 4776 | 成功/失败的账户认证 |
624 | 4720 | 创建用户 |
636 | 4732 | 添加用户到启用安全性的本地组中 |
632 | 4728 | 添加用户到启用安全性的全局组中 |
2934 | 7030 | 服务创建错误 |
2944 | 7040 | IPSEC服务服务的启动类型已从禁用更改为自动启动 |
2949 | 7045 | 服务创建 |
(2)事件类型(EventType)
登录类型 | 登录类型 | 描述 |
2 | Interactive | 用户登录到本机 |
3 | Network | 用户或计算手机从网络登录到本机,如果网络共享,或使用 net use 访问网络共享,net view 查看网络共享 |
4 | Batch | 批处理登录类型,无需用户干预 |
5 | Service | 服务控制管理器登录 |
7 | Unlock | 用户解锁主机 |
8 | NetworkCleartext | 用户从网络登录到此计算机,用户密码用非哈希的形式传递 |
9 | NewCredentials | 进程或线程克隆了其当前令牌,但为出站连接指定了新凭据 |
10 | Remotelnteractive | 使用终端服务或远程桌面连接登录 |
11 | Cachedlnteractive | 用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志 |
12 | CachedRemotelnteractive | 与 Remotelnteractive 相同,内部用于审计目的 |
13 | CachedUnlock | 登录尝试解锁 |
5.基本语法
logparser -i:输入文件格式 [-输入文件参数] -o:输出文件格式 [-输出格式参数] "SQL 查询语句"
(1)EVT 日志格式中重要的列Strings文本数据集
字段号 | 字段名称 |
0 | 安全IP(SID) |
1 | 账号名称 |
2 | 账户域 |
3 | 登录ID |
4 | 安全ID |
5 | 账户名 |
6 | 账户域 |
7 | 登录ID |
8 | 登录类型 |
9 | 登录进程 |
10 | 身份验证数据包 |
11 | 网络账户名称 |
12 | 账号GUID |
13 | 网络账户域 |
14 | 数据包名 |
15 | 密钥长度 |
16 | 进程ID |
17 | 进程路径 |
18 | 源网络地址 |
19 | 源端口 |
20 | 模拟级别 |
21 | |
22 | |
23 | |
24 | 虚拟账户 |
25 | |
26 | 提升的令牌 |
- 分组别名显示
字段名 as 别名
LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTime FROM Security.evtx where EventID=4624"
- 按年月日筛选
使用timestamp('年-月-日', 'yyyy-MM-dd')函数
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM Security.evtx where TO_DATE(TimeGenerated) between timestamp('2020-03-17', 'yyyy-MM-dd') and timestamp('2020-03-27', 'yyyy-MM-dd')" -rtp:-1
- 按时间筛选
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM Security.evtx where to_time(TimeGenerated) between timestamp('13:33:00', 'hh:mm:ss') and timestamp('13:35:00', 'hh:mm:ss')" -rtp:-1
- 通过函数EXTRACT_TOKEN()来截取Strings文本数据集的字段
EXTRACT_TOKEN(EVT日志文件列,字段号,'分隔符')
比如:
EXTRACT_TOKEN(Strings, 8, '|') 截取String列8个值,以‘|’分隔
输出格式:
LogParser.exe -i:输入格式 -o:输出格式 “SQL语句”
(1)通用文本文件输出格式
NAT:将输出记录格式化为可读的列表列。
CSV:将输出记录格式化为以逗号分隔的值文本。
TSV:将输出记录格式化为制表符分隔或空格分隔的文本。
XML:将输出记录格式化为XML文档。
W3C:以W3C扩展日志文件格式格式化输出记录。
TPL:按照用户定义的模板格式化输出记录。
IIS:以Microsoft IIS日志文件格式格式化输出记录
(2)专用输出格式
SQL:将输出记录上载到SQL数据库中的表。
SYSLOG:将输出记录发送到Syslog服务器。
DATAGRID:在图形用户界面中显示输出记录。
CHART:创建包含图表的图像文件。
比如:LogParser.exe -i:EVT -o:DATAGRID
(1)网格
成功登录用户信息以网格的形式展示
LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,8,'|') AS LoginType,EXTRACT_TOKEN(Strings,5,'|') AS user_name,EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM Security WHERE EventID=4624"
(2)CSV
LogParser.exe -i:EVT -o:CSV "SELECT TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,8,'|') AS LoginType,EXTRACT_TOKEN(Strings,5,'|') AS user_name,EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP INTO loginData.csv FROM Security WHERE EventID=4624"
6.日志分析实例
(1)远程登录成功日志:
LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTime, EXTRACT_TOKEN(Strings,5,'|') as username, EXTRACT_TOKEN(Strings, 8, '|') as LogonType, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM Security where EventID=4624"
远程登录失败日志:
同上,改事件ID为4625
(2)筛选指定日期之内成功登录的用户信息:
(登录时间,登录类型,用户名,源IP)
LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTime, EXTRACT_TOKEN(Strings,8,'|') AS LoginType, EXTRACT_TOKEN(Strings,5,'|') AS user_name, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM Security WHERE EventID=4624 AND TO_DATE(TimeGenerated) BETWEEN timestamp('2020-04-01', 'yyyy-MM-dd') AND timestamp('2020-04-04', 'yyyy-MM-dd')" -rtp:-1
(3)IIS服务器日志
安装IIS服务器核心组件(包括日志)
选择日志进行配置
设置日志文件格式以及字段
多访问几次就生成日志信息
IIS日志通过Logparser 筛选指定字段的值进行网格输出
logparser "select date,time,c-ip,cs-method,cs-uri-stem,cs-uri-query,sc-status,sc-bytes,cs-bytes,time-taken from D:\IIS\u_ex200405.log" -o:DATAGRID
很清晰的看到时间,客户端IP,接受流量,发送流量(这两项由于没有实际网站为NULL) 以及响应状态,相应时间等
总之,logparser对于任何一个文本格式的日志信息提供了非常方便的处理方式。以上是我自己学习Logparser过程中写出来的学习笔记。
参考:
1.Log Parser 2.2 Documentation
2.事件ID表,事件类型表,部分筛选代码: https://blog.csdn.net/weixin_30663471/article/details/98886535