Browse Source

Refactor runner

master
Nicolas Vinot 4 years ago
parent
commit
a0a2dc8813
5 changed files with 29 additions and 22 deletions
  1. 2
    1
      Gemfile
  2. 22
    4
      lib/sslcheck.rb
  3. 2
    3
      sslcheck
  4. 1
    1
      sslcheck-alexa
  5. 2
    13
      sslcheck-all

+ 2
- 1
Gemfile View File

@@ -2,7 +2,8 @@ source 'https://rubygems.org'

gem 'httparty'
gem 'nokogiri'
gem 'net-sftp'
gem 'net-ssh', '>= 2.9.2.beta'
gem 'net-scp'
gem 'tcp_timeout'
gem 'parallel'
gem 'ruby-progressbar'

+ 22
- 4
lib/sslcheck.rb View File

@@ -2,6 +2,7 @@ require 'erb'
require 'logging'
require 'parallel'
require 'thread'
require 'yaml'

module SSLCheck
module SSLLabs
@@ -10,10 +11,12 @@ module SSLCheck
autoload :Server, 'sslcheck/server'
autoload :Grade, 'sslcheck/grade'

PARALLEL_ANALYSIS = 20
SYN_TIMEOUT = 600
@@log = Logging.logger[SSLCheck]

def self.grade(hostname, port=443)
timeout 600 do
timeout SYN_TIMEOUT do
Grade.new Server.new hostname, port
end
rescue Exception => e
@@ -21,10 +24,11 @@ module SSLCheck
NoSslTlsGrade.new NoSslTlsServer.new hostname, port
end

def self.analyze(hosts, output)
def self.analyze(hosts, output, groups = nil)
results = {}
semaphore = Mutex.new
Parallel.each hosts, progress: 'Testing', in_threads: 10 do |description, host|
Parallel.each hosts, progress: 'Analysing', in_threads: PARALLEL_ANALYSIS,
finish: lambda { |item, _, _| puts item[1] } do |description, host|
result = SSLCheck.grade host.strip
semaphore.synchronize do
if results.include? description
@@ -35,6 +39,8 @@ module SSLCheck
end
end

results = Hash[groups.collect { |g| [g, results[g]] }] if groups

results.each do |d, _|
results[d].sort! do |a, b|
cmp = score(a) <=> score(b)
@@ -48,7 +54,19 @@ module SSLCheck
end
end

File.write "output/#{output}.html", ERB.new(File.read('output/sslcheck.erb')).result(binding)
File.write output, ERB.new(File.read('output/sslcheck.erb')).result(binding)
end

def self.analyze_from_file(file, output)
config = YAML.load_file file
hosts = []
groups = []
config.each do |c|
d, hs = c['description'], c['hostnames']
groups << d
hs.each { |host| hosts << [d, host] }
end
self.analyze hosts, output, groups
end

private

+ 2
- 3
sslcheck View File

@@ -1,11 +1,10 @@
#!/usr/bin/env ruby
ENV['LD_LIBRARY_PATH'] = '/home/aeris/Workspace/external/sslscan/openssl'
require 'logging'
$:.unshift 'lib'
require 'logging'
require 'sslcheck'

Logging.logger.root.appenders = Logging.appenders.stdout
Logging.logger.root.level = :warn

p server = SSLCheck::Server.new(ARGV[0])
server = SSLCheck::Server.new(ARGV[0], ARGV[1] || 443)
p grade = SSLCheck::Grade.new(server)

+ 1
- 1
sslcheck-alexa View File

@@ -16,4 +16,4 @@ File.open('top-1m.csv', 'r') do |file|
end
end

SSLCheck.analyze hosts, 'alexa'
SSLCheck.analyze hosts, 'output/alexa.html'

+ 2
- 13
sslcheck-all View File

@@ -1,16 +1,5 @@
#!/usr/bin/env ruby
require 'yaml'
$:.unshift 'lib'
require 'sslcheck'

Logging.logger.root.appenders = Logging.appenders.stdout
Logging.logger.root.level = :error

config = YAML.load_file 'hosts.yml'
hosts = []
config.each do |c|
d, hs = c['description'], c['hostnames']
hs.each { |host| hosts << [d, host] }
end

SSLCheck.analyze hosts, 'results'
name = ARGV[0] || 'index'
SSLCheck.analyze_from_file "output/#{name}.yml", "output/#{name}.html"

Loading…
Cancel
Save