private void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
IPv4Packet ipPacket;
try
{
if (e.Packet.LinkLayerType != LinkLayers.Null)
{
var linkPacket = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
ipPacket = linkPacket.PayloadPacket as IPv4Packet;
}
else
{
ipPacket = new IPv4Packet(new ByteArraySegment(e.Packet.Data,4,e.Packet.Data.Length-4));
}
if (ipPacket == null)
return;
}
catch
{
return;
// ignored bad packet
}
OnPacketReceived(ipPacket);
var now = DateTime.UtcNow;
if (now <= _nextCheck) return;
_nextCheck = now + TimeSpan.FromSeconds(20);
var device = (WinPcapDevice) sender;
if (device.Statistics.DroppedPackets == _droppedPackets &&
device.Statistics.InterfaceDroppedPackets == _interfaceDroppedPackets)
{
return;
}
_droppedPackets = device.Statistics.DroppedPackets;
_interfaceDroppedPackets = device.Statistics.InterfaceDroppedPackets;
OnWarning(
$"DroppedPackets {device.Statistics.DroppedPackets}, InterfaceDroppedPackets {device.Statistics.InterfaceDroppedPackets}, ReceivedPackets {device.Statistics.ReceivedPackets}");
}