static Report Run(FullTest ft, String serverName, Int32 port, SSLTestArgs args, String prefix = "", String suffix = "") { ft.ServerName = serverName; if (port > 0) { ft.ServerPort = port; } if (args.ProxString != null) { int j = args.ProxString.IndexOf(':'); if (j > 0) { try { string sp = args.ProxString .Substring(j + 1).Trim(); ft.ProxPort = Int32.Parse(sp); } catch (Exception) { Usage(); } ft.ProxName = args.ProxString.Substring(0, j).Trim(); } } /* * If there is no specified output, then use stdout. */ if (args.TextOut == null && args.JsonOut == null) { args.TextOut = "-"; } Task <Report> rTask = Task <Report> .Factory.StartNew(ft.Run); Thread.Sleep(15000); if (!rTask.IsCompleted) { throw new Exception("Timeout"); } Report rp = rTask.Result; // Report rp = ft.Run(); rp.ShowCertPEM = args.WithCerts; if (args.TextOut != null) { if (args.TextOut == "-") { rp.Print(Console.Out); } else { using (TextWriter w = File.CreateText(prefix + args.TextOut + suffix)) { rp.Print(w); } } } if (args.JsonOut != null) { if (args.JsonOut == "-") { rp.Print(new JSON(Console.Out)); } else { using (TextWriter w = File.CreateText(args.JsonOut + suffix)) { rp.Print(new JSON(w)); } } } return(rp); }
// private static SSLTestArgs _testArgs = new SSLTestArgs(new List<string>()); static void Process(string[] args) { FullTest ft = new FullTest(); SSLTestArgs _testArgs = new SSLTestArgs(new List <string>()); for (int i = 0; i < args.Length; i++) { string a = args[i]; switch (a.ToLowerInvariant()) { case "-h": case "-help": case "--help": Usage(); break; case "-v": case "--verbose": ft.Verbose = true; break; case "-sni": case "--sni": if (++i >= args.Length) { Usage(); } ft.ExplicitSNI = args[i]; break; case "-all": case "--all-suites": ft.AllSuites = true; break; case "-min": case "--min-version": if (++i >= args.Length) { Usage(); } ft.MinVersion = ParseVersion(args[i]); if (ft.MinVersion < M.SSLv20 || ft.MinVersion > M.TLSv12) { Usage(); } break; case "-max": case "--max-version": if (++i >= args.Length) { Usage(); } ft.MaxVersion = ParseVersion(args[i]); if (ft.MaxVersion < M.SSLv20 || ft.MaxVersion > M.TLSv12) { Usage(); } break; case "-certs": case "--with-certificates": _testArgs.WithCerts = true; break; case "-prox": case "--proxy": if (++i >= args.Length) { Usage(); } _testArgs.ProxString = args[i]; break; case "-proxssl": case "--proxy-ssl": ft.ProxSSL = true; break; case "-ec": case "--with-ec-ext": ft.AddECExt = true; break; case "-text": case "--text-output": if (++i >= args.Length) { Usage(); } _testArgs.TextOut = args[i]; break; case "-json": case "--json-output": if (++i >= args.Length) { Usage(); } _testArgs.JsonOut = args[i]; break; case "-ar": case "--address-range": _testArgs.MultiAddr = true; break; case "-ap": case "--all-ports": _testArgs.IterateOverAllSslPorts = true; break; default: if (a.Length > 0 && a[0] == '-') { Usage(); } _testArgs.R.Add(a); break; } } args = _testArgs.R.ToArray(); if (args.Length == 0 || args.Length > 2) { Usage(); } string serverName = args[0]; int port = -1; if (args.Length == 2) { try { port = Int32.Parse(args[1]); } catch (Exception) { Usage(); } } ReportAggregator aggregator = new ReportAggregator(); aggregator.SetSubnet(serverName); if (!_testArgs.MultiAddr) { Report.UpdateReportAggregator(aggregator, Run(ft, serverName, port, _testArgs)); } else { IpRange range = new IpRange(serverName); IpRangeEnumerator enumerator = new IpRangeEnumerator(); SslPortEnumerator portEnumerator = new SslPortEnumerator(); Console.WriteLine("Starting test..."); Directory.CreateDirectory("raw_results"); foreach (var address in enumerator.GetIPRange(range)) { RunTask(ft, address, 443, aggregator, _testArgs); } ZipFile.CreateFromDirectory("raw_results", "raw_results_" + serverName.Replace("/", "_") + ".zip"); Directory.Delete("raw_results", true); } aggregator.SaveCsv(); aggregator.SaveCerts(); }
private static void RunTask(FullTest ft, string address, int sslPort, ReportAggregator aggregator, SSLTestArgs args) { try { Report rp = Run(ft, address, sslPort, args, @"raw_results\", "_" + address + "_" + sslPort); Report.UpdateReportAggregator(aggregator, rp); aggregator.IncrementScanCounter(); Console.WriteLine("Done testing {0}:{1}\n", address, sslPort); } catch (Exception e) { Console.WriteLine("Failed to test {0}:{1} due to {2}", address, sslPort, e.Message); } }