class Arbor::Atlas

Constants

VERSION

Attributes

Public Class Methods

new(username, password) click to toggle source
# File lib/arbor/atlas.rb, line 12
def initialize(username, password)
        params = {'name' => username, 'password' => password, 'referer' => @@baseurl+"/"}
        @cookie = nil
        _post("user/login",params)
end

Public Instance Methods

_get(path, params) click to toggle source
# File lib/arbor/atlas.rb, line 37
def _get(path, params)
        url = URI.parse "#{@@baseurl}/#{path}"
        data = params.map { |k,v|
                "#{k}=#{v}".gsub(/([^ a-zA-Z0-9_.-=]+)/) do
                        '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
                end.tr(' ', '+')
        }.join("&")
        request = Net::HTTP::Get.new(url.path+"?"+data)
        request.add_field("User-Agent", "Ruby/#{RUBY_VERSION} arbor-atlas rubygem v#{Arbor::Atlas::VERSION}")
        request.add_field("Referer", @@baseurl)
        request.add_field("Cookie", @cookie) if @cookie

        http = Net::HTTP.new(url.host, url.port)
        if url.scheme == 'https'
                http.use_ssl = true
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE
                http.verify_depth = 5
        end
        resp = http.request(request)
        @cookie = resp.header["set-cookie"] if resp.header["set-cookie"]
        resp.body
end
_post(path, params) click to toggle source
# File lib/arbor/atlas.rb, line 18
def _post(path, params)
        url = URI.parse "#{@@baseurl}/#{path}"
        request = Net::HTTP::Post.new(url.path)
        request.add_field("User-Agent", "Ruby/#{RUBY_VERSION} arbor-atlas rubygem v#{Arbor::Atlas::VERSION}")
        request.add_field("Referer", @@baseurl)
        request.add_field("Cookie", @cookie) if @cookie
        request.set_form_data(params)
        
        http = Net::HTTP.new(url.host, url.port)
        if url.scheme == 'https'
                http.use_ssl = true
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE
                http.verify_depth = 5
        end
        resp = http.request(request)
        @cookie = resp.header["set-cookie"] if resp.header["set-cookie"]
        resp.body
end
lookup(item) click to toggle source
# File lib/arbor/atlas.rb, line 90
def lookup(item)
        if item =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$/
                lookup_ip(item)
        elsif item =~ /^(AS)?\d{1,7}$/i
                lookup_asn(item)
        elsif item =~ /^CVE\-\d{4}-\d+$/i
                lookup_cve(item)
        elsif item =~ /^\w{2}$/i
                lookup_cc(item)
        elsif item =~ /^(UDP|TCP)\/\d{1,5}$/i
                lookup_service(item)
        else
                raise ArgumentError, "unknown query type for item: #{item}"
        end
end
lookup_asn(asn) click to toggle source
# File lib/arbor/atlas.rb, line 65
def lookup_asn(asn)
        asn = asn.gsub(/[^0-9]/,'')
        doc = _get("asn/#{asn}",{'out'=>'xml'})
        Crack::XML.parse(doc)
end
lookup_cc(cc) click to toggle source
# File lib/arbor/atlas.rb, line 76
def lookup_cc(cc)
        doc = _get("cc/#{cc.upcase}",{'out'=>'xml'})
        Crack::XML.parse(doc)
end
lookup_cidr(cidr) click to toggle source
# File lib/arbor/atlas.rb, line 81
def lookup_cidr(cidr)
        lookup_ip(cidr)
end
lookup_cve(cve) click to toggle source
# File lib/arbor/atlas.rb, line 71
def lookup_cve(cve)
        doc = _get("vuln/#{cve.upcase}",{'out'=>'xml'})
        Crack::XML.parse(doc)
end
lookup_ip(ip) click to toggle source
# File lib/arbor/atlas.rb, line 60
def lookup_ip(ip)
        doc = _get("ip/#{ip}",{'out'=>'xml'})
        Crack::XML.parse(doc)
end
lookup_service(port) click to toggle source
# File lib/arbor/atlas.rb, line 85
def lookup_service(port)
        doc = _get("service/#{port.downcase}",{'out'=>'xml'})
        Crack::XML.parse(doc)
end