protected override string GetVersion() { AuditEnvironment.ProcessExecuteStatus process_status; string process_output; string process_error; AuditEnvironment.Execute(ApplicationBinary.FullName, "-v", out process_status, out process_output, out process_error); if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed && (process_output.Contains("nginx version: ") || process_error.Contains("nginx version: "))) { if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output)) { process_output = process_error; } this.Version = process_output.Substring("nginx version: ".Length); this.VersionInitialised = true; this.AuditEnvironment.Success("Got Nginx version {0}.", this.Version); return(this.Version); } else if (process_output.Contains("nginx version: ") || process_error.Contains("nginx version: ")) { if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output)) { process_output = process_error; } this.Version = process_output.Substring("nginx version: ".Length); this.VersionInitialised = true; this.AuditEnvironment.Success("Got Nginx version {0}.", this.Version); return(this.Version); } else { throw new Exception(string.Format("Did not execute process {0} successfully or could not parse output. Process output: {1}.\nProcess error: {2}.", ApplicationBinary.Name, process_output, process_error)); } }
protected override string GetVersion() { Stopwatch sw = new Stopwatch(); sw.Start(); AuditEnvironment.ProcessExecuteStatus process_status; string process_output; string process_error; AuditEnvironment.Execute(this.ApplicationBinary.FullName, "-V", out process_status, out process_output, out process_error); sw.Stop(); if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed) { string v0 = process_output.Substring(process_output.IndexOf("Ver") + 4); string v1 = v0.Substring(0, v0.IndexOf(" ")); this.Version = new string(v1.TakeWhile(v => char.IsDigit(v) || v == '.').ToArray()); this.VersionInitialised = true; this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds); return(this.Version); } else { throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", this.ApplicationBinary.Name, process_error)); } }
//Get list of installed programs from 3 registry locations. public override IEnumerable <Package> GetPackages(params string[] o) { var wmi = AuditEnvironment.Execute("wmic", "product get name,version", out var process_status, out var process_output, out var process_error); if (process_status != AuditEnvironment.ProcessExecuteStatus.Completed) { throw new Exception("The wmic command did not execute successfully."); } var lines = process_output.Split(AuditEnvironment.LineTerminator.ToCharArray()); var regex = new Regex(@"(\S.+)\s+\d(\S+)", RegexOptions.Compiled); foreach (var s in lines.Skip(1)) { var m = regex.Match(s); } throw new NotImplementedException(); }
public override IEnumerable <Package> GetPackages(params string[] o) { Stopwatch sw = new Stopwatch(); List <Package> packages = new List <Package>(); string command = @"dpkg-query"; string arguments = @"-W -f '${package} ${version} ${architecture}|'"; Regex process_output_pattern = new Regex(@"^(\S+)\s(\S+)\s(\S+)$", RegexOptions.Compiled); AuditEnvironment.ProcessExecuteStatus process_status; string process_output, process_error; sw.Start(); if (AuditEnvironment.Execute(command, arguments, out process_status, out process_output, out process_error)) { string[] p = process_output.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < p.Count(); i++) { if (string.IsNullOrEmpty(p[i]) || string.IsNullOrWhiteSpace(p[i])) { continue; } Match m = process_output_pattern.Match(p[i].Trim()); if (!m.Success) { sw.Stop(); this.AuditEnvironment.Error(this.AuditEnvironment.Here(), "Could not parse dpkg command output at row {0}: {1}.", i, p[i]); throw new Exception(string.Format("Could not parse dpkg command output at row {0}: {1}.", i, p[i])); } else { packages.Add(new Package(this.PackageManagerId, m.Groups[1].Value, m.Groups[2].Value, null, null, m.Groups[3].Value)); } } sw.Stop(); this.AuditEnvironment.Info("Retrieved {0} packages from {1} package manager in {2} ms.", packages.Count, this.PackageManagerLabel, sw.ElapsedMilliseconds); } else { sw.Stop(); throw new Exception(string.Format("Error running {0} {1} command in audit environment: {2} {3}.", command, arguments, process_error, process_output)); } return(packages); }
protected override string GetVersion() { AuditEnvironment.ProcessExecuteStatus process_status; string process_output; string process_error; AuditEnvironment.Execute(ApplicationBinary.FullName, "-v", out process_status, out process_output, out process_error); if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed) { if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output)) { process_output = process_error; } this.Version = process_output.Split(Environment.NewLine.ToCharArray())[0]; this.VersionInitialised = true; return(this.Version); } else { throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", ApplicationBinary.Name, process_error)); } }
protected override string GetVersion() { Stopwatch sw = new Stopwatch(); sw.Start(); this.AuditEnvironment.Status("Scanning {0} version.", this.ApplicationLabel); AuditEnvironment.ProcessExecuteStatus process_status; string process_output; string process_error; AuditEnvironment.Execute(this.ApplicationBinary.FullName, "-?", out process_status, out process_output, out process_error); if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed) { if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output)) { process_output = process_error; } this.Version = process_output.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]; sw.Stop(); this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds); this.VersionInitialised = true; return(this.Version); } else if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output) && process_error.Contains("unknown option")) { this.Version = process_error.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]; sw.Stop(); this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds); this.VersionInitialised = true; return(this.Version); } else { sw.Stop(); throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", this.ApplicationBinary.Name, process_error)); } }