我想为 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 隧道绕过此解决方案,还有其他方法可以绕过它吗?