public void WritePacket(IPacket packet) { try { AbstractBlock abstractBlock = null; if (packet is AbstractBlock) { abstractBlock = packet as AbstractBlock; } else { abstractBlock = EnchantedPacketBlock.CreateEnchantedPacketFromIPacket(packet, OnException); } HeaderWithInterfacesDescriptions header = this.HeadersWithInterfaces.Last(); byte[] data = abstractBlock.ConvertToByte(header.Header.ReverseByteOrder, OnException); if (abstractBlock.AssociatedInterfaceID.HasValue) { if (abstractBlock.AssociatedInterfaceID.Value >= header.InterfaceDescriptions.Count) { throw new ArgumentOutOfRangeException(string.Format("[PcapNGWriter.WritePacket] Packet interface ID: {0} is greater than InterfaceDescriptions count: {1}", abstractBlock.AssociatedInterfaceID.Value, header.InterfaceDescriptions.Count)); } int maxLength = header.InterfaceDescriptions[abstractBlock.AssociatedInterfaceID.Value].SnapLength; if (data.Length > maxLength) { throw new ArgumentOutOfRangeException(string.Format("[PcapNGWriter.WritePacket] block length: {0} is greater than MaximumCaptureLength: {1}", data.Length, maxLength)); } } lock (syncRoot) { binaryWriter.Write(data); } } catch (Exception exc) { OnException(exc); } }