/// <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); } }
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)); } }
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); } }
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); } }
/// <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(); } }
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); }
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); }