opendns-dnsdb 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|