2

我想为 Windows 开发一个基于主机的防火墙,主要用于过滤以 HTTPS 开头的 URL!我知道微软正在展示 WFP 来替代已弃用的旧技术,例如防火墙/过滤器挂钩、NDIS、TDI、WSA 和 Winsock 2 (LSP)。但 WFP 目前不支持带有主机名或 URL 的过滤器。此外,WFP 仅在 C/C++ 中,并且在 .NET 中没有可用的 C# 包装器。

我尝试了@basil 的WinDivert演示应用程序 webfilter,它解析 TCP 端口 80(默认 HTTP)上 IPv4 的出站流量中的数据包,重置服务器连接(TCP RST)并向客户端(浏览器)发送 HTML 响应,然后是 TCP FIN如果 URL 与文本文件中作为命令行参数给出的任何列入黑名单的条目匹配,否则重新注入它们......

 handle = WinDivertOpen(
        "outbound && "              // Outbound traffic only
        "ip && "                    // Only IPv4 supported
        "tcp.DstPort == 80 && "     // HTTP (port 80) only
        "tcp.PayloadLength > 0",    // TCP data packets only
        WINDIVERT_LAYER_NETWORK, priority, 0
    );

我的问题是:我可以更改此代码以支持 HTTPS(将端口更改为默认 443)以及 IPv6 吗?如果是这样,我愿意编写一个 P\Invoke 包装类来从托管 C# 代码中调用它。

额外:可以使用 SSH 隧道绕过此解决方案,还有其他方法可以绕过它吗?

4

1 回答 1

6

HTTPS 使用加密来阻止第三方拦截和修改 HTTP 流。所以简短的回答是“不”。

原则上,您可以使用 WinDivert 发起中间人攻击以访问未加密的 HTTP 流。但是,这将被检测到,并且网络浏览器将严厉警告用户他们受到攻击并且不要继续。

于 2014-04-20T02:12:29.670 回答