Beispiel #1
0
        /// <summary>
        /// 通过Ping命令检测外网是否通
        /// </summary>
        /// <returns></returns>
        public static bool Ping()
        {
            try
            {
                String            ip = "www.baidu.com";                                               // ping 的地址,可以换成任何一种可靠的外网
                Java.Lang.Process p  = Java.Lang.Runtime.GetRuntime().Exec("ping -c 3 -w 100 " + ip); // ping网址3次
                // 读取ping的内容,可以不加
                BufferedReader input = new BufferedReader(new InputStreamReader(p.InputStream));
                //StringBuffer
                //StringBuffer stringBuffer = new StringBuffer();
                string str = string.Empty;

                string content = "";
                while ((content = input.ReadLine()) != null)
                {
                    str += content;
                }
                // ping的状态
                int status = p.WaitFor();
                if (status == 0)
                {
                    return(true);
                }
                else
                {
                }
            }
            catch (IOException e)
            {
            }
            finally
            {
            }
            return(false);
        }
        public void DetectsMissingPropValue()
        {
            using (var gel = new GlobalLock())
            {
                var env = new Ex.Env();

                var runtime = Java.Lang.Runtime.GetRuntime();

                Java.Lang.Process process = null;
                runtime.MockExec = (p) =>
                {
                    if (p.Count() == 1 && p[0] == "getprop")
                    {
                        process = new Java.Lang.Process();
                        process.MockExecArgs  = p;
                        process.MockStdOutput = new[] {
                            "[fu.bar]: [foobarr]",
                            "[fu.bar]: [fubar]"
                        };
                        return(process);
                    }
                    throw new Exception($"Could not execute: {p}");
                };

                var i = new ShouldNotHavePropValues().Init(env, "TEST", "fu.bar=foobar");
                Assert.True(i.Ok);

                i = new ShouldNotHavePropValues().Init(env, "TEST", "foo.bar=fubar");
                Assert.True(i.Ok);
            }
        }
        public void DetectsFileNotLocatable()
        {
            using (var gel = new GlobalLock())
            {
                var env = new Ex.Env();

                var runtime = Java.Lang.Runtime.GetRuntime();

                Java.Lang.Process process = null;
                runtime.MockExec = (p) =>
                {
                    if (p.Count() == 2 && p[0] == "which" && p[1] == "file")
                    {
                        process = new Java.Lang.Process();
                        process.MockExecArgs  = p;
                        process.MockStdOutput = new[] { "" };
                        return(process);
                    }
                    throw new Exception($"Could not execute: {p}");
                };

                var i = new ShouldNotBeAbleToLocateFile().Init(env, "TEST", "file");

                Assert.True(i.Ok);
            }
        }
Beispiel #4
0
        public ulong GetAvailableDiskSpace(FolderUri uri)
        {
            try
            {
                Java.Lang.Process proc =
                    Java.Lang.Runtime.GetRuntime().Exec(String.Format("df {0}", uri.AbsolutePath));

                proc.WaitFor();

                var    resi = proc.InputStream;
                var    rdr  = new StreamReader(resi);
                string str  = rdr.ReadToEnd();

                string[] lines = str.Split('\n');
                if (lines.Length < 2)
                {
                    throw new InvalidOperationException("Unable to get size from shell.");
                }

                string[] entries = lines[1]
                                   .Split(' ')
                                   .Where(e => !String.IsNullOrWhiteSpace(e))
                                   .ToArray();

                string entry = entries[3];

                ulong  value = (ulong)Int32.Parse(entry.Substring(0, entry.Length - 1));
                string unit  = entry.Substring(entry.Length - 1, 1);

                switch (unit)
                {
                // Value is in bytes
                case "B":
                    return(value);

                // Value is in Kbytes
                case "K":
                    return(value * 1024);

                // Value is in Mbytes
                case "M":
                    return(value * 1024 * 1024);

                // Value is in Gbytes
                case "G":
                    return(value * 1024 * 1024 * 1024);

                default:
                    throw new InvalidOperationException("Unknown size unit.");
                }
            }
            catch (Exception ex)
            {
                StatFs stats = new StatFs(uri.AbsolutePath);
                return((ulong)(stats.AvailableBlocks * stats.BlockSize));
            }
        }
Beispiel #5
0
 string getOSCommandOutput(string[] args)
 {
     Java.Lang.ProcessBuilder pb      = new Java.Lang.ProcessBuilder(args);
     Java.Lang.Process        process = pb.Start();
     if (process.InputStream != null)
     {
         using (StreamReader reader = new StreamReader(process.InputStream)) {
             return(reader.ReadToEnd());
         }
     }
     return(null);
 }
 public static Boolean IsRooted()
 {
     try {
         Java.Lang.Process        su    = Java.Lang.Runtime.GetRuntime().Exec("su");
         Java.IO.DataOutputStream outSu = new Java.IO.DataOutputStream(su.OutputStream);
         outSu.WriteBytes("exit\n");
         outSu.Flush();
         su.WaitFor();
         return(su.ExitValue() == 0);
     } catch (Java.Lang.Exception) {
         return(false);
     }
 }
        public void IsRobust()
        {
            using (var gel = new GlobalLock())
            {
                var env = new Ex.Env();

                string    message   = null;
                Exception exception = null;
                env.Reporter.OnExceptionReported = (msg, ex) =>
                {
                    message   = msg;
                    exception = ex;
                };

                var runtime = Java.Lang.Runtime.GetRuntime();

                Java.Lang.Process process = null;
                runtime.MockExec = (p) =>
                {
                    if (p.Count() == 1 && p[0] == "getprop")
                    {
                        process = new Java.Lang.Process();
                        process.MockExecArgs  = p;
                        process.MockStdOutput = new[] {
                            "[fu.bar]: [fubar]"
                        };
                        return(process);
                    }
                    throw new Exception($"Could not execute: {p}");
                };

                var i = new ShouldNotHavePropValues().Init(env, "TEST", "fubar");

                Assert.True(i.Ok);
                Assert.Equal("ShouldNotHavePropValues init bombed for TEST=fubar", message);
                Assert.Equal(exception.GetType().FullName, typeof(ArgumentException).FullName);
                Assert.Equal("fubar", exception.Message);

                runtime.MockExec = (p) =>
                {
                    throw new Exception("BOOM!");
                };

                i = new ShouldNotHavePropValues().Init(env, "TEST", "fu.bar=fubar");

                Assert.True(i.Ok);
                Assert.Equal("HasPropValue bombed for TEST (fu.bar=fubar)", message);
                Assert.Equal("BOOM!", exception.Message);
            }
        }
Beispiel #8
0
        public async Task Ping(string host, CancellationToken token, IProgress <string> progress, int count = 0)
        {
            try
            {
                var stopwatch             = Stopwatch.StartNew();
                Java.Lang.Process process = null;

                if ((long)Build.VERSION.SdkInt <= 16)
                {
                    // shiny APIS
                    process = Java.Lang.Runtime.GetRuntime().Exec(string.Format("/system/bin/ping -w 1 -c 1 {0}", host));
                }
                else
                {
                    process = new Java.Lang.ProcessBuilder().
                              Command("/system/bin/ping", host).RedirectErrorStream(true).Start();
                }

                using (var reader = new StreamReader(process.InputStream))
                {
                    var n = 0;
                    do
                    {
                        var result = await reader.ReadLineAsync();

                        if (result != null)
                        {
                            Log.Info(this.ToString(), result);
                            progress.Report(result);
                        }
                        else
                        {
                            await Task.Delay(10);
                        }
                    } while (!token.IsCancellationRequested && (count <= 0 || n++ < count));
                }

                process.Destroy();
            }
            catch (IOException e)
            {
                Log.Error(this.ToString(), e.Message);
                progress.Report(e.Message);
            }
        }
Beispiel #9
0
 /// <summary>
 /// A variation on the checking for SU, this attempts a 'which su'
 /// </summary>
 /// <returns><c>true</c>, if su exists, <c>false</c> otherwise.</returns>
 private static bool CheckSuExists()
 {
     Java.Lang.Process process = null;
     try
     {
         var command = new[] { "/system/xbin/which", "su" };
         process = Java.Lang.Runtime.GetRuntime().Exec(command);
         var s = new BufferedReader(new InputStreamReader(process.InputStream));
         return(s.ReadLine() != null);
     }
     catch (Exception)
     {
         return(false);
     }
     finally
     {
         process?.Destroy();
     }
 }
Beispiel #10
0
        public async Task <bool> IsHostReachable(string host, TimeSpan timeout)
        {
            bool reachable = false;

            try
            {
                var stopwatch             = Stopwatch.StartNew();
                Java.Lang.Process process = null;

                if ((long)Build.VERSION.SdkInt <= 16)
                {
                    // shiny APIS
                    process = Java.Lang.Runtime.GetRuntime().Exec(string.Format("/system/bin/ping -w 1 -c 1 {0}", host));
                }
                else
                {
                    process = new Java.Lang.ProcessBuilder().
                              Command("/system/bin/ping", host).RedirectErrorStream(true).Start();
                }

                using (var reader = new StreamReader(process.InputStream))
                {
                    do
                    {
                        var result = await reader.ReadLineAsync();

                        Log.Info(this.ToString(), result);
                    } while (!reachable && stopwatch.ElapsedMilliseconds < timeout.TotalMilliseconds);
                }

                process.Destroy();
                reachable = true;
            }
            catch (IOException e)
            {
                Log.Error(this.ToString(), e.Message);
                reachable = false;
            }

            return(reachable);
        }
Beispiel #11
0
        public static Boolean unRoot()
        {
            Java.Lang.Process rootProcess;
            try
            {
                rootProcess = Java.Lang.Runtime.GetRuntime().Exec(new String[]
                {
                    "su",
                    "-c",
                    "mount -o rw,remount /system && " +
                    "mv /system/xbin/su /system/xbin/subackup && " +
                    "mv /system/bin/su /system/bin/subackup && " +
                    "mount -o ro,remount /system"
                });
                rootProcess.WaitFor();

                try
                {
                    Java.Lang.Process      p     = Java.Lang.Runtime.GetRuntime().Exec("subackup -c cd /system/bin/.ext && ls -ld .?* && mv /system/bin/.ext/.su /system/bin/.ext/.subackup ");
                    Java.IO.BufferedReader input = new Java.IO.BufferedReader(
                        new Java.IO.InputStreamReader(p.InputStream));
                    String line = null;
                    while ((line = input.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                    }
                }
                catch (Java.Lang.InterruptedException e)
                {
                    e.PrintStackTrace();
                }
                return(true);
            }
            catch (Java.Lang.InterruptedException e)
            {
                e.PrintStackTrace();
                return(false);
            }
        }
		public ProcessHelper ()
		{
			process = Java.Lang.Runtime.GetRuntime ().Exec ("su");
			outP = new Java.IO.DataOutputStream (process.OutputStream);
			inP = new Java.IO.DataInputStream (process.InputStream);
		}
 public ProcessHelper()
 {
     process = Java.Lang.Runtime.GetRuntime().Exec("su");
     outP    = new Java.IO.DataOutputStream(process.OutputStream);
     inP     = new Java.IO.DataInputStream(process.InputStream);
 }