我正在用 C# 编写一个简单的网络安全程序。为了捕获网络中的流量,我将使用 Sharppcap 库,它可以捕获所有数据包并在 UI 上显示它们的详细信息。但是,我在库中找不到任何可用于丢弃任何受其端口、源、目标或数据内容影响的数据包的方法。Sharppcap 支持这种功能吗?如果没有,我可以使用任何图书馆吗?
1 回答
Sharppcap 库只是为数据包的拦截和传输提供了一个通用的 API。在 Windows 上,您可能会将 WinPcap 与 sharpcap 一起使用。在 Windows 上,如果不为 Windows 数据包过滤平台编写特殊类型的驱动程序,就无法检查和更改数据包。这也意味着您需要使用 C++ 或 C。
WinPcap 支持读取到达网卡的数据包,还支持从网卡传输原始数据,其中包括传输自定义数据包以进行调试、安全研究或开发工具以探测网络或您拥有什么的能力。
简短的回答是,没有 Sharppcap 不支持这一点,您需要制作自己的驱动程序。如果您可以摆脱 Windows,如果您使用像 Debian 或 Arch Linux 这样的 Linux 发行版,您可以在一天内使用用 C 编写的自定义拦截器设置专用硬件防火墙。
如果您决定坚持使用 Windows,那么当您的负载接近网卡容量的 50% 时,您也会感到意外。Windows 将在负载很大的情况下停止转发到网络过滤堆栈,以提高性能。我注意到在大约 200 mbit/sec 的千兆网卡上,WinPcap 甚至没有看到所有数据包的 5%。为了测试这一点,我使用了一个位于交换机和被测试机器之间的专用捕获设备。捕获设备可以线速捕获,远程机器也可以,但 Windows 上的网络过滤堆栈不能。