Я только что начал играть с pcap.net в C #, пытаясь разобрать существующий файл pcap (https://download.netresec.com/pcap/maccdc-2012/maccdc2012_00000.pcap.gz)
Я пытаюсь отфильтровать все TCP-пакеты, однако большая часть данных вэтот захват, кажется, происходит в VLAN, поэтому после некоторого чтения вот мой код:
static long packetCount = 0;
static void Main(string[] args)
{
string input = @"C:\Testing\pcap\maccdc2012_00000.pcap";
OfflinePacketDevice offlineDevice = new OfflinePacketDevice(input);
using (PacketCommunicator communicator = offlineDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
communicator.SetFilter("tcp or (vlan and tcp)");
communicator.ReceivePackets(0, PacketHandler);
}
Debug.WriteLine("Packet count: " + packetCount);
}
private static void PacketHandler(Packet packet)
{
//Debug.WriteLine("Timestamp: " + packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length: " + packet.Length + " " + packet.Ethernet.EtherType);
packetCount++;
}
Возможно, я неправильно понял синтаксис BPF, но, используя Wireshark для сравнения, я вижу следующее:
Wireshark total packets: 8635943
My program total packets: 8635943
Wireshark (tcp) filter: 8484315
My program (tcp) filter: 0
My program (tcp or (vlan and tcp)) filter: 8481053
Таким образом, существует несоответствие 151628 пакетов, которые показывает Wireshark, моя программа не работает. Возможно, сейчас Wireshark делает что-то еще, о чем я не знаю, но я немного запутался.
Если кто-то может предложить какой-либо совет или вклад, я был бы признателен.