예제 #1
0
        public static string ToString(Ieee802Dot11Packet ieee801Dot11)
        {
            string result = "Protocol IEEE 802.11 parser\n";

            result += $"Encapsulated packet length {ieee801Dot11.packet.Length} bytes; {BitConverter.ToString(ieee801Dot11.packet)}\n";
            result += $"\tFrameControl: {ieee801Dot11.frame_control}\n";
            result += $"\tDuration: {ieee801Dot11.duration}\n";
            result += $"\tAddress1: {BitConverter.ToString(ieee801Dot11.address1)}\n";
            result += $"\tAddress2: {BitConverter.ToString(ieee801Dot11.address2)}\n";
            result += $"\tAddress3: {BitConverter.ToString(ieee801Dot11.address3)}\n";
            result += $"\tSequenceControl: {ieee801Dot11.sequence_control}\n";
            if (ieee801Dot11.address4 != null)
            {
                result += $"\tAddress4: {BitConverter.ToString(ieee801Dot11.address4)}\n";
            }
            if (ieee801Dot11.frame_body != null)
            {
                result += $"\tFrameBody: {BitConverter.ToString(ieee801Dot11.frame_body)}\n";
            }
            if (ieee801Dot11.frame_body != null)
            {
                result += $"\tFCS: {ieee801Dot11.fcs}\n";
            }
            result += "\n";
            return(result);
        }
예제 #2
0
        public static Ieee802Dot11Packet Parse(byte[] packet)
        {
            if (packet.Length < 24)
            {
                throw new Exception("/Its no IEEE 802.11 packet/");
            }

            var result = new Ieee802Dot11Packet
            {
                packet           = packet,
                frame_control    = GetFrameControl(packet),
                duration         = GetDuration(packet),
                address1         = GetAddress(packet, 4),
                address2         = GetAddress(packet, 10),
                address3         = GetAddress(packet, 16),
                sequence_control = GetSequenceControl(packet),
                address4         = GetAddress(packet, 24),
                frame_body       = GetFrameBody(packet),
                fcs = GetFcs(packet)
            };

            if (GetVersion(result) != "0")
            {
                throw new Exception("/Its no IEEE 802.11 packet/");
            }
            return(result);
        }
예제 #3
0
        public static string FrameControlToString(Ieee802Dot11Packet ieee801Dot11)
        {
            string result = $"\tFramecontrol: Version: {GetVersion(ieee801Dot11)}; Type: {GetType(ieee801Dot11)}; Subtype: {GetSubtype(ieee801Dot11)}; ToDS: {GetToDs(ieee801Dot11).ToString()}; FromDS: {GetFromDs(ieee801Dot11).ToString()};\n";

            result += $"\tAddress1: {BitConverter.ToString(ieee801Dot11.address1)}; Address2: {BitConverter.ToString(ieee801Dot11.address2)}; Address3: {BitConverter.ToString(ieee801Dot11.address3)};\n";
            result += "\n";
            return(result);
        }
예제 #4
0
 private static string GetGadgetAddress(Ieee802Dot11Packet ieee801Dot11)
 {
     if (GetType(ieee801Dot11) == "Managament" && (GetSubtype(ieee801Dot11) == "Probe request" || GetSubtype(ieee801Dot11) == "Association request"))
     {
         return(BitConverter.ToString(ieee801Dot11.address2).Replace("-", ":"));
     }
     return(null);
 }
예제 #5
0
        public static string GetTransmitterAddress(Ieee802Dot11Packet ieee801Dot11)
        {
            bool fromDs = GetFromDs(ieee801Dot11);
            bool toDs   = GetToDs(ieee801Dot11);

            if (toDs && fromDs)
            {
                return(BitConverter.ToString(ieee801Dot11.address2).Replace("-", ":"));
            }
            return(null);
        }
예제 #6
0
        public static string GetDestinationAddress(Ieee802Dot11Packet ieee801Dot11)
        {
            bool fromDs = GetFromDs(ieee801Dot11);
            bool toDs   = GetToDs(ieee801Dot11);

            if ((!toDs && !fromDs) || (!toDs))
            {
                return(BitConverter.ToString(ieee801Dot11.address1).Replace("-", ":"));
            }
            return(BitConverter.ToString(ieee801Dot11.address3).Replace("-", ":"));
        }
예제 #7
0
        // Parse FrameControl

        public static string FrameControlBreifToString(Ieee802Dot11Packet ieee801Dot11)
        {
            string result = $"\tType: {GetType(ieee801Dot11)}; Subtype: {GetSubtype(ieee801Dot11)}; ToDS: {GetToDs(ieee801Dot11).ToString()}; FromDS: {GetFromDs(ieee801Dot11).ToString()};\n";

            result += $"\tAddress1: {BitConverter.ToString(ieee801Dot11.address1)}; Address2: {BitConverter.ToString(ieee801Dot11.address2)}; Address3: {BitConverter.ToString(ieee801Dot11.address3)};";
            if (ieee801Dot11.address4 != null)
            {
                result += $" Address4: {BitConverter.ToString(ieee801Dot11.address4)}";
            }
            result += "\n";
            result += "\n";
            return(result);
        }
예제 #8
0
        public static string GetType(Ieee802Dot11Packet ieee801Dot11)
        {
            var type = (ieee801Dot11.frame_control & 0x000c) >> 2;

            switch (type)
            {
            case 0: return("Managament");

            case 1: return("Control");

            case 2: return("Data");

            default: return("Reserved");
            }
        }
예제 #9
0
        public static string GetBssidAddress(Ieee802Dot11Packet ieee801Dot11)
        {
            bool fromDs = GetFromDs(ieee801Dot11);
            bool toDs   = GetToDs(ieee801Dot11);

            if (!toDs && !fromDs)
            {
                return(BitConverter.ToString(ieee801Dot11.address3).Replace("-", ":"));
            }
            if (!toDs)
            {
                return(BitConverter.ToString(ieee801Dot11.address2).Replace("-", ":"));
            }
            if (!fromDs)
            {
                return(BitConverter.ToString(ieee801Dot11.address1).Replace("-", ":"));
            }
            return(null);
        }
예제 #10
0
 public static bool IsData(Ieee802Dot11Packet ieee801Dot11)
 {
     return(GetType(ieee801Dot11) == "Data" && GetSubtype(ieee801Dot11) != "Reserved");
 }
예제 #11
0
 public static bool IsControl(Ieee802Dot11Packet ieee801Dot11)
 {
     return(GetType(ieee801Dot11) == "Control" && GetSubtype(ieee801Dot11) != "Reserved");
 }
예제 #12
0
 public static bool IsManagament(Ieee802Dot11Packet ieee801Dot11)
 {
     return(GetType(ieee801Dot11) == "Managament" && GetSubtype(ieee801Dot11) != "Reserved");
 }
예제 #13
0
 public static bool GetFromDs(Ieee802Dot11Packet ieee801Dot11)
 {
     return((ieee801Dot11.frame_control & 0x0200) > 0);
 }
예제 #14
0
        public static string GetSubtype(Ieee802Dot11Packet ieee801Dot11)
        {
            var type    = (ieee801Dot11.frame_control & 0x000c) >> 2;
            var subtype = (ieee801Dot11.frame_control & 0x00f0) >> 4;

            switch (type)
            {
            case 0:
                switch (subtype)
                {
                case 0: return("Association request");

                case 1: return("Association response");

                case 2: return("Reassociation request");

                case 3: return("Association response");

                case 4: return("Probe request");

                case 5: return("Probe response");

                case 8: return("Beacon");

                case 9: return("ATIM");

                case 10: return("Diassociation");

                case 11: return("Authentification");

                case 12: return("Deauthentification");

                default: return("Reserved");
                }

            case 1:
                switch (subtype)
                {
                case 10: return("Power save");

                case 11: return("Request to send");

                case 12: return("Clear to send");

                case 13: return("Acknowledgment");

                case 15: return("CF-End + CF-Ack");

                default: return("Reserved");
                }

            case 2:
                switch (subtype)
                {
                case 0: return("Data");

                case 1: return("Data + CF-Ack");

                case 2: return("Data + CF-Pull");

                case 3: return("Data + CF-Ack + CF-Pull");

                case 4: return("No data");

                case 5: return("CF-Ack (no data)");

                case 6: return("CF-Pull (no data)");

                case 7: return("CF-Ack + CF-Pull (no data)");

                default: return("Reserved");
                }

            default: return("Reserved");
            }
        }
예제 #15
0
        public static string GetVersion(Ieee802Dot11Packet ieee801Dot11)
        {
            var version = ieee801Dot11.frame_control & 0x0003;

            return(version.ToString());
        }