Module: Aikido::Zen::Sinks::Resolv

Defined in:
lib/aikido/zen/sinks/resolv.rb

Defined Under Namespace

Modules: Helpers

Constant Summary collapse

SINK =
Sinks.add("resolv", scanners: [
  Scanners::StoredSSRFScanner,
  Scanners::SSRFScanner
])

Class Method Summary collapse

Class Method Details

.load_sinks!Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/aikido/zen/sinks/resolv.rb', line 31

def self.load_sinks!
  # In stdlib but not always required
  require "resolv"

  ::Resolv.class_eval do
    alias_method :each_address__internal_for_aikido_zen, :each_address

    def each_address(*args, **kwargs, &blk)
      # each_address is defined "manually" because no sink method pattern
      # is applicable.

      name, = args

      addresses = []
      each_address__internal_for_aikido_zen(*args, **kwargs) do |address|
        addresses << address
        blk.call(address)
      end
    ensure
      # Ensure partial results are scanned.

      Sinks::DSL.safe do
        Helpers.scan(name, addresses, "lookup")
      end
    end
  end
end