C# 我可以使用winpkfilter捕获https(连接)URL吗?

C# 我可以使用winpkfilter捕获https(连接)URL吗?,c#,https,filter,packet-capture,network-traffic,C#,Https,Filter,Packet Capture,Network Traffic,我正在尝试确定本地计算机上正在打开哪些https URL。我已经安装了winpkfilter,并尝试使用C#来捕获流量 我可以很好地捕获数据包,甚至可以在未加密的流量中看到GET和POST请求(对HTTP上的站点发出的标准请求) 我的问题是: 是否可以确定正在打开哪些HTTP-S(连接)URL? 例如 如果可能的话,请告诉我。我不能使用fiddler或任何其他代理工具,必须使用网络驱动程序来实现这一点。请告诉我这是否可行,如果不可行,替代方案是什么 谢谢 编辑 我必须在本地计算机上执行此操作,

我正在尝试确定本地计算机上正在打开哪些https URL。我已经安装了winpkfilter,并尝试使用C#来捕获流量

我可以很好地捕获数据包,甚至可以在未加密的流量中看到GET和POST请求(对HTTP上的站点发出的标准请求)

我的问题是:

是否可以确定正在打开哪些HTTP-S(连接)URL? 例如

如果可能的话,请告诉我。我不能使用fiddler或任何其他代理工具,必须使用网络驱动程序来实现这一点。请告诉我这是否可行,如果不可行,替代方案是什么

谢谢

编辑 我必须在本地计算机上执行此操作,在本地计算机上我以管理员权限运行示例应用程序。我只是想知道我是否可以在没有代理的情况下实现这一点。如果用户打开了一个url,那么我只想捕获它。我是否仍然需要一个中间人实现来获取这个连接HTTPS url?请澄清。非常感谢。

HTTPS用于防止任何窃听(您正在尝试这样做)。因此,当HTTPS设置正确时,您无法执行任何操作。如果您可以控制客户端计算机和软件,那么您可以在用户系统中安装一个伪造的可信根证书,然后拦截HTTPS请求,动态生成服务器证书,使用可信根证书对其进行签名,并充当中间人


顺便说一句,找到并阅读相关信息-这正是您想要做的。

是的,没错,没有MITM就不可能提取完整的URL。要组织此过程,您必须使用WinpkFilter将传出的HTTPS会话重定向到本地HTTPS代理,并实现一些SSL代理


然而,有一个有限的替代方案。使用WinpkFilter,您可以截获DNS请求/响应,通常在任何HTTPS会话之前发送DNS查询以将域名转换为IP地址。您可以使用DNS响应中的IP到域名关联来确定HTTPS会话试图连接的域名。例如,您捕获到104.16.35.249端口443的传出TCP SYN数据包,但在此之前,您看到了www.stackoverflow.com的DNS响应,其中104.16.35.249是为域名返回的IP地址之一。因此,您可以很容易地了解到HTTPS会话正在建立。当然,这种方法不会为您提供完整的URL,但只提供域名,例如,对于某些任务,它可能就足够了。

谢谢您的回答。我编辑了我的问题,加入了一些额外的信息。我不需要解密https流量,只需要确定用户想要访问的https url,仅此而已。。。。我还需要一个中间人来执行吗?例如,我对用户尝试打开[H.T.T.P.S://Facebook ]或[ H.T.P.://] Facebook的兴趣感兴趣,并采取相应的行动。需要能够从数据包数据确定此url和流量类型(http/https),并且不使用任何代理解决方案。@SteveJohnson您可以分析流量以确定它是否是http请求。如果是,则提取URI。但是对于HTTPS来说,你就不走运了——一切都隐藏在SSL/TLS后面。CONNECT是HTTPS代理构建不透明隧道的一种方法。这与你的问题毫无关系。HTTPS资源是使用常规GET、POST等方式请求的。我感兴趣的是确定请求的HTTPS资源以及是否丢弃该数据包。。。那么你是说不可能从数据包本身确定请求了哪个https资源?是的,我在下面对我的答案的评论中已经这样说了。