Class: Mihari::Clients::CIRCL

Inherits:
Base
  • Object
show all
Defined in:
lib/mihari/clients/circl.rb

Overview

CIRCL passive DNS/SSL API client

Instance Attribute Summary

Attributes inherited from Base

#base_url, #headers, #pagination_interval, #timeout

Instance Method Summary collapse

Constructor Details

#initialize(base_url = "https://www.circl.lu", username:, password:, headers: {}, timeout: nil) ⇒ CIRCL

Returns a new instance of CIRCL.

Parameters:

  • base_url (String) (defaults to: "https://www.circl.lu")
  • username (String, nil)
  • password (String, nil)
  • headers (Hash) (defaults to: {})
  • timeout (Integer, nil) (defaults to: nil)

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
# File 'lib/mihari/clients/circl.rb', line 18

def initialize(base_url = "https://www.circl.lu", username:, password:, headers: {}, timeout: nil)
  raise(ArgumentError, "username is required") if username.nil?
  raise(ArgumentError, "password is required") if password.nil?

  headers["authorization"] = "Basic #{Base64.strict_encode64("#{username}:#{password}")}"

  super(base_url, headers:, timeout:)
end

Instance Method Details

#dns_query(query) ⇒ Hash

Parameters:

  • query (String)

Returns:

  • (Hash)


60
61
62
# File 'lib/mihari/clients/circl.rb', line 60

def dns_query(query)
  _get("/pdns/query/#{query}")
end

#passive_dns_search(query) ⇒ Array<String>

Passive DNS search

Parameters:

  • query (String)

Returns:

  • (Array<String>)


34
35
36
37
38
39
40
# File 'lib/mihari/clients/circl.rb', line 34

def passive_dns_search(query)
  results = dns_query(query)
  results.filter_map do |result|
    type = result["rrtype"]
    (type == "A") ? result["rdata"] : nil
  end.uniq
end

#passive_ssl_search(query) ⇒ Array<String>

Passive SSL search

Parameters:

  • query (String)

Returns:

  • (Array<String>)


49
50
51
52
53
# File 'lib/mihari/clients/circl.rb', line 49

def passive_ssl_search(query)
  result = ssl_cquery(query)
  seen = result["seen"] || []
  seen.uniq
end

#ssl_cquery(query) ⇒ Hash

Parameters:

  • query (String)

Returns:

  • (Hash)


69
70
71
# File 'lib/mihari/clients/circl.rb', line 69

def ssl_cquery(query)
  _get("/v2pssl/cquery/#{query}")
end