public void ConstructFrameWithSinglePresenceField() { var p = new RadioPacket(); var expectedLength = 8; Assert.AreEqual(expectedLength, p.Length); var flagsField = new FlagsRadioTapField(); flagsField.Flags |= RadioTapFlags.FcsIncludedInFrame; flagsField.Flags |= RadioTapFlags.WepEncrypted; p.Add(flagsField); expectedLength += flagsField.Length; Assert.AreEqual(expectedLength, p.Length); //We will add the noise field before the signal field. This is not the order required //for radiotap and so will test that the fields are correctly reordered when written var dbAntennaNoiseField = new DbAntennaNoiseRadioTapField { AntennaNoisedB = 33 }; p.Add(dbAntennaNoiseField); expectedLength += dbAntennaNoiseField.Length; Assert.AreEqual(expectedLength, p.Length); var dbAntennaSignalField = new DbAntennaSignalRadioTapField { SignalStrengthdB = 44 }; p.Add(dbAntennaSignalField); expectedLength += dbAntennaSignalField.Length; Assert.AreEqual(expectedLength, p.Length); //we will just put a single byte of data because we dont want it to be parsed into //an 802.11 frame in this test p.PayloadData = new byte[] { 0xFF }; var frameBytes = p.Bytes; var recreatedFrame = Packet.ParsePacket(LinkLayers.Ieee80211Radio, frameBytes) as RadioPacket; Assert.IsNotNull(p[RadioTapType.Flags]); Assert.IsNotNull(p[RadioTapType.DbAntennaSignal]); Assert.IsNotNull(p[RadioTapType.DbAntennaNoise]); Assert.AreEqual(new byte[] { 0xFF }, recreatedFrame.PayloadData); }
public void UnhandledRadioTapField() { MemoryStream ms = new MemoryStream(); BinaryWriter bs = new BinaryWriter(ms); bs.Write((Byte)0x0); //version bs.Write((Byte)0x0); //pad bs.Write((UInt16)0x0010); //length bs.Write((UInt32)0x80000002); //present 1 (wth flags field) bs.Write((UInt32)0x00010000); //present 2 (with unhandled field) bs.Write((UInt16)0x0010); //Flags field (FCS included flag set) bs.Write((UInt16)0x1234); //a made up field that we want to keep even though we dont know what it is var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_plus_radiotap_header.pcap"); dev.Open(); var rawCapture = dev.GetNextPacket(); dev.Close(); RadioPacket anotherRadioPacket = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data) as RadioPacket; bs.Write(anotherRadioPacket.PayloadPacket.Bytes); var radioTap = ms.ToArray(); RadioPacket p = Packet.ParsePacket(LinkLayers.Ieee80211_Radio, radioTap) as RadioPacket; Assert.AreEqual(16, p.Length); p.Add(new TsftRadioTapField(0x123456789)); RadioPacket finalFrame = Packet.ParsePacket(LinkLayers.Ieee80211_Radio, p.Bytes) as RadioPacket; Assert.AreEqual(24, finalFrame.Length); Assert.AreEqual(0x1234, EndianBitConverter.Little.ToUInt16(finalFrame.Bytes, finalFrame.Length - 2)); }
public void ConstructFrameWithSinglePresenceField() { RadioPacket p = new RadioPacket(); var expectedLength = 8; Assert.AreEqual(expectedLength, p.Length); FlagsRadioTapField flagsField = new FlagsRadioTapField(); flagsField.Flags |= RadioTapFlags.FcsIncludedInFrame; flagsField.Flags |= RadioTapFlags.WepEncrypted; p.Add(flagsField); expectedLength += flagsField.Length; Assert.AreEqual(expectedLength, p.Length); //We will add the noise field before the signal field. This is not the order required //for radiotap and so will test that the fields are correctly reordered when written DbAntennaNoiseRadioTapField dbAntennaNoiseField = new DbAntennaNoiseRadioTapField(); dbAntennaNoiseField.AntennaNoisedB = 33; p.Add(dbAntennaNoiseField); expectedLength += dbAntennaNoiseField.Length; Assert.AreEqual(expectedLength, p.Length); DbAntennaSignalRadioTapField dbAntennaSignalField = new DbAntennaSignalRadioTapField(); dbAntennaSignalField.SignalStrengthdB = 44; p.Add(dbAntennaSignalField); expectedLength += dbAntennaSignalField.Length; Assert.AreEqual(expectedLength, p.Length); //we will just put a single byte of data because we dont want it to be parsed into //an 802.11 frame in this test p.PayloadData = new byte[]{0xFF}; var frameBytes = p.Bytes; RadioPacket recreatedFrame = Packet.ParsePacket(LinkLayers.Ieee80211_Radio, frameBytes) as RadioPacket; Assert.IsNotNull(p[RadioTapType.Flags]); Assert.IsNotNull(p[RadioTapType.DbAntennaSignal]); Assert.IsNotNull(p[RadioTapType.DbAntennaNoise]); Assert.AreEqual(new byte[]{0xFF}, recreatedFrame.PayloadData); }