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