diff --git a/lib/rogue_one/detector.rb b/lib/rogue_one/detector.rb index f889de1..9d635dc 100644 --- a/lib/rogue_one/detector.rb +++ b/lib/rogue_one/detector.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "yaml" +require "parallel" module RogueOne class Detector @@ -10,7 +11,7 @@ class Detector def initialize(target:) @target = target - @memo = Hash.new(0) + @memo = {} end def report @@ -38,14 +39,14 @@ def landing_pages end def inspect - top_100_domains.each do |domain| + results = Parallel.map(top_100_domains) do |domain| normal_result = normal_resolver.dig(domain, "A") target_result = target_resolver.dig(domain, "A") - if normal_result != target_result - @memo[target_result] += 1 if target_result - end - end + target_result if target_result && normal_result != target_result + end.compact + + @memo = results.group_by(&:itself).map { |k, v| [k, v.length] }.to_h end def top_100_domains diff --git a/rogue_one.gemspec b/rogue_one.gemspec index 68180cf..e800472 100644 --- a/rogue_one.gemspec +++ b/rogue_one.gemspec @@ -29,5 +29,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 12.3" spec.add_development_dependency "rspec", "~> 3.8" + spec.add_dependency "parallel", "~> 1.17" spec.add_dependency "thor", "~> 0.19" end diff --git a/spec/rogue_one_spec.rb b/spec/rogue_one_spec.rb index e74f1f4..dc811bc 100644 --- a/spec/rogue_one_spec.rb +++ b/spec/rogue_one_spec.rb @@ -6,6 +6,7 @@ describe "#report" do before do allow(subject).to receive(:top_100_domains).and_return(%w(google.com)) + allow(Parallel).to receive(:processor_count).and_return(0) end let(:report) { subject.report }