public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_contention_free_end_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                ContentionFreeEndFrame frame = (ContentionFreeEndFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ControlCFEnd, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsTrue (frame.FrameControl.Order);
                Assert.AreEqual (0, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("FFFFFFFFFFFF", frame.ReceiverAddress.ToString ().ToUpper ());
                Assert.AreEqual ("001B2FDCFC12", frame.BssId.ToString ().ToUpper ());

                Assert.AreEqual (0x0AE8A403, frame.FrameCheckSequence);
                Assert.AreEqual (16, frame.FrameSize);
            }
            public void Test_Constructor_EncryptedDataFrame()
            {
                var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_encrypted_data_frame.pcap");
                dev.Open();
                var rawCapture = dev.GetNextPacket();
                dev.Close();

                Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                DataDataFrame frame = (DataDataFrame)p.PayloadPacket;

                Assert.AreEqual(0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual(FrameControlField.FrameSubTypes.Data, frame.FrameControl.SubType);
                Assert.IsFalse(frame.FrameControl.ToDS);
                Assert.IsTrue(frame.FrameControl.FromDS);
                Assert.IsFalse(frame.FrameControl.MoreFragments);
                Assert.IsFalse(frame.FrameControl.Retry);
                Assert.IsFalse(frame.FrameControl.PowerManagement);
                Assert.IsFalse(frame.FrameControl.MoreData);
                Assert.IsTrue(frame.FrameControl.Wep);
                Assert.IsFalse(frame.FrameControl.Order);
                Assert.AreEqual(0, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual("33330000000C", frame.DestinationAddress.ToString().ToUpper());
                Assert.AreEqual("00173FB72C29", frame.SourceAddress.ToString().ToUpper());
                Assert.AreEqual("0024B2F8D706", frame.BssId.ToString().ToUpper());
                Assert.AreEqual(0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual(1561, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual(0xC77B6323, frame.FrameCheckSequence);
                Assert.AreEqual(24, frame.FrameSize);
                Assert.AreEqual(218, frame.PayloadData.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_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_block_acknowledgment_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                BlockAcknowledgmentFrame frame = (BlockAcknowledgmentFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ControlBlockAcknowledgment, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (0, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("0024B2F8D706", frame.ReceiverAddress.ToString ().ToUpper ());
                Assert.AreEqual ("7CC5376D16E7", frame.TransmitterAddress.ToString ().ToUpper ());

                Assert.AreEqual (BlockAcknowledgmentControlField.AcknowledgementPolicy.Delayed, frame.BlockAcknowledgmentControl.Policy);
                Assert.IsFalse (frame.BlockAcknowledgmentControl.MultiTid);
                Assert.IsTrue (frame.BlockAcknowledgmentControl.CompressedBitmap);
                Assert.AreEqual (0, frame.BlockAcknowledgmentControl.Tid);
                Assert.AreEqual (0, frame.BlockAckStartingSequenceControl);
                Assert.AreEqual (8, frame.BlockAckBitmap.Length);

                Assert.AreEqual (0x9BB909C2, frame.FrameCheckSequence);
                Assert.AreEqual (28, frame.FrameSize);
            }
        public void ICMPv4Parsing ()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/ICMPv4.pcap");
            dev.Open();
            var rawCapture = dev.GetNextPacket();
            dev.Close();

            // Parse an icmp request
            Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

            Assert.IsNotNull(p);

            var icmp = ICMPv4Packet.GetEncapsulated(p);
            Console.WriteLine(icmp.GetType());

            Assert.AreEqual(ICMPv4TypeCodes.EchoRequest, icmp.TypeCode);
            Assert.AreEqual(0xe05b, icmp.Checksum);
            Assert.AreEqual(0x0200, icmp.ID);
            Assert.AreEqual(0x6b00, icmp.Sequence);

            // check that the message matches
            string expectedString = "abcdefghijklmnopqrstuvwabcdefghi";
            byte[] expectedData = System.Text.ASCIIEncoding.ASCII.GetBytes(expectedString);
            Assert.AreEqual(expectedData, icmp.Data);
        }
        public void IPv6PacketTestParsing()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/ipv6_icmpv6_packet.pcap");
            dev.Open();

            RawCapture rawCapture;
            int packetIndex = 0;
            while((rawCapture = dev.GetNextPacket()) != null)
            {
                var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                Console.WriteLine("got packet");
                switch(packetIndex)
                {
                case 0:
                    VerifyPacket0(p, rawCapture);
                    break;
                default:
                    Assert.Fail("didn't expect to get to packetIndex " + packetIndex);
                    break;
                }

                packetIndex++;
            }

            dev.Close();
        }
            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, (int) 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 Test_Constructor()
            {
                var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_qos_null_data_frame.pcap");
                dev.Open();
                var rawCapture = dev.GetNextPacket();
                dev.Close();

                Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                QosNullDataFrame frame = (QosNullDataFrame)p.PayloadPacket;

                Assert.AreEqual(0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual(FrameControlField.FrameSubTypes.QosNullData, frame.FrameControl.SubType);
                Assert.IsFalse(frame.FrameControl.ToDS);
                Assert.IsTrue(frame.FrameControl.FromDS);
                Assert.IsFalse(frame.FrameControl.MoreFragments);
                Assert.IsFalse(frame.FrameControl.Retry);
                Assert.IsFalse(frame.FrameControl.PowerManagement);
                Assert.IsFalse(frame.FrameControl.MoreData);
                Assert.IsFalse(frame.FrameControl.Wep);
                Assert.IsFalse(frame.FrameControl.Order);
                Assert.AreEqual(314, frame.Duration.Field);
                Assert.AreEqual("78ACC00A5E0E", frame.DestinationAddress.ToString().ToUpper());
                Assert.AreEqual("00223FC1F378", frame.BssId.ToString().ToUpper());
                Assert.AreEqual("00223FC1F378", frame.SourceAddress.ToString().ToUpper());
                Assert.AreEqual(0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual(2292, frame.SequenceControl.SequenceNumber);
                Assert.AreEqual(0x00, frame.QosControl);
                Assert.AreEqual(0xDBF2B119, frame.FrameCheckSequence);
                Assert.AreEqual(26, frame.FrameSize);
            }
            public void Test_Constructor_AddBlockAckResponseReport ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_block_ack_response_action_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                ActionFrame frame = (ActionFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementAction, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (314, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("0024B2F8D706", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("7CC5376D16E7", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("0024B2F8D706", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (3826, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual (0x6D3FCFA3, frame.FrameCheckSequence);
                Assert.AreEqual (24, frame.FrameSize);
                Assert.AreEqual (9, frame.PayloadData.Length);
            }
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_probe_request_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                ProbeRequestFrame frame = (ProbeRequestFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementProbeRequest, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (0, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("FFFFFFFFFFFF", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("0020008AB749", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("FFFFFFFFFFFF", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (234, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual (0xD83CB03D, frame.FrameCheckSequence);
                Assert.AreEqual (45, frame.FrameSize);
            }
        public void WakeOnLanParsing()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/wol.pcap");
            dev.Open();

            RawCapture rawCapture;

            int packetIndex = 0;
            while((rawCapture = dev.GetNextPacket()) != null)
            {
                var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                Assert.IsNotNull(p);

                var wol = PacketDotNet.WakeOnLanPacket.GetEncapsulated(p);
                Assert.IsNotNull(p);

                if(packetIndex == 0)
                    Assert.AreEqual(wol.DestinationMAC, PhysicalAddress.Parse("00-0D-56-DC-9E-35"));

                if(packetIndex == 3)
                    Assert.AreEqual(wol.DestinationMAC, PhysicalAddress.Parse("00-90-27-85-CF-01"));

                packetIndex++;
            }
            dev.Close();
        }
Beispiel #12
0
        public void UDPData()
        {
            RawCapture rawCapture;
            UdpPacket u;
            Packet p;

            var dev = new CaptureFileReaderDevice("../../CaptureFiles/udp_dns_request_response.pcap");
            dev.Open();

            // check the first packet
            rawCapture = dev.GetNextPacket();

            p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
            Assert.IsNotNull(p);

            u = (UdpPacket)p.Extract(typeof(UdpPacket));
            Assert.IsNotNull(u, "Expected a non-null UdpPacket");
            Assert.AreEqual(41 - u.Header.Length,
                            u.PayloadData.Length, "UDPData.Length mismatch");

            // check the second packet
            rawCapture = dev.GetNextPacket();
            p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

            Assert.IsNotNull(p);

            u = (UdpPacket)p.Extract(typeof(UdpPacket));
            Assert.IsNotNull(u, "Expected u to be a UdpPacket");
            Assert.AreEqual(356 - u.Header.Length,
                            u.PayloadData.Length, "UDPData.Length mismatch");

            Console.WriteLine("u is {0}", u.ToString());

            dev.Close();
        }
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_null_data_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                NullDataFrame frame = (NullDataFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.DataNullFunctionNoData, frame.FrameControl.SubType);
                Assert.IsTrue (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (314, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("001B2F02DC6C", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("2477030C721C", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("001B2F02DC6C", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (1245, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual (0x8DAD458C, frame.FrameCheckSequence);
                Assert.AreEqual (24, frame.FrameSize);
            }
Beispiel #14
0
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_ack_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                AckFrame frame = (AckFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ControlACK, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (0, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("F8DB7F491342", frame.ReceiverAddress.ToString ().ToUpper ());
                Assert.AreEqual (0xD2F5BE07, frame.FrameCheckSequence);
                Assert.AreEqual (10, frame.FrameSize);
            }	
            public void Test_Constructor()
            {
                var dev = new CaptureFileReaderDevice("../../CaptureFiles/80211_authentication_frame.pcap");
                dev.Open();
                var rawCapture = dev.GetNextPacket();
                dev.Close();

                Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                AuthenticationFrame frame = (AuthenticationFrame)p.PayloadPacket;

                Assert.AreEqual(0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual(FrameControlField.FrameSubTypes.ManagementAuthentication, frame.FrameControl.SubType);
                Assert.IsFalse(frame.FrameControl.ToDS);
                Assert.IsFalse(frame.FrameControl.FromDS);
                Assert.IsFalse(frame.FrameControl.MoreFragments);
                Assert.IsFalse(frame.FrameControl.Retry);
                Assert.IsFalse(frame.FrameControl.PowerManagement);
                Assert.IsFalse(frame.FrameControl.MoreData);
                Assert.IsFalse(frame.FrameControl.Wep);
                Assert.IsFalse(frame.FrameControl.Order);
                Assert.AreEqual(248, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual("0024B2F8D706", frame.DestinationAddress.ToString().ToUpper());
                Assert.AreEqual("00173FB72C29", frame.SourceAddress.ToString().ToUpper());
                Assert.AreEqual("0024B2F8D706", frame.BssId.ToString().ToUpper());
                Assert.AreEqual(0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual(1327, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual(0, frame.AuthenticationAlgorithmNumber);
                Assert.AreEqual(1, frame.AuthenticationAlgorithmTransactionSequenceNumber);
                Assert.AreEqual(AuthenticationStatusCode.Success, frame.StatusCode);

                Assert.AreEqual(0x4AE3E90F, frame.FrameCheckSequence);
                Assert.AreEqual(30, frame.FrameSize);
            }
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_disassociation_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                DisassociationFrame frame = (DisassociationFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementDisassociation, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (248, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("0024B2F8D706", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("00173FB72C29", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("0024B2F8D706", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (1311, frame.SequenceControl.SequenceNumber);
                Assert.AreEqual (ReasonCode.LeavingToRoam, frame.Reason);

                Assert.AreEqual (0xB17572A4, frame.FrameCheckSequence);
                Assert.AreEqual (26, frame.FrameSize);
            }
Beispiel #17
0
        public static void Main (string[] args)
        {
            string ver = SharpPcap.Version.VersionString;

            /* Print SharpPcap version */
            Console.WriteLine("SharpPcap {0}, ReadingCaptureFile", ver);
            Console.WriteLine();

            Console.WriteLine();

            // read the file from stdin or from the command line arguments
            string capFile;
            if(args.Length == 0)
            {
                Console.Write("-- Please enter an input capture file name: ");
                capFile = Console.ReadLine();
            } else
            {
                // use the first argument as the filename
                capFile = args[0];
            }

            Console.WriteLine("opening '{0}'", capFile);

            ICaptureDevice device;

            try
            {
                // Get an offline device
                device = new CaptureFileReaderDevice( capFile );

                // Open the device
                device.Open();
            }
            catch(Exception e)
            {
                Console.WriteLine("Caught exception when opening file" + e.ToString());
                return;
            }

            // Register our handler function to the 'packet arrival' event
            device.OnPacketArrival +=
                new PacketArrivalEventHandler( device_OnPacketArrival );

            Console.WriteLine();
            Console.WriteLine
                ("-- Capturing from '{0}', hit 'Ctrl-C' to exit...",
                capFile);

            // Start capture 'INFINTE' number of packets
            // This method will return when EOF reached.
            device.Capture();

            // Close the pcap device
            device.Close();
            Console.WriteLine("-- End of file reached.");
            Console.Write("Hit 'Enter' to exit...");
            Console.ReadLine();
        }
Beispiel #18
0
            public void ReadingRawPacketWithoutFcs ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_raw_without_fcs.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

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

                Assert.IsNotNull (p);
              
            }
            public void ReadPacketWithInvalidFcs ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_ppi_fcs_present_and_invalid.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();
                
                PpiPacket p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data) as PpiPacket;
				
				//The packet is corrupted in such a way that the type field has been changed
				//to a reserved/unused type. Therefore we don't expect there to be a packet
                Assert.IsNull (p.PayloadPacket);
                Assert.IsNotNull(p.PayloadData);
            }
			public void ReadPacketWithNoFcs()
			{
				var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_radio_without_fcs.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();
                
                RadioPacket p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data) as RadioPacket;
                Assert.IsNotNull (p.PayloadPacket);

                TsftRadioTapField tsftField = p[RadioTapType.Tsft] as TsftRadioTapField;
                Assert.IsNotNull(tsftField);
                Assert.AreEqual(38724775, tsftField.TimestampUsec);
                
                FlagsRadioTapField flagsField = p[RadioTapType.Flags] as FlagsRadioTapField;
                Assert.IsNotNull(flagsField);
                Assert.AreEqual(0, (int)flagsField.Flags);
                
                RateRadioTapField rateField = p[RadioTapType.Rate] as RateRadioTapField;
                Assert.IsNotNull(rateField);
                Assert.AreEqual(1, rateField.RateMbps);
                    
                ChannelRadioTapField channelField = p[RadioTapType.Channel] as ChannelRadioTapField;
                Assert.IsNotNull(channelField);
                Assert.AreEqual(2462, channelField.FrequencyMHz);
                Assert.AreEqual(11, channelField.Channel);
                Assert.AreEqual(RadioTapChannelFlags.Channel2Ghz | RadioTapChannelFlags.Cck, channelField.Flags);
                
                DbmAntennaSignalRadioTapField dbmSignalField = p[RadioTapType.DbmAntennaSignal] as DbmAntennaSignalRadioTapField;
                Assert.IsNotNull(dbmSignalField);
                Assert.AreEqual(-61, dbmSignalField.AntennaSignalDbm);
                
                DbmAntennaNoiseRadioTapField dbmNoiseField = p[RadioTapType.DbmAntennaNoise] as DbmAntennaNoiseRadioTapField;
                Assert.IsNotNull(dbmNoiseField);
                Assert.AreEqual(-84, dbmNoiseField.AntennaNoisedBm);
                
                AntennaRadioTapField antennaField = p[RadioTapType.Antenna] as AntennaRadioTapField;
                Assert.IsNotNull(antennaField);
                Assert.AreEqual(0, antennaField.Antenna);
                
                DbAntennaSignalRadioTapField dbSignalField = p[RadioTapType.DbAntennaSignal] as DbAntennaSignalRadioTapField;
                Assert.IsNotNull(dbSignalField);
                Assert.AreEqual(23, dbSignalField.SignalStrengthdB);
                
                MacFrame macFrame = p.PayloadPacket as MacFrame;
                Assert.IsFalse(macFrame.AppendFcs);
                Assert.IsFalse(macFrame.FCSValid);
			}
        public void PrintVerboseString()
        {
            Console.WriteLine("Loading the sample capture file");
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/PPPoEPPP.pcap");
            dev.Open();
            Console.WriteLine("Reading packet data");
            dev.GetNextPacket();
            var rawCapture = dev.GetNextPacket();
            dev.Close();
            var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

            Console.WriteLine("Parsing");
            var ppp = PPPPacket.GetEncapsulated(p);

            Console.WriteLine("Printing human readable string");
            Console.WriteLine(ppp.ToString(StringOutputType.Verbose));
        }
Beispiel #22
0
            public void FCSTest ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_association_request_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                // check that the fcs can be calculated correctly
                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                AssociationRequestFrame frame = (AssociationRequestFrame)p.PayloadPacket;
                Assert.AreEqual (0xde82c216, frame.FrameCheckSequence, "FCS mismatch");
                Assert.IsTrue (frame.FCSValid);

                // adjust the fcs of the packet and check that the FCSValid property returns false
                frame.FrameCheckSequence = 0x1;
                Assert.IsFalse (frame.FCSValid);                
            }
Beispiel #23
0
            public void Test_NoFCS ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_beacon_no_fcs.pcap");
                
                dev.Open ();
                

                RawCapture rawCapture;
                while ((rawCapture = dev.GetNextPacket ()) != null)
                {
                    Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                    Assert.IsNotNull (p.PayloadPacket);
                }

                // check that the fcs can be calculated correctly
                dev.Close ();
            }
Beispiel #24
0
        public void IpPacketFields()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/tcp.pcap");
            dev.Open();
            var rawCapture = dev.GetNextPacket();
            dev.Close();

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

            Assert.IsNotNull(p);

            var ip = (IpPacket)p.Extract(typeof(IpPacket));
            Console.WriteLine(ip.GetType());

            Assert.AreEqual(20, ip.Header.Length, "Header.Length doesn't match expected length");
            Console.WriteLine(ip.ToString());
        }
Beispiel #25
0
        public void PrintString()
        {
            Console.WriteLine("Loading the sample capture file");
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/PPPoEPPP.pcap");
            dev.Open();
            Console.WriteLine("Reading packet data");
            dev.GetNextPacket();
            var rawCapture = dev.GetNextPacket();
            dev.Close();
            var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

            Console.WriteLine("Parsing");
            var ppp = (PPPPacket)p.Extract (typeof(PPPPacket));

            Console.WriteLine("Printing human readable string");
            Console.WriteLine(ppp.ToString());
        }
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_probe_response_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                ProbeResponseFrame frame = (ProbeResponseFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementProbeResponse, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsTrue (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (314, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("0020008AB749", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("00223FCD9C26", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("00223FCD9C26", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (1468, frame.SequenceControl.SequenceNumber);

                Assert.AreEqual (0x0000047A44EF1DE0, frame.Timestamp);
                Assert.AreEqual (100, frame.BeaconInterval);

                Assert.IsTrue (frame.CapabilityInformation.IsEss);
                Assert.IsFalse (frame.CapabilityInformation.IsIbss);
                Assert.IsFalse (frame.CapabilityInformation.CfPollable);
                Assert.IsFalse (frame.CapabilityInformation.CfPollRequest);
                Assert.IsTrue (frame.CapabilityInformation.Privacy);
                Assert.IsFalse (frame.CapabilityInformation.ShortPreamble);
                Assert.IsFalse (frame.CapabilityInformation.Pbcc);
                Assert.IsFalse (frame.CapabilityInformation.ChannelAgility);
                Assert.IsTrue (frame.CapabilityInformation.ShortTimeSlot);
                Assert.IsFalse (frame.CapabilityInformation.DssOfdm);

                Assert.AreEqual (0x257202BE, frame.FrameCheckSequence);
                Assert.AreEqual (164, frame.FrameSize);
            }
        public virtual void Checksum()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/tcp.pcap");
            dev.Open();

            var rawCapture = dev.GetNextPacket();
            var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

            Assert.IsNotNull(p);

            Console.WriteLine(p.GetType());

            var t = TcpPacket.GetEncapsulated(p);
            Assert.IsNotNull(t, "Expected t to not be null");
            Console.WriteLine("Checksum: " + t.Checksum.ToString("X"));
            Assert.IsTrue(t.ValidChecksum, "ValidChecksum indicates invalid checksum");

            dev.Close();
        }
            public void Test_Constructor ()
            {
                var dev = new CaptureFileReaderDevice ("../../CaptureFiles/80211_association_response_frame.pcap");
                dev.Open ();
                var rawCapture = dev.GetNextPacket ();
                dev.Close ();

                Packet p = Packet.ParsePacket (rawCapture.LinkLayerType, rawCapture.Data);
                AssociationResponseFrame frame = (AssociationResponseFrame)p.PayloadPacket;

                Assert.AreEqual (0, frame.FrameControl.ProtocolVersion);
                Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementAssociationResponse, frame.FrameControl.SubType);
                Assert.IsFalse (frame.FrameControl.ToDS);
                Assert.IsFalse (frame.FrameControl.FromDS);
                Assert.IsFalse (frame.FrameControl.MoreFragments);
                Assert.IsFalse (frame.FrameControl.Retry);
                Assert.IsFalse (frame.FrameControl.PowerManagement);
                Assert.IsFalse (frame.FrameControl.MoreData);
                Assert.IsFalse (frame.FrameControl.Wep);
                Assert.IsFalse (frame.FrameControl.Order);
                Assert.AreEqual (314, frame.Duration.Field); //this need expanding on in the future
                Assert.AreEqual ("00173FB72C29", frame.DestinationAddress.ToString ().ToUpper ());
                Assert.AreEqual ("0024B2F8D706", frame.SourceAddress.ToString ().ToUpper ());
                Assert.AreEqual ("0024B2F8D706", frame.BssId.ToString ().ToUpper ());
                Assert.AreEqual (0, frame.SequenceControl.FragmentNumber);
                Assert.AreEqual (958, frame.SequenceControl.SequenceNumber);
                Assert.IsTrue (frame.CapabilityInformation.IsEss);
                Assert.IsFalse (frame.CapabilityInformation.IsIbss);
                Assert.IsFalse (frame.CapabilityInformation.CfPollable);
                Assert.IsFalse (frame.CapabilityInformation.CfPollRequest);
                Assert.IsTrue (frame.CapabilityInformation.Privacy);
                Assert.IsFalse (frame.CapabilityInformation.ShortPreamble);
                Assert.IsFalse (frame.CapabilityInformation.Pbcc);
                Assert.IsFalse (frame.CapabilityInformation.ChannelAgility);
                Assert.IsTrue (frame.CapabilityInformation.ShortTimeSlot);
                Assert.IsFalse (frame.CapabilityInformation.DssOfdm);
                Assert.AreEqual (AuthenticationStatusCode.Success, frame.StatusCode);
                Assert.AreEqual (2, frame.AssociationId);
                Assert.AreEqual (0xC61ACCD6, frame.FrameCheckSequence);
                Assert.AreEqual (3, frame.InformationElements.Count);
                Assert.AreEqual (57, frame.FrameSize);
            }
        public void ICMPv6Parsing ()
        {
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/ipv6_icmpv6_packet.pcap");
            dev.Open();
            var rawCapture = dev.GetNextPacket();
            dev.Close();

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

            Assert.IsNotNull(p);

            var icmp = (ICMPv6Packet)p.Extract(typeof(ICMPv6Packet));
            Console.WriteLine(icmp.GetType());

            Assert.AreEqual(ICMPv6Types.RouterSolicitation, icmp.Type);
            Assert.AreEqual(0, icmp.Code);
            Assert.AreEqual(0x5d50, icmp.Checksum);

            // Payload differs based on the icmp.Type field
        }
Beispiel #30
0
        public void IpPacket_WhenGettingPacketFragment_LeavesPacketAsPayload()
        {
            // Arrange
            var dev = new CaptureFileReaderDevice("../../CaptureFiles/udp-ip-fragmented.pcap");
            dev.Open();
            var firstRawPacket = dev.GetNextPacket();
            var secondRawPacket = dev.GetNextPacket();
            dev.Close();

            // Act
            Packet.ParsePacket(firstRawPacket.LinkLayerType, firstRawPacket.Data); // read and discard first packet
            var secondPacket = Packet.ParsePacket(secondRawPacket.LinkLayerType, secondRawPacket.Data);
            var ipFragmentPacket = secondPacket.Extract(typeof(IpPacket)) as IpPacket;

            // Assert
            Assert.IsNotNull(ipFragmentPacket, "The second packet should contain an IP packet within");
            Assert.IsNull(ipFragmentPacket.PayloadPacket, "Since packet is IP fragment, we should not have extracted a child packet");
            Assert.AreEqual(497, ipFragmentPacket.PayloadLength, "The correct payload length for this particular packet should be 497");
            Assert.AreEqual(497, ipFragmentPacket.PayloadData.Length, "The correct payload length for this particular packet should be 497");
        }
Beispiel #31
0
        //打开文件
        private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog od = new OpenFileDialog();

            od.Filter = "pcap文件|*.pcap";

            if (od.ShowDialog() == DialogResult.OK)
            {
                Clear();

                ICaptureDevice offDev = new SharpPcap.LibPcap.CaptureFileReaderDevice(od.FileName);
                RawCapture     tempPacket;
                offDev.Open();
                while ((tempPacket = offDev.GetNextPacket()) != null)
                {
                    packetList.Add(tempPacket);
                    ShowDataRows(tempPacket);
                }
                offDev.Close();
            }
        }
Beispiel #32
0
        public void ProcessPcap()
        {
            sharpPcapDict = new Dictionary <Connection, TcpRecon>();
            PcapDevice device;

            totalPackets    = 0;
            totalTCPPackets = 0;

            try
            {
                device = new SharpPcap.LibPcap.CaptureFileReaderDevice(capFile);
                device.Open();
            }
            catch (Exception ex)
            {
                ErrorMessage = "Error Loading pcap with SharpPcap: " + ex.Message;
                owner.Invoke(Complete, ips);
                return;
            }

            device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_PcapOnPacketArrival);
            device.Capture(); //parse entire pcap until EOF
            device.Close();

            foreach (TcpRecon tr in sharpPcapDict.Values)
            {
                tr.isComplete = true;
                if (tr.LastSavedOffset != tr.CurrentOffset)
                {
                    AddNewNode(tr);
                }
                tr.Close();
            }

            sharpPcapDict.Clear();
            owner.Invoke(Complete, ips);

            return;
        }