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); }
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); }
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); }
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); }
public void Test_FindFirstById_ElementNotPresent() { BeaconFrame beaconFrame = LoadBeaconFrameFromFile("../../CaptureFiles/80211_beacon_frame.pcap"); InformationElement infoElement = beaconFrame.InformationElements.FindFirstById(InformationElement.ElementId.ChallengeText); Assert.IsNull(infoElement); }
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); }
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); }
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); }
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); }
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); }
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(); }
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)); } }
public AccessPoint(BeaconFrame beaconFrame) { this.BeaconFrame = beaconFrame; this.BeaconFrames = new List <BeaconFrame>(); }
internal void AddBeaconFrame(BeaconFrame beaconFrame) { this.BeaconFrames.Add(beaconFrame); }
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) { } } }
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); }
/// <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); }
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) { } }
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)); } }