module Flareon
Constants
- CT
Special ct value to add to every query.
- HEADER
Header sent in every query.
- URL
Base
URL
for cloudflare's DNS over HTTPs endpoint.- VERSION
Public Class Methods
batch_query(names, type: "A", json: false) { |query(name, type: type, json: json)| ... }
click to toggle source
# File lib/flareon.rb, line 128 def self.batch_query(names, type: "A", json: false) results = [] unless block_given? names.each do |name| if block_given? yield Flareon.query(name, type: type, json: json) else results << Flareon.query(name, type: type, json: json) end end return results unless block_given? end
batch_query_multithreaded(names, type: "A", json: false, threads: 4) { |result| ... }
click to toggle source
# File lib/flareon.rb, line 140 def self.batch_query_multithreaded(names, type: "A", json: false, threads: 4) results = Parallel.map(names, in_threads: threads) do |name| Flareon.query(name, type: type, json: json) end if block_given? results.each { |result| yield result } end return results end
query(name, type: "A", json: false)
click to toggle source
Query the DNS over HTTPs endpoint.
IPv4 DNS query¶ ↑
result = Flareon.query("google.com") # or result = Flareon.query("google.com", type: "A") # or result = Flareon.query("google.com", type: 1)
IPv6 DNS query¶ ↑
result = Flareon.query("google.com", type: "AAAA") # or result = Flareon.query("google.com", type: 28)
Mail exchange record query¶ ↑
result = Flareon.query("google.com", type: "MX") # or result = Flareon.query("google.com", type: 15)
Raw JSON response ( not parsed )¶ ↑
result = Flareon.query("google.com", json: true)
# File lib/flareon.rb, line 34 def self.query(name, type: "A", json: false) buffer = StringIO.new query = { name: name, type: type, ct: CT } response = HTTParty.get(URL, stream_body: true, query: query, headers: HEADER) do |fragment| buffer << fragment end if response.success? buffer = buffer.string if json return buffer else return JSON.parse(buffer) end else raise "Got HTTP response code #{response.code}" end end
resolve(name, type: "A")
click to toggle source
Resolve a given domain name to a IP address.
# File lib/flareon.rb, line 68 def self.resolve(name, type: "A") unless type == "A" || type == "AAAA" raise "Unsupported resolve type!" end resp = Flareon.query(name, type: type) if resp["Status"] == 0 return nil unless resp.has_key? "Answer" return resp["Answer"][0]["data"] else raise resp end end
resolve?(name, type: "A")
click to toggle source
Check if a given domain name is resolvable to an IPv4 or IPv6 address.
# File lib/flareon.rb, line 60 def self.resolve?(name, type: "A") return true if Flareon.resolve(name, type: type) false rescue return false end
resolve_all(name, type: :both) { |answer| ... }
click to toggle source
Resolve a given domain name to all addresses (IPv4/IPv6).
Resolve all IP addresses¶ ↑
results = Flareon.resolve_all("google.com") # or results = Flareon.resolve_all("google.com", type: :both) # or Flareon.resolve_all("google.com") do |ip_address| # do something with the ip_address puts ip_address end
Resolve all IPv4 addresses¶ ↑
results = Flareon.resolve_all("google.com", type: 1) # or results = Flareon.resolve_all("google.com", type: "A")
# File lib/flareon.rb, line 97 def self.resolve_all(name, type: :both) unless type == "A" || type == "AAAA" || type == :both raise "Unsupported resolve type!" end results = [] unless block_given? case type when "A", "AAAA" resp = Flareon.query(name, type: type) if resp["Status"] == 0 resp["Answer"].each do |answer| if block_given? yield answer["data"] else results << answer["data"] end end else raise resp end when :both if block_given? Flareon.resolve_all(name, type: "A") { |ip| yield ip } Flareon.resolve_all(name, type: "AAAA") { |ip| yield ip } else Flareon.resolve_all(name, type: "A") { |ip| results << ip } Flareon.resolve_all(name, type: "AAAA") { |ip| results << ip } end end return results unless block_given? end