Пример #1
0
    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);
    }
Пример #2
0
//    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();
    }
Пример #3
0
 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);
     }
 }