0

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

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

我的问题是:

是否可以确定正在打开哪些 HTTP-S (CONNECT) url?例如 https://facebook.com

请告诉它是否可能。我不能使用提琴手或任何其他代理工具,必须使用网络驱动程序来实现这一点。请告诉我这是否可能,如果不是,替代解决方案是什么?

谢谢

编辑

我必须在以管理员权限运行示例应用程序的本地计算机上执行此操作。我只是想知道我是否可以在没有代理的情况下实现这一目标。如果用户打开一个网址https://www.google.com,那么我只想捕获它。我还需要一个中间人实现来获取这个 CONNECT HTTPS url吗?请澄清。非常感激。

4

2 回答 2

0

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

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

于 2016-05-06T20:03:52.040 回答
-1

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

顺便说一句,找到有关中间人攻击的信息并阅读它们——这正是您想要做的。

于 2013-08-04T18:47:03.723 回答