opendns-dnsdb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/docs/index.rst +1 -1
- data/lib/opendns-dnsdb/dnsdb.rb +14 -9
- data/lib/opendns-dnsdb/dnsdb/by_ip.rb +4 -4
- data/lib/opendns-dnsdb/dnsdb/by_name.rb +4 -4
- data/lib/opendns-dnsdb/dnsdb/label.rb +4 -4
- data/lib/opendns-dnsdb/dnsdb/related.rb +8 -8
- data/lib/opendns-dnsdb/dnsdb/traffic.rb +4 -4
- data/lib/opendns-dnsdb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5557f34b1a5f2b37ec112510b02da914879a503
|
4
|
+
data.tar.gz: 8fc27e7efdb8dc0c71082fc09052e4f57205bf24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15c19e88e6af7cd5295d32a1c641245b784ba4e6854065df759c132ff51a415861a0997cd737e0a1f9d25ca15c10a8585c5cade8a6edea4d58bf3cd0e0c8241e
|
7
|
+
data.tar.gz: 76b28419430338f5cb1f2ea7ed17b70c150715ff2ac8ea88a34e299171af20c350d6aeb177f6fb7749ab5ca24155503f78aa67da42df1d3b5bfc9a1d939ed8c1
|
data/Gemfile
CHANGED
data/docs/index.rst
CHANGED
@@ -86,7 +86,7 @@ Supported options:
|
|
86
86
|
* ``sslcert``: path to the SSL certificate
|
87
87
|
* ``sslcerttype``: SSL certificate type, defaults to ``pem``.
|
88
88
|
* ``sslcertpasswd``: SSL certificate password
|
89
|
-
* ``
|
89
|
+
* ``max_concurrency``: max number of parallel operations (default: 10)
|
90
90
|
|
91
91
|
Note on certificates format
|
92
92
|
===========================
|
data/lib/opendns-dnsdb/dnsdb.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'date'
|
3
|
-
require '
|
3
|
+
require 'typhoeus'
|
4
4
|
require 'hashie'
|
5
5
|
require 'multi_json'
|
6
6
|
|
@@ -21,22 +21,22 @@ module OpenDNS
|
|
21
21
|
include OpenDNS::DNSDB::Traffic
|
22
22
|
|
23
23
|
DEFAULT_TIMEOUT = 15
|
24
|
-
|
24
|
+
DEFAULT_MAX_CONCURRENCY = 10
|
25
25
|
SGRAPH_API_BASE_URL = 'https://sgraph.umbrella.com'
|
26
26
|
|
27
27
|
attr_reader :timeout
|
28
28
|
attr_reader :sslcert
|
29
29
|
attr_reader :sslcerttype
|
30
30
|
attr_reader :sslcertpasswd
|
31
|
-
attr_reader :
|
31
|
+
attr_reader :max_concurrency
|
32
32
|
|
33
33
|
def initialize(params = { })
|
34
34
|
raise UsageError, 'Missing certificate file' unless params[:sslcert]
|
35
35
|
@sslcert = params[:sslcert]
|
36
36
|
@timeout = DEFAULT_TIMEOUT
|
37
37
|
@timeout = params[:timeout].to_f if params[:timeout]
|
38
|
-
@
|
39
|
-
@
|
38
|
+
@max_concurrency = DEFAULT_MAX_CONCURRENCY
|
39
|
+
@max_concurrency = params[:max_concurrency].to_i if params[:max_concurrency]
|
40
40
|
@sslcerttype = params[:sslcerttype] || 'pem'
|
41
41
|
@sslcertpasswd = params[:sslcertpasswd] || 'opendns'
|
42
42
|
@options = {
|
@@ -44,15 +44,20 @@ module OpenDNS
|
|
44
44
|
timeout: @timeout,
|
45
45
|
sslcert: @sslcert,
|
46
46
|
sslcerttype: @sslcerttype,
|
47
|
-
sslcertpasswd: @sslcertpasswd
|
48
|
-
maxconnects: @maxconnects
|
47
|
+
sslcertpasswd: @sslcertpasswd
|
49
48
|
}
|
50
49
|
end
|
51
50
|
|
51
|
+
def query_multi
|
52
|
+
Typhoeus::Hydra.new(max_concurrency: @max_concurrency)
|
53
|
+
end
|
54
|
+
|
52
55
|
def query_handler(endpoint, method = :get, options = { })
|
53
56
|
url = SGRAPH_API_BASE_URL + endpoint
|
54
|
-
|
55
|
-
|
57
|
+
options = options.merge(@options)
|
58
|
+
options.merge!(method: method)
|
59
|
+
query = Typhoeus::Request.new(url,
|
60
|
+
@options.merge(options).merge(method: method))
|
56
61
|
query
|
57
62
|
end
|
58
63
|
end
|
@@ -21,19 +21,19 @@ module OpenDNS
|
|
21
21
|
def history_by_ip(ips, type)
|
22
22
|
ips_is_array = ips.kind_of?(Enumerable)
|
23
23
|
ips = [ ips ] unless ips_is_array
|
24
|
-
multi =
|
24
|
+
multi = query_multi
|
25
25
|
queries = { }
|
26
26
|
ips.each do |ip|
|
27
27
|
next if queries[ip]
|
28
28
|
url = "/dnsdb/ip/#{type}/#{ip}.json"
|
29
29
|
query = query_handler(url)
|
30
|
-
multi.
|
30
|
+
multi.queue(query)
|
31
31
|
queries[ip] = query
|
32
32
|
end
|
33
|
-
multi.
|
33
|
+
multi.run
|
34
34
|
responses = { }
|
35
35
|
queries.each_pair do |ip, query|
|
36
|
-
obj = MultiJson.load(query.
|
36
|
+
obj = MultiJson.load(query.response.body)
|
37
37
|
responses[ip] = Response::Raw.new(obj).rrs
|
38
38
|
end
|
39
39
|
responses = Response::HashByIP[responses]
|
@@ -21,19 +21,19 @@ module OpenDNS
|
|
21
21
|
def history_by_name(names, type)
|
22
22
|
names_is_array = names.kind_of?(Enumerable)
|
23
23
|
names = [ names ] unless names_is_array
|
24
|
-
multi =
|
24
|
+
multi = query_multi
|
25
25
|
queries = { }
|
26
26
|
names.each do |name|
|
27
27
|
next if queries[name]
|
28
28
|
url = "/dnsdb/name/#{type}/#{name}.json"
|
29
29
|
query = query_handler(url)
|
30
|
-
multi.
|
30
|
+
multi.queue(query)
|
31
31
|
queries[name] = query
|
32
32
|
end
|
33
|
-
multi.
|
33
|
+
multi.run
|
34
34
|
responses = { }
|
35
35
|
queries.each_pair do |name, query|
|
36
|
-
obj = MultiJson.load(query.
|
36
|
+
obj = MultiJson.load(query.response.body)
|
37
37
|
responses[name] = Response::Raw.new(obj).rrs_tf
|
38
38
|
end
|
39
39
|
responses = Response::HashByName[responses]
|
@@ -14,14 +14,14 @@ module OpenDNS
|
|
14
14
|
def labels_by_name(names)
|
15
15
|
names_is_array = names.kind_of?(Enumerable)
|
16
16
|
names = [ names ] unless names_is_array
|
17
|
-
multi =
|
17
|
+
multi = query_multi
|
18
18
|
names_json = MultiJson.dump(names)
|
19
19
|
cacheid = SipHash::digest(CACHE_KEY, names_json).to_s(16)
|
20
20
|
url = "/infected/names/#{cacheid}.json"
|
21
21
|
query = query_handler(url, :get, { body: names_json })
|
22
|
-
multi.
|
23
|
-
multi.
|
24
|
-
responses = MultiJson.load(query.
|
22
|
+
multi.queue(query)
|
23
|
+
multi.run
|
24
|
+
responses = MultiJson.load(query.response.body)
|
25
25
|
responses = responses['scores']
|
26
26
|
responses.each_pair do |name, label|
|
27
27
|
responses[name] = [:suspicious, :unknown, :benign][label + 1]
|
@@ -9,28 +9,28 @@ module OpenDNS
|
|
9
9
|
def related_names_with_score(names, &filter)
|
10
10
|
names_is_array = names.kind_of?(Enumerable)
|
11
11
|
names = [ names ] unless names_is_array
|
12
|
-
multi =
|
12
|
+
multi = query_multi
|
13
13
|
queries_links = { }
|
14
14
|
queries_coocs = { }
|
15
15
|
names.each do |name|
|
16
16
|
url_links = "/links/name/#{name}.json"
|
17
17
|
query_links = query_handler(url_links)
|
18
|
-
multi.
|
18
|
+
multi.queue(query_links)
|
19
19
|
queries_links[name] = query_links
|
20
20
|
|
21
21
|
url_coocs = "/recommendations/name/#{name}.json"
|
22
22
|
query_coocs = query_handler(url_coocs)
|
23
|
-
multi.
|
23
|
+
multi.queue(query_coocs)
|
24
24
|
queries_coocs[name] = query_coocs
|
25
25
|
end
|
26
|
-
multi.
|
26
|
+
multi.run
|
27
27
|
responses = { }
|
28
28
|
queries_coocs.each_pair do |name, query|
|
29
|
-
if query.
|
29
|
+
if query.response.body.empty?
|
30
30
|
responses[name] ||= { }
|
31
31
|
next
|
32
32
|
end
|
33
|
-
obj = MultiJson.load(query.
|
33
|
+
obj = MultiJson.load(query.response.body)
|
34
34
|
if pfs2 = Response::Raw.new(obj).pfs2
|
35
35
|
responses[name] = Hash[*pfs2.flatten]
|
36
36
|
else
|
@@ -39,10 +39,10 @@ module OpenDNS
|
|
39
39
|
end
|
40
40
|
queries_links.each_pair do |name, query|
|
41
41
|
responses[name] ||= { }
|
42
|
-
if query.
|
42
|
+
if query.response.body.empty?
|
43
43
|
next
|
44
44
|
end
|
45
|
-
obj = MultiJson.load(query.
|
45
|
+
obj = MultiJson.load(query.response.body)
|
46
46
|
if tb1 = Response::Raw.new(obj).tb1
|
47
47
|
upper = [1.0, tb1.map { |x| x[1] }.max].max
|
48
48
|
responses[name] = Hash[*tb1.map { |x| [x[0], x[1] / upper] }.flatten]
|
@@ -11,7 +11,7 @@ module OpenDNS
|
|
11
11
|
def daily_traffic_by_name(names, options = { })
|
12
12
|
names_is_array = names.kind_of?(Enumerable)
|
13
13
|
names = [ names ] unless names_is_array
|
14
|
-
multi =
|
14
|
+
multi = query_multi
|
15
15
|
date_end = options[:start] || Date.today
|
16
16
|
date_end_s = CGI::escape("#{date_end.year}/#{date_end.month}/#{date_end.day}/23")
|
17
17
|
days_back = options[:days_back] || DEFAULT_DAYS_BACK
|
@@ -25,13 +25,13 @@ module OpenDNS
|
|
25
25
|
url_traffic = "/appserver/?v=1&function=domain2-system&domains=#{name0}" +
|
26
26
|
"&locations=&start=#{date_start_s}&stop=#{date_end_s}"
|
27
27
|
query_traffic = query_handler(url_traffic)
|
28
|
-
multi.
|
28
|
+
multi.queue(query_traffic)
|
29
29
|
queries_traffic[name] = query_traffic
|
30
30
|
end
|
31
|
-
multi.
|
31
|
+
multi.run
|
32
32
|
responses = { }
|
33
33
|
queries_traffic.each_pair do |name, query|
|
34
|
-
obj = MultiJson.load(query.
|
34
|
+
obj = MultiJson.load(query.response.body)
|
35
35
|
tc = obj['response']
|
36
36
|
tc = tc.group_by { |x| x[0].split('/')[0...3].join('/') }
|
37
37
|
tc.each_key do |date_s|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opendns-dnsdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frank Denis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|