public static async Task <DeviceInformation> Parse(IPEndPoint endpoint, byte[] packet)
        {
            var version = packet[0];
            var cmd     = packet[1];
            var length  = packet[2];

            if (length + 4 > packet.Length)
            {
                return(null);
            }
            if (version == 1 && cmd == 0 && length == 0)
            {
                return(null); // drop ubnt-dp request
            }
            if (version == 1 && cmd == 0)
            {
                return(await Task.FromResult(DeviceInformationV1.Parse(packet)));
            }
            else if (version == 2)
            {
                return(await DeviceInformationV2.Parse(endpoint, cmd, packet));
            }
            else
            {
                return(null);
            }
        }