Example #1
0
        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);
        }
Example #2
0
            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);
 }