PowerShell 抓取网络日志


豆子今天想看看PowerShell是否有像Winsock之类的方式抓包,不过很遗憾,他有一个NetEvenPacketCapture的模块,但是他不像wireshark那样可以直接抓取TCP/IP包,他获取的是Windows的网络日志。优点是我可以直接用get-winEvent来分析内容了,缺点是我还是看不见直接的包的内容。


整个模块一共有23个命令,新手一般会比较迷糊到底怎么用。


豆子主要参考了微软的这个博客来进行的配置

https://blogs.technet.microsoft.com/heyscriptingguy/2015/10/12/packet-sniffing-with-powershell-getting-started/


 简单的说,6个基本步骤:

  1. 创建Session

  2. 绑定Provider

  3. 开始Session

  4. 获取这个Session的日志

  5. 关掉这个Session

  6. 删除这个Session


1.创建一个新的session,他会告诉我日志保存的地址

1
 New-NetEventSession -Name "Session1"


PowerShell 抓取网络日志


2.绑定Provider,首先通过logman看看有哪些provider可以使用

1
logman query providers | select-string tcp

PowerShell 抓取网络日志

然后绑定这个Provider

1
 Add-NetEventProvider -Name “Microsoft-Windows-TCPIP” -SessionName “Session1"


PowerShell 抓取网络日志


3. 开始这个Session,没有什么结果出来,不过PS的设计和Linux一样,no news is good news, 没报错就是好结果

1
Start-NetEventSession -Name “Session1"

4. 开始抓取日志

1
Get-NetEventSession

PowerShell 抓取网络日志


5.等一会然后停止

1
Stop-NetEventSession -Name session1

6. 删除

1
Remove-NetEventSession


注意生成的日志格式是etl格式的,这个格式是没法用wireshark之类的抓包工具打开的,不过我们可以直接用事件查看器直接打开,如下图所示

PowerShell 抓取网络日志



如果需要用脚本处理,这个和处理普通的windows日志一样,直接用get-WinEvent就可以了

注意必须倒序排列才行。

1
Get-WinEvent -path C:\WINDOWS\system32\config\systemprofile\AppData\Local\NetEventTrace.etl -Oldest

PowerShell 抓取网络日志


比如我只需要查看ID为1300的日志

PowerShell 抓取网络日志


我想查看最后的记录

PowerShell 抓取网络日志


如果我想处理Message的内容,可以转换成XML格式,然后查看EventData的内容,比如

PowerShell 抓取网络日志


通过这种方式,我可以设置计划任务,在指定的时间内抓取网络日志,然后进行分析。









本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1746576,如需转载请自行联系原作者