用于从托管代码中过滤 HTTPS 的 Windows 过滤平台

Joh*_*ube 2 c# c++ https tcp wfp

我想为 Windows 开发一个基于主机的防火墙,主要是为了过滤以 HTTPS 开头的 URL!我知道 Microsoft 将 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
    );
Run Code Online (Sandbox Code Playgroud)

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

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

Bas*_*sil 6

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

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