通过PowerShell进行网络分析
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过PowerShell进行网络分析相关的知识,希望对你有一定的参考价值。
好久没有写文章,因为确实工作也比较忙。今天周末,稍微有些时间,在解决一个问题时,用到了一点抓取和处理网络数据的小技巧,摘录分享如下。
问题描述
我有一个需求,就是要研究某个网页加载过程中具体发起了多少个请求(从主请求开始,到所有的资源完成),并且要检查每个响应的一些特性,例如是否 包含了某个header信息等。
解决方案
要完成这个需求,跟把一个大象装进冰箱一样简单,大致需要如下几个步骤:
记录某个网页加载的请求
把这些请求保存起来
分析这些请求
假设我们要分析Outlook.com这个网页
要对其网路网络请求进行抓取,其实很简单,所有主流的浏览器都带有一个开发者工具(通过F12可以唤出),然后有一个网络(Network)的面板,很容易就可以把所有的请求记录下来。
你可以点击每一个请求去查看具体的信息,但我们这里需要集中处理,所以如何把它们全部保存起来呢。这个也不难,点击下图的按钮即可。
这样会保存为一个 HAR 文件(本例而言,outlook.com的主界面,有800多个请求,这是现代网站的特点,有很多本地的功能,浏览器已经越来越强大,相当于是一个富客户端)。你会发现在你的电脑上无法直接打开。但是其实,它就是一个纸老虎,是一个json文件,你可以用记事本,或者VS Code这样的工具轻松打开。
那么关键的部分终于来了。如何在这一堆文本中快速分析得到你想要的数据。这个 json 文件可不小,大约几十MB呢。实际上有很多办法实现,我用的是PowerShell。
我也不卖什么关子了,这里直接上最终的代码。
(Get-Content .\\outlook.live.com.har | `
ConvertFrom-Json).log.entries `
| Where-Object ($_.response.headers `
|where-object $_.name -eq "xxxx").length -gt 0 `
| Select-Object @Name='URL';Expression=$_.request.url
这一行代码(没错,其实只有一行,只不过为了看起来直观换行了而已)即可得到我需要的结果
这一行代码的意思是
读取outlook.live.com.har 这个文件
将文件内容转换为json对象,并读取log属性的entries对象集合
针对entries集合进行筛选,查找那些response的headers中,包含了name=xxxx 这个值的entry
如果找到的,则返回该entry的request对象的url属性
将所有找到的,用一个列表返回
预告一下,年内会有一本关于企业元宇宙的新书上市,我参与编写了其中的低代码的部分,费了一个月的脑筋,写下两万余言,希望对大家有所帮助吧。
但正如我在那本书中的结论一样,有代码和无代码本质上并无差别。写代码使我快乐,所以才会有这个分享。
以上是关于通过PowerShell进行网络分析的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell小技巧:通过 PowerShell实现日志关键字分析
Android端 APP 内存分析使用工具进行APP的内存分析