Example #1
0
            public void Test_FindById_ElementNotPresent()
            {
                BeaconFrame beaconFrame = LoadBeaconFrameFromFile("../../CaptureFiles/80211_beacon_frame.pcap");

                InformationElement[] infoElements = beaconFrame.InformationElements.FindById(InformationElement.ElementId.ChallengeText);
                Assert.AreEqual(0, infoElements.Length);
            }
Example #2
0
            public void Test_Constuctor_FromBeaconFrame()
            {
                var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_beacon_frame.pcap");

                dev.Open();
                var rawCapture = dev.GetNextPacket();

                dev.Close();

                Packet      p           = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                BeaconFrame beaconFrame = (BeaconFrame)p.PayloadPacket;

                List <InformationElement> infoElements = beaconFrame.InformationElements;

                Assert.AreEqual(InformationElement.ElementId.ServiceSetIdentity, infoElements [0].Id);
                Assert.AreEqual(InformationElement.ElementId.SupportedRates, infoElements [1].Id);
                Assert.AreEqual(InformationElement.ElementId.DsParameterSet, infoElements [2].Id);
                Assert.AreEqual(InformationElement.ElementId.TrafficIndicationMap, infoElements [3].Id);
                Assert.AreEqual(InformationElement.ElementId.ErpInformation, infoElements [4].Id);
                Assert.AreEqual(InformationElement.ElementId.ErpInformation2, infoElements [5].Id);
                Assert.AreEqual(InformationElement.ElementId.RobustSecurityNetwork, infoElements [6].Id);
                Assert.AreEqual(InformationElement.ElementId.ExtendedSupportedRates, infoElements [7].Id);
                Assert.AreEqual(InformationElement.ElementId.HighThroughputCapabilities, infoElements [8].Id);
                Assert.AreEqual(InformationElement.ElementId.HighThroughputInformation, infoElements [9].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [10].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [11].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [12].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [13].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [14].Id);
            }
Example #3
0
        public void Test_ConstructorWithCorruptBuffer()
        {
            //buffer is way too short for frame. We are just checking it doesn't throw
            byte[] corruptBuffer = { 0x01 };
            var    frame         = new BeaconFrame(new ByteArraySegment(corruptBuffer));

            Assert.IsFalse(frame.FcsValid);
        }
Example #4
0
            public void Test_FindFirstById_FindElement()
            {
                BeaconFrame beaconFrame = LoadBeaconFrameFromFile("../../CaptureFiles/80211_beacon_frame.pcap");

                InformationElement infoElement = beaconFrame.InformationElements.FindFirstById(InformationElement.ElementId.DsParameterSet);

                Assert.AreEqual(InformationElement.ElementId.DsParameterSet, infoElement.Id);
            }
Example #5
0
            public void Test_FindFirstById_ElementNotPresent()
            {
                BeaconFrame beaconFrame = LoadBeaconFrameFromFile("../../CaptureFiles/80211_beacon_frame.pcap");

                InformationElement infoElement = beaconFrame.InformationElements.FindFirstById(InformationElement.ElementId.ChallengeText);

                Assert.IsNull(infoElement);
            }
Example #6
0
            public void Test_FindById_FindRepeatedElement()
            {
                BeaconFrame beaconFrame = LoadBeaconFrameFromFile("../../CaptureFiles/80211_beacon_frame.pcap");

                InformationElement[] infoElements = beaconFrame.InformationElements.FindById(InformationElement.ElementId.VendorSpecific);

                Assert.AreEqual(5, infoElements.Length);

                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [0].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [1].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [2].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [3].Id);
                Assert.AreEqual(InformationElement.ElementId.VendorSpecific, infoElements [4].Id);
            }
Example #7
0
            private BeaconFrame LoadBeaconFrameFromFile(String file)
            {
                var dev = new CaptureFileReaderDevice(file);

                dev.Open();
                var rawCapture = dev.GetNextPacket();

                dev.Close();

                Packet      p           = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                BeaconFrame beaconFrame = (BeaconFrame)p.PayloadPacket;

                return(beaconFrame);
            }
Example #8
0
            public void TestConstructWithValues()
            {
                InformationElement ssidInfoElement = new InformationElement(InformationElement.ElementId.ServiceSetIdentity, new Byte[] { 0x68, 0x65, 0x6c, 0x6c, 0x6f });

                BeaconFrame frame = new BeaconFrame(
                    PhysicalAddress.Parse("11-11-11-11-11-11"),
                    PhysicalAddress.Parse("22-22-22-22-22-22"),
                    new InformationElementList()
                {
                    ssidInfoElement
                });

                frame.FrameControl.ToDS              = true;
                frame.FrameControl.Protected         = true;
                frame.Duration.Field                 = 12345;
                frame.SequenceControl.SequenceNumber = 3;
                frame.Timestamp      = 123456789;
                frame.BeaconInterval = 4444;
                frame.CapabilityInformation.IsIbss  = true;
                frame.CapabilityInformation.Privacy = true;
                frame.UpdateFrameCheckSequence();
                UInt32 fcs = frame.FrameCheckSequence;


                //serialize the frame into a byte buffer
                var bytes = frame.Bytes;
                var bas   = new ByteArraySegment(bytes);

                //create a new frame that should be identical to the original
                BeaconFrame recreatedFrame = MacFrame.ParsePacket(bas) as BeaconFrame;

                recreatedFrame.UpdateFrameCheckSequence();

                Assert.AreEqual(FrameControlField.FrameSubTypes.ManagementBeacon, recreatedFrame.FrameControl.SubType);
                Assert.AreEqual(PhysicalAddress.Parse("11-11-11-11-11-11"), recreatedFrame.SourceAddress);
                Assert.AreEqual(PhysicalAddress.Parse("FF-FF-FF-FF-FF-FF"), recreatedFrame.DestinationAddress);
                Assert.AreEqual(PhysicalAddress.Parse("22-22-22-22-22-22"), recreatedFrame.BssId);
                Assert.IsTrue(recreatedFrame.FrameControl.ToDS);
                Assert.IsTrue(recreatedFrame.FrameControl.Protected);
                Assert.AreEqual(12345, recreatedFrame.Duration.Field);
                Assert.AreEqual(3, recreatedFrame.SequenceControl.SequenceNumber);
                Assert.AreEqual(123456789, recreatedFrame.Timestamp);
                Assert.AreEqual(4444, recreatedFrame.BeaconInterval);
                Assert.AreEqual(ssidInfoElement, recreatedFrame.InformationElements [0]);

                Assert.AreEqual(fcs, recreatedFrame.FrameCheckSequence);
            }
Example #9
0
            public void ReadingPacketsFromFile()
            {
                var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_beacon_frame.pcap");

                dev.Open();
                var rawCapture = dev.GetNextPacket();

                dev.Close();

                Packet      p           = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                BeaconFrame beaconFrame = (BeaconFrame)p.PayloadPacket;

                Assert.AreEqual(0, beaconFrame.FrameControl.ProtocolVersion);
                Assert.AreEqual(FrameControlField.FrameSubTypes.ManagementBeacon, beaconFrame.FrameControl.SubType);
                Assert.IsFalse(beaconFrame.FrameControl.ToDS);
                Assert.IsFalse(beaconFrame.FrameControl.FromDS);
                Assert.IsFalse(beaconFrame.FrameControl.MoreFragments);
                Assert.IsFalse(beaconFrame.FrameControl.Retry);
                Assert.IsFalse(beaconFrame.FrameControl.PowerManagement);
                Assert.IsFalse(beaconFrame.FrameControl.MoreData);
                Assert.IsFalse(beaconFrame.FrameControl.Protected);
                Assert.IsFalse(beaconFrame.FrameControl.Order);
                Assert.AreEqual(0, beaconFrame.Duration.Field);  //this need expanding on in the future
                Assert.AreEqual("FFFFFFFFFFFF", beaconFrame.DestinationAddress.ToString().ToUpper());
                Assert.AreEqual("0024B2F8D706", beaconFrame.SourceAddress.ToString().ToUpper());
                Assert.AreEqual("0024B2F8D706", beaconFrame.BssId.ToString().ToUpper());
                Assert.AreEqual(0, beaconFrame.SequenceControl.FragmentNumber);
                Assert.AreEqual(2892, beaconFrame.SequenceControl.SequenceNumber);
                Assert.AreEqual(0x000000A07A7BA566, beaconFrame.Timestamp);
                Assert.AreEqual(100, beaconFrame.BeaconInterval);
                Assert.IsTrue(beaconFrame.CapabilityInformation.IsEss);
                Assert.IsFalse(beaconFrame.CapabilityInformation.IsIbss);

                Assert.AreEqual(15, beaconFrame.InformationElements.Count);

                Assert.AreEqual(0x2BADAF43, beaconFrame.FrameCheckSequence);
                Assert.AreEqual(262, beaconFrame.FrameSize);
            }
Example #10
0
            public void TestConstructWithValues ()
            {
            
                InformationElement ssidInfoElement = new InformationElement (InformationElement.ElementId.ServiceSetIdentity, new Byte[] { 0x68, 0x65, 0x6c, 0x6c, 0x6f }); 
                
                BeaconFrame frame = new BeaconFrame (
                     PhysicalAddress.Parse ("11-11-11-11-11-11"),
                     PhysicalAddress.Parse ("22-22-22-22-22-22"),
                    new InformationElementList (){ssidInfoElement});

                frame.FrameControl.ToDS = true;
                frame.FrameControl.Wep = true;
                frame.Duration.Field = 12345;
                frame.SequenceControl.SequenceNumber = 3;
                frame.Timestamp = 123456789;
                frame.BeaconInterval = 4444;
                frame.CapabilityInformation.IsIbss = true;
                frame.CapabilityInformation.Privacy = true;
                frame.UpdateFrameCheckSequence ();
                UInt32 fcs = frame.FrameCheckSequence;
                
                
                //serialize the frame into a byte buffer
                var bytes = frame.Bytes;
                var bas = new ByteArraySegment (bytes);

                //create a new frame that should be identical to the original
                BeaconFrame recreatedFrame = MacFrame.ParsePacket (bas) as BeaconFrame;
                recreatedFrame.UpdateFrameCheckSequence();

                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementBeacon, recreatedFrame.FrameControl.SubType);
                Assert.AreEqual (PhysicalAddress.Parse ("11-11-11-11-11-11"), recreatedFrame.SourceAddress);
                Assert.AreEqual (PhysicalAddress.Parse ("FF-FF-FF-FF-FF-FF"), recreatedFrame.DestinationAddress);
                Assert.AreEqual (PhysicalAddress.Parse ("22-22-22-22-22-22"), recreatedFrame.BssId);
                Assert.IsTrue (recreatedFrame.FrameControl.ToDS);
                Assert.IsTrue (recreatedFrame.FrameControl.Wep);
                Assert.AreEqual (12345, recreatedFrame.Duration.Field);
                Assert.AreEqual (3, recreatedFrame.SequenceControl.SequenceNumber);
                Assert.AreEqual (123456789, recreatedFrame.Timestamp);
                Assert.AreEqual (4444, recreatedFrame.BeaconInterval);
                Assert.AreEqual (ssidInfoElement, recreatedFrame.InformationElements [0]);
                
                Assert.AreEqual (fcs, recreatedFrame.FrameCheckSequence);
            }
Example #11
0
        public static void Main(String[] args)
        {
            // Print SharpPcap version
            String ver = SharpPcap.Version.VersionString;

            Console.WriteLine("PacketDotNet example using SharpPcap {0}", ver);

            // Retrieve the device list
            var devices = AirPcapDeviceList.Instance;

            // If no devices were found print an error
            if (devices.Count < 1)
            {
                Console.WriteLine("No devices were found on this machine");
                return;
            }

            Console.WriteLine();
            Console.WriteLine("The following devices are available on this machine:");
            Console.WriteLine("----------------------------------------------------");
            Console.WriteLine();

            Int32 i = 0;

            // Print out the devices
            foreach (var dev in devices)
            {
                /* Description */
                Console.WriteLine("{0}) {1} {2}", i, dev.Name, dev.Description);
                i++;
            }

            Console.WriteLine();
            Console.Write("-- Please choose a device to capture: ");
            i = Int32.Parse(Console.ReadLine());

            // Register a cancle handler that lets us break out of our capture loop
            // since we currently need to synchronously receive packets in order to get
            // raw packets. Future versions of SharpPcap are likely to
            // return ONLY raw packets at which time we can simplify this code and
            // use a PcapDevice.OnPacketArrival handler
            Console.CancelKeyPress += HandleCancelKeyPress;

            var device = (AirPcapDevice)devices [i];

            // Open the device for capturing
            Int32 readTimeoutMilliseconds = 1000;

            device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
            device.FcsValidation = AirPcapValidationType.ACCEPT_CORRECT_FRAMES;

            Console.WriteLine();
            Console.WriteLine("-- Listening on {0}, hit 'ctrl-c' to stop...",
                              device.Name);

            while (stopCapturing == false)
            {
                var rawCapture = device.GetNextPacket();

                // null packets can be returned in the case where
                // the GetNextRawPacket() timed out, we should just attempt
                // to retrieve another packet by looping the while() again
                if (rawCapture == null)
                {
                    // go back to the start of the while()
                    continue;
                }

                // use PacketDotNet to parse this packet and print out
                // its high level information
                Packet   p        = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                MacFrame macFrame = (MacFrame)p.PayloadPacket;
                if ((macFrame != null) &&
                    (macFrame.FrameControl.SubType == FrameControlField.FrameSubTypes.ManagementBeacon))
                {
                    BeaconFrame beaconFrame = (BeaconFrame)macFrame;
                    var         ie          = beaconFrame.InformationElements.FindFirstById(InformationElement.ElementId.ServiceSetIdentity);
                    Console.WriteLine("Network: {0}, Access Point Address: {1}", Encoding.UTF8.GetString(ie.Value), beaconFrame.SourceAddress);
                }
            }

            Console.WriteLine("-- Capture stopped");

            // Print out the device statistics
            Console.WriteLine(device.Statistics.ToString());

            // Close the pcap device
            device.Close();
        }
Example #12
0
        public void ProcessPacket(Packet packet, DateTime ArrivalDate)
        {
            PacketDotNet.Ieee80211.BeaconFrame       beacon       = packet as PacketDotNet.Ieee80211.BeaconFrame;
            PacketDotNet.Ieee80211.ProbeRequestFrame probeRequest = packet as PacketDotNet.Ieee80211.ProbeRequestFrame;
            PacketDotNet.Ieee80211.QosDataFrame      DataFrame    = packet as PacketDotNet.Ieee80211.QosDataFrame;

            PacketDotNet.Ieee80211.DeauthenticationFrame   DeAuthFrame      = packet as PacketDotNet.Ieee80211.DeauthenticationFrame;
            PacketDotNet.Ieee80211.AssociationRequestFrame AuthRequestFrame = packet as PacketDotNet.Ieee80211.AssociationRequestFrame;

            PacketDotNet.Ieee80211.DataDataFrame DataDataFrame = packet as PacketDotNet.Ieee80211.DataDataFrame;

            if (beacon != null)
            {
                BeaconFrame beaconFrame = new BeaconFrame(beacon, ArrivalDate);
                _beacons.Add(beaconFrame);

                long MacAddrNumber = Utils.MacToLong(beaconFrame.MacAddress);

                //check for APs with this Mac Address
                AccessPoint AP = null;

                if (!_accessPoints.TryGetValue(MacAddrNumber, out AP))
                {
                    AP = new AccessPoint(beaconFrame);
                    _accessPoints.Add(MacAddrNumber, AP);
                }
                AP.AddBeaconFrame(beaconFrame);

                if (onReadAccessPoint != null)
                {
                    onReadAccessPoint(AP);
                }
            }
            else if (probeRequest != null)
            {
                ProbePacket probe   = new ProbePacket(probeRequest, ArrivalDate);
                Station     station = null;

                long MacAddrNumber = Utils.MacToLong(probe.SourceMacAddress);

                if (!_stations.TryGetValue(MacAddrNumber, out station))
                {
                    station = new Station(probe);
                    _stations.Add(MacAddrNumber, station);
                }

                station.AddProbe(probe);

                if (onReadStation != null)
                {
                    onReadStation(station);
                }
            }
            else if (DataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataFrame, ArrivalDate);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                {
                    onReadDataFrame(_dataFrame);
                }
            }
            else if (DataDataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataDataFrame, ArrivalDate);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                {
                    onReadDataFrame(_dataFrame);
                }
            }
            else if (AuthRequestFrame != null)
            {
                _authRequestFrames.Add(new AuthRequestFrame(AuthRequestFrame, ArrivalDate));
            }
        }
Example #13
0
 public AccessPoint(BeaconFrame beaconFrame)
 {
     this.BeaconFrame  = beaconFrame;
     this.BeaconFrames = new List <BeaconFrame>();
 }
Example #14
0
 internal void AddBeaconFrame(BeaconFrame beaconFrame)
 {
     this.BeaconFrames.Add(beaconFrame);
 }
Example #15
0
        private void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            packetsProcessed++;

            if (packetsProcessed == 38)
            {
            }

            if (e.Packet.LinkLayerType == PacketDotNet.LinkLayers.Ieee80211)
            {
                Packet packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
                PacketDotNet.Ieee80211.BeaconFrame       beacon       = packet as PacketDotNet.Ieee80211.BeaconFrame;
                PacketDotNet.Ieee80211.ProbeRequestFrame probeRequest = packet as PacketDotNet.Ieee80211.ProbeRequestFrame;
                PacketDotNet.Ieee80211.QosDataFrame      DataFrame    = packet as PacketDotNet.Ieee80211.QosDataFrame;

                PacketDotNet.Ieee80211.DeauthenticationFrame   DeAuthFrame = packet as PacketDotNet.Ieee80211.DeauthenticationFrame;
                PacketDotNet.Ieee80211.AssociationRequestFrame AuthFrame2  = packet as PacketDotNet.Ieee80211.AssociationRequestFrame;


                PacketDotNet.Ieee80211.DataDataFrame DataDataFrame = packet as PacketDotNet.Ieee80211.DataDataFrame;


                if (beacon != null)
                {
                    BeaconFrame beaconFrame = new BeaconFrame(beacon, e.Packet.Timeval.Date);
                    _beacons.Add(beaconFrame);

                    long MacAddrNumber = MacToLong(beaconFrame.MacAddress);

                    //check for APs with this Mac Address
                    AccessPoint AP = null;

                    if (!_accessPoints.TryGetValue(MacAddrNumber, out AP))
                    {
                        AP = new AccessPoint(beaconFrame);
                        _accessPoints.Add(MacAddrNumber, AP);
                    }
                    AP.AddBeaconFrame(beaconFrame);
                }
                else if (probeRequest != null)
                {
                    ProbePacket probe   = new ProbePacket(probeRequest, e.Packet.Timeval.Date);
                    Station     station = null;

                    long MacAddrNumber = MacToLong(probe.SourceMacAddress);

                    if (!_stations.TryGetValue(MacAddrNumber, out station))
                    {
                        station = new Station(probe);
                        _stations.Add(MacAddrNumber, station);
                    }

                    station.AddProbe(probe);
                }
                else if (DataFrame != null)
                {
                    DataFrame _dataFrame = new Packets.DataFrame(DataFrame, e.Packet.Timeval.Date);

                    //invalid packets are useless, probably encrypted
                    if (_dataFrame.IsValidPacket)
                    {
                        _dataFrames.Add(_dataFrame);
                    }
                }
                else if (DataDataFrame != null)
                {
                }
            }
        }
Example #16
0
			public void Test_ConstructorWithCorruptBuffer ()
			{
				//buffer is way too short for frame. We are just checking it doesn't throw
				byte[] corruptBuffer = new byte[]{0x01};
				BeaconFrame frame = new BeaconFrame(new ByteArraySegment(corruptBuffer));
				Assert.IsFalse(frame.FCSValid);
			}
Example #17
0
            /// <summary>
            /// Parses the <see cref="Kavprot.Packets.Utils.ByteArraySegment"/> into a MacFrame.
            /// </summary>
            /// <returns>
            /// The parsed MacFrame or null if it could not be parsed.
            /// </returns>
            /// <param name='bas'>
            /// The bytes of the packet. bas.Offset should point to the first byte in the mac frame.
            /// </param>
            /// <remarks>If the provided bytes contain the FCS then call <see cref="MacFrame.ParsePacketWithFcs"/> instead. The presence of the
            /// FCS is usually determined by configuration of the device used to capture the packets.</remarks>
            public static MacFrame ParsePacket(ByteArraySegment bas)
            {
                if (bas.Length < MacFields.FrameControlLength)
                {
                    //there isn't enough data to even try and work out what type of packet it is
                    return(null);
                }
                //this is a bit ugly as we will end up parsing the framecontrol field twice, once here and once
                //inside the packet constructor. Could create the framecontrol and pass it to the packet but I think that is equally ugly
                FrameControlField frameControl = new FrameControlField(
                    EndianBitConverter.Big.ToUInt16(bas.Bytes, bas.Offset));

                MacFrame macFrame = null;

                switch (frameControl.SubType)
                {
                case FrameControlField.FrameSubTypes.ManagementAssociationRequest:
                {
                    macFrame = new AssociationRequestFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementAssociationResponse:
                {
                    macFrame = new AssociationResponseFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementReassociationRequest:
                {
                    macFrame = new ReassociationRequestFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementReassociationResponse:
                {
                    macFrame = new AssociationResponseFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementProbeRequest:
                {
                    macFrame = new ProbeRequestFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementProbeResponse:
                {
                    macFrame = new ProbeResponseFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementReserved0:
                    break; //TODO

                case FrameControlField.FrameSubTypes.ManagementReserved1:
                    break; //TODO

                case FrameControlField.FrameSubTypes.ManagementBeacon:
                {
                    macFrame = new BeaconFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementATIM:
                    break; //TODO

                case FrameControlField.FrameSubTypes.ManagementDisassociation:
                {
                    macFrame = new DisassociationFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementAuthentication:
                {
                    macFrame = new AuthenticationFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementDeauthentication:
                {
                    macFrame = new DeauthenticationFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementAction:
                {
                    macFrame = new ActionFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ManagementReserved3:
                    break; //TODO

                case FrameControlField.FrameSubTypes.ControlBlockAcknowledgmentRequest:
                {
                    macFrame = new BlockAcknowledgmentRequestFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlBlockAcknowledgment:
                {
                    macFrame = new BlockAcknowledgmentFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlPSPoll:
                    break; //TODO

                case FrameControlField.FrameSubTypes.ControlRTS:
                {
                    macFrame = new RtsFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlCTS:
                {
                    macFrame = new CtsFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlACK:
                {
                    macFrame = new AckFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlCFEnd:
                {
                    macFrame = new ContentionFreeEndFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.ControlCFEndCFACK:
                    break; //TODO

                case FrameControlField.FrameSubTypes.Data:
                case FrameControlField.FrameSubTypes.DataCFACK:
                case FrameControlField.FrameSubTypes.DataCFPoll:
                case FrameControlField.FrameSubTypes.DataCFAckCFPoll:
                {
                    macFrame = new DataDataFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.DataNullFunctionNoData:
                case FrameControlField.FrameSubTypes.DataCFAckNoData:
                case FrameControlField.FrameSubTypes.DataCFPollNoData:
                case FrameControlField.FrameSubTypes.DataCFAckCFPollNoData:
                {
                    macFrame = new NullDataFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.QosData:
                case FrameControlField.FrameSubTypes.QosDataAndCFAck:
                case FrameControlField.FrameSubTypes.QosDataAndCFPoll:
                case FrameControlField.FrameSubTypes.QosDataAndCFAckAndCFPoll:
                {
                    macFrame = new QosDataFrame(bas);
                    break;
                }

                case FrameControlField.FrameSubTypes.QosNullData:
                case FrameControlField.FrameSubTypes.QosCFAck:
                case FrameControlField.FrameSubTypes.QosCFPoll:
                case FrameControlField.FrameSubTypes.QosCFAckAndCFPoll:
                {
                    macFrame = new QosNullDataFrame(bas);
                    break;
                }

                default:
                    //this is an unsupported (and unknown) packet type
                    break;
                }

                return(macFrame);
            }
Example #18
0
        public void ProcessPacket(Packet packet, DateTime ArrivalDate, int Channel)
        {
            PacketDotNet.Ieee80211.BeaconFrame       beacon       = packet as PacketDotNet.Ieee80211.BeaconFrame;
            PacketDotNet.Ieee80211.ProbeRequestFrame probeRequest = packet as PacketDotNet.Ieee80211.ProbeRequestFrame;
            PacketDotNet.Ieee80211.QosDataFrame      DataFrame    = packet as PacketDotNet.Ieee80211.QosDataFrame;

            PacketDotNet.Ieee80211.DeauthenticationFrame   DeAuthFrame      = packet as PacketDotNet.Ieee80211.DeauthenticationFrame;
            PacketDotNet.Ieee80211.AssociationRequestFrame AuthRequestFrame = packet as PacketDotNet.Ieee80211.AssociationRequestFrame;

            PacketDotNet.Ieee80211.DataDataFrame DataDataFrame = packet as PacketDotNet.Ieee80211.DataDataFrame;
            PacketDotNet.Ieee80211.RadioPacket   radioFrame    = packet as PacketDotNet.Ieee80211.RadioPacket;

            if (packet != null && false)//LiveCaptureMode)
            {
                _allFrames.Add(new AnyPacketFrame(ArrivalDate, packet, Channel));
            }

            if (radioFrame != null)
            {
                PacketDotNet.Ieee80211.FrameControlField.FrameSubTypes type = ((PacketDotNet.Ieee80211.MacFrame)radioFrame.PayloadPacket).FrameControl.SubType;
                if (type == PacketDotNet.Ieee80211.FrameControlField.FrameSubTypes.ManagementBeacon)
                {
                    beacon = new PacketDotNet.Ieee80211.BeaconFrame(new PacketDotNet.Utils.ByteArraySegment(packet.Bytes));
                }
                else if (type == PacketDotNet.Ieee80211.FrameControlField.FrameSubTypes.Data)
                {
                    DataFrame = new PacketDotNet.Ieee80211.QosDataFrame(new PacketDotNet.Utils.ByteArraySegment(packet.Bytes));
                }
            }
            if (beacon != null)
            {
                BeaconFrame beaconFrame = new BeaconFrame(beacon, ArrivalDate, Channel);
                _beacons.Add(beaconFrame);

                long MacAddrNumber = Utils.MacToLong(beaconFrame.MacAddress);

                //check for APs with this Mac Address
                AccessPoint AP = null;

                if (!_accessPoints.TryGetValue(MacAddrNumber, out AP))
                {
                    AP = new AccessPoint(beaconFrame);
                    _accessPoints.Add(MacAddrNumber, AP);
                }
                AP.AddBeaconFrame(beaconFrame);

                if (onReadAccessPoint != null)
                {
                    onReadAccessPoint(AP);
                }
            }
            else if (probeRequest != null)
            {
                ProbePacket probe   = new ProbePacket(probeRequest, ArrivalDate);
                Station     station = null;

                long MacAddrNumber = Utils.MacToLong(probe.SourceMacAddress);

                if (!_stations.TryGetValue(MacAddrNumber, out station))
                {
                    station = new Station(probe);
                    _stations.Add(MacAddrNumber, station);
                }

                station.AddProbe(probe);

                if (onReadStation != null)
                {
                    onReadStation(station);
                }
            }
            /**/ else if (DataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataFrame, ArrivalDate, Channel);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                {
                    onReadDataFrame(_dataFrame);
                }
            }
            else if (DataDataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataDataFrame, ArrivalDate, Channel);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                {
                    onReadDataFrame(_dataFrame);
                }
            }
            else if (AuthRequestFrame != null)
            {
                _authRequestFrames.Add(new AuthRequestFrame(AuthRequestFrame, ArrivalDate));
            }
            else if (radioFrame != null)
            {
            }
        }
Example #19
0
        public void ProcessPacket(Packet packet, DateTime ArrivalDate)
        {
            PacketDotNet.Ieee80211.BeaconFrame beacon = packet as PacketDotNet.Ieee80211.BeaconFrame;
            PacketDotNet.Ieee80211.ProbeRequestFrame probeRequest = packet as PacketDotNet.Ieee80211.ProbeRequestFrame;
            PacketDotNet.Ieee80211.QosDataFrame DataFrame = packet as PacketDotNet.Ieee80211.QosDataFrame;

            PacketDotNet.Ieee80211.DeauthenticationFrame DeAuthFrame = packet as PacketDotNet.Ieee80211.DeauthenticationFrame;
            PacketDotNet.Ieee80211.AssociationRequestFrame AuthRequestFrame = packet as PacketDotNet.Ieee80211.AssociationRequestFrame;

            PacketDotNet.Ieee80211.DataDataFrame DataDataFrame = packet as PacketDotNet.Ieee80211.DataDataFrame;

            if (beacon != null)
            {
                BeaconFrame beaconFrame = new BeaconFrame(beacon, ArrivalDate);
                _beacons.Add(beaconFrame);

                long MacAddrNumber = Utils.MacToLong(beaconFrame.MacAddress);

                //check for APs with this Mac Address
                AccessPoint AP = null;

                if (!_accessPoints.TryGetValue(MacAddrNumber, out AP))
                {
                    AP = new AccessPoint(beaconFrame);
                    _accessPoints.Add(MacAddrNumber, AP);
                }
                AP.AddBeaconFrame(beaconFrame);

                if (onReadAccessPoint != null)
                    onReadAccessPoint(AP);
            }
            else if (probeRequest != null)
            {
                ProbePacket probe = new ProbePacket(probeRequest, ArrivalDate);
                Station station = null;

                long MacAddrNumber = Utils.MacToLong(probe.SourceMacAddress);

                if (!_stations.TryGetValue(MacAddrNumber, out station))
                {
                    station = new Station(probe);
                    _stations.Add(MacAddrNumber, station);
                }

                station.AddProbe(probe);

                if (onReadStation != null)
                    onReadStation(station);
            }
            else if (DataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataFrame, ArrivalDate);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                    onReadDataFrame(_dataFrame);
            }
            else if (DataDataFrame != null)
            {
                DataFrame _dataFrame = new Packets.DataFrame(DataDataFrame, ArrivalDate);

                _dataFrames.Add(_dataFrame);

                if (onReadDataFrame != null)
                    onReadDataFrame(_dataFrame);
            }
            else if (AuthRequestFrame != null)
            {
                _authRequestFrames.Add(new AuthRequestFrame(AuthRequestFrame, ArrivalDate));
            }
        }