public void Test_PpiCommon_Construction() { PpiCommon field = new PpiCommon(); field.TSFTimer = 0x1234567812345678; field.Flags = PpiCommon.CommonFlags.FcsIncludedInFrame | PpiCommon.CommonFlags.TimerSynchFunctionInUse; field.Rate = 2; field.ChannelFrequency = 2142; field.ChannelFlags = RadioTapChannelFlags.Channel2Ghz | RadioTapChannelFlags.Passive; field.FhssHopset = 0xAB; field.FhssPattern = 0xCD; field.AntennaSignalPower = -50; field.AntennaSignalNoise = 25; var ms = new MemoryStream(field.Bytes); PpiCommon recreatedField = new PpiCommon(new BinaryReader(ms)); Assert.AreEqual(0x1234567812345678, recreatedField.TSFTimer); Assert.AreEqual(PpiCommon.CommonFlags.FcsIncludedInFrame | PpiCommon.CommonFlags.TimerSynchFunctionInUse, recreatedField.Flags); Assert.AreEqual(2, recreatedField.Rate); Assert.AreEqual(2142, recreatedField.ChannelFrequency); Assert.AreEqual(RadioTapChannelFlags.Channel2Ghz | RadioTapChannelFlags.Passive, recreatedField.ChannelFlags); Assert.AreEqual(0xAB, recreatedField.FhssHopset); Assert.AreEqual(0xCD, recreatedField.FhssPattern); Assert.AreEqual(-50, recreatedField.AntennaSignalPower); Assert.AreEqual(25, recreatedField.AntennaSignalNoise); }
public void ReadingPacketsFromFile() { var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_per_packet_information.pcap"); dev.Open(); var rawCapture = dev.GetNextPacket(); dev.Close(); PpiPacket p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data) as PpiPacket; Assert.IsNotNull(p); Assert.AreEqual(0, p.Version); Assert.AreEqual(32, p.Length); Assert.AreEqual(1, p.Count); PpiCommon commonField = p.FindFirstByType(PpiFieldType.PpiCommon) as PpiCommon; Assert.AreEqual(PpiFieldType.PpiCommon, commonField.FieldType); Assert.AreEqual(0, commonField.TSFTimer); Assert.IsTrue((commonField.Flags & PpiCommon.CommonFlags.FcsIncludedInFrame) == PpiCommon.CommonFlags.FcsIncludedInFrame); Assert.AreEqual(2, commonField.Rate); Assert.AreEqual(2437, commonField.ChannelFrequency); Assert.AreEqual(0x00A0, (Int32)commonField.ChannelFlags); Assert.AreEqual(0, commonField.FhssHopset); Assert.AreEqual(0, commonField.FhssPattern); Assert.AreEqual(-84, commonField.AntennaSignalPower); Assert.AreEqual(-100, commonField.AntennaSignalNoise); MacFrame macFrame = p.PayloadPacket as MacFrame; Assert.AreEqual(FrameControlField.FrameSubTypes.ControlCTS, macFrame.FrameControl.SubType); Assert.IsTrue(macFrame.AppendFcs); }
public void ConstructPacketWithMultipleAlignedFields() { PpiPacket packet = new PpiPacket(); packet.Flags |= PpiPacket.HeaderFlags.Alignment32Bit; PpiCommon commonField = new PpiCommon(); commonField.ChannelFrequency = 2142; commonField.AntennaSignalPower = 50; commonField.AntennaSignalNoise = 25; packet.Add(commonField); Assert.AreEqual(32, packet.Length); PpiProcessInfo processInfoField = new PpiProcessInfo(); processInfoField.UserId = 0x1111; processInfoField.UserName = "******"; processInfoField.GroupId = 0x2222; processInfoField.GroupName = "Test Group"; packet.Add(processInfoField); Assert.AreEqual(84, packet.Length); PpiAggregation aggregationField = new PpiAggregation(0x3333); packet.Add(aggregationField); Assert.AreEqual(92, packet.Length); PpiPacket recreatedPacket = Packet.ParsePacket(LinkLayers.PerPacketInformation, packet.Bytes) as PpiPacket; PpiCommon recreatedCommonField = recreatedPacket[0] as PpiCommon; Assert.IsNotNull(recreatedCommonField); Assert.AreEqual(2142, recreatedCommonField.ChannelFrequency); Assert.AreEqual(50, recreatedCommonField.AntennaSignalPower); Assert.AreEqual(25, recreatedCommonField.AntennaSignalNoise); PpiProcessInfo recreatedProcessField = recreatedPacket[1] as PpiProcessInfo; Assert.IsNotNull(recreatedProcessField); Assert.AreEqual(0x1111, recreatedProcessField.UserId); Assert.AreEqual("Hester the tester", recreatedProcessField.UserName); Assert.AreEqual(0x2222, recreatedProcessField.GroupId); Assert.AreEqual("Test Group", recreatedProcessField.GroupName); PpiAggregation recreatedAggregationField = recreatedPacket[2] as PpiAggregation; Assert.IsNotNull(recreatedAggregationField); Assert.AreEqual(0x3333, recreatedAggregationField.InterfaceId); }
public void ConstructPacketWithMultipleFields() { var packet = new PpiPacket(); var commonField = new PpiCommon { ChannelFrequency = 2142, AntennaSignalPower = 50, AntennaSignalNoise = 25 }; packet.Add(commonField); Assert.AreEqual(32, packet.Length); var processInfoField = new PpiProcessInfo { UserId = 0x1111, UserName = "******", GroupId = 0x2222, GroupName = "Test Group" }; packet.Add(processInfoField); Assert.AreEqual(82, packet.Length); var aggregationField = new PpiAggregation(0x3333); packet.Add(aggregationField); Assert.AreEqual(90, packet.Length); var recreatedPacket = Packet.ParsePacket(LinkLayers.Ppi, packet.Bytes) as PpiPacket; var recreatedCommonField = recreatedPacket[0] as PpiCommon; Assert.IsNotNull(recreatedCommonField); Assert.AreEqual(2142, recreatedCommonField.ChannelFrequency); Assert.AreEqual(50, recreatedCommonField.AntennaSignalPower); Assert.AreEqual(25, recreatedCommonField.AntennaSignalNoise); var recreatedProcessField = recreatedPacket[1] as PpiProcessInfo; Assert.IsNotNull(recreatedProcessField); Assert.AreEqual(0x1111, recreatedProcessField.UserId); Assert.AreEqual("Hester the tester", recreatedProcessField.UserName); Assert.AreEqual(0x2222, recreatedProcessField.GroupId); Assert.AreEqual("Test Group", recreatedProcessField.GroupName); var recreatedAggregationField = recreatedPacket[2] as PpiAggregation; Assert.IsNotNull(recreatedAggregationField); Assert.AreEqual(0x3333, recreatedAggregationField.InterfaceId); }
/// <summary> /// Initializes a new instance of the <see cref="Kavprot.Packets.Ieee80211.PpiPacket"/> class. /// </summary> /// <param name='bas'> /// A <see cref="ByteArraySegment"/> /// </param> public PpiPacket(ByteArraySegment bas) { // slice off the header portion header = new ByteArraySegment(bas); Version = VersionBytes; Flags = FlagsBytes; // update the header size based on the headers packet length header.Length = LengthBytes; LinkType = LinkTypeBytes; PpiFields = ReadPpiFields(); PpiCommon commonField = FindFirstByType(PpiFieldType.PpiCommon) as PpiCommon; // parse the encapsulated bytes payloadPacketOrData = ParseEncapsulatedBytes(header, commonField); }
/// <summary> /// Used by the Ieee80211PpiPacket constructor. /// </summary> /// <param name="header"> /// A <see cref="ByteArraySegment"/> /// </param> /// <param name="commonField"> /// The <see cref="PpiCommon"/> object in the PPI packet or null if not available /// </param> /// <returns> /// A <see cref="PacketOrByteArraySegment"/> /// </returns> internal static PacketOrByteArraySegment ParseEncapsulatedBytes (ByteArraySegment header, PpiCommon commonField) { // slice off the payload var payload = header.EncapsulatedBytes (); var payloadPacketOrData = new PacketOrByteArraySegment (); MacFrame frame = null; if (commonField != null) { bool fcsPresent = ((commonField.Flags & PpiCommon.CommonFlags.FcsIncludedInFrame) == PpiCommon.CommonFlags.FcsIncludedInFrame); if (fcsPresent) { frame = MacFrame.ParsePacketWithFcs (payload); } else { frame = MacFrame.ParsePacket (payload); } } else { frame = MacFrame.ParsePacket (payload); } if (frame == null) { payloadPacketOrData.TheByteArraySegment = payload; } else { payloadPacketOrData.ThePacket = frame; } return payloadPacketOrData; }
/// <summary> /// Used by the Ieee80211PpiPacket constructor. /// </summary> /// <param name="header"> /// A <see cref="ByteArraySegment" /> /// </param> /// <param name="commonField"> /// The <see cref="PpiCommon" /> object in the PPI packet or null if not available /// </param> /// <returns> /// A <see cref="PacketOrByteArraySegment" /> /// </returns> internal static PacketOrByteArraySegment ParseEncapsulatedBytes(ByteArraySegment header, PpiCommon commonField) { // slice off the payload var payload = header.EncapsulatedBytes(); var payloadPacketOrData = new PacketOrByteArraySegment(); MacFrame frame = null; if (commonField != null) { var fcsPresent = ((commonField.Flags & PpiCommon.CommonFlags.FcsIncludedInFrame) == PpiCommon.CommonFlags.FcsIncludedInFrame); if (fcsPresent) { frame = MacFrame.ParsePacketWithFcs(payload); } else { frame = MacFrame.ParsePacket(payload); } } else { frame = MacFrame.ParsePacket(payload); } if (frame == null) { payloadPacketOrData.TheByteArraySegment = payload; } else { payloadPacketOrData.ThePacket = frame; } return(payloadPacketOrData); }