我知道SharpPcap主要是为了数据包嗅探而不是修改或过滤而开发的,但现在我可以在其存储库中看到WinDivert将被添加到项目中,但找不到任何文档。
如何告诉 SharpPcap 使用 WinDivert 以及如何通过它丢弃数据包? SharpPcap中是否有等效的驱动程序用于拦截和修改Linux数据包?
SharpPcap 实现似乎是本机 WinDivert API 周围的一个薄层,因此您可以在 官方文档上找到更多信息。
要求:
WinDivert.dll
和 WinDivert64.sys
基本代码大致是这样的
WinDivertDevice device = new()
{
Filter = $"tcp and (tcp.DstPort == 8080)",
Layer = WinDivertLayer.Network,
// By default, flags are set to 1 (WINDIVERT_FLAG_SNIFF) by SharpPcap.
Flags = 0,
};
device.Open();
var packetStatus = _device.GetNextPacket(out PacketCapture e);
if (packetStatus != GetPacketStatus.PacketRead)
{
// Retry
}
var rawPacket = e.GetPacket();
if (!ShouldDrop(rawPacket))
{
device.SendPacket(rawPacket, e.Header);
}