passivedns-client 2.1.9 → 2.1.11
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/README.md +3 -0
- data/lib/passivedns/client.rb +6 -0
- data/lib/passivedns/client/cli.rb +5 -1
- data/lib/passivedns/client/provider/bfk.rb +2 -1
- data/lib/passivedns/client/provider/circl.rb +21 -5
- data/lib/passivedns/client/provider/cn360.rb +28 -22
- data/lib/passivedns/client/provider/dnsdb.rb +2 -1
- data/lib/passivedns/client/provider/mnemonic.rb +2 -1
- data/lib/passivedns/client/provider/passivetotal.rb +2 -1
- data/lib/passivedns/client/provider/riskiq.rb +21 -5
- data/lib/passivedns/client/provider/tcpiputils.rb +2 -1
- data/lib/passivedns/client/provider/virustotal.rb +16 -2
- data/lib/passivedns/client/version.rb +1 -1
- data/test/test_cli.rb +13 -6
- 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: 41bb1d54d9a49eb1995dfdd9c78538dc91ed40d7
|
4
|
+
data.tar.gz: c446107f1d435fcc1334b20d62c72ec18c495a3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4117587bbb9789a381696295a40d88fff86e0284e358ec8feeae64f1436de6f09d17db8f71f3add3d950f8fd6f4ce31b43bd19b7f8a2ff1fabd4e5a4d5e135b9
|
7
|
+
data.tar.gz: da94f1292023be6bb0ec75a380ac3fa661e8ecfbe6cb2fc13ad327a9930a28d7cd23b81ab1d6715df817b85760ddaab14f90fd07c4bdb16634fab521de6a8823
|
data/README.md
CHANGED
@@ -115,6 +115,9 @@ Or use the included tool...
|
|
115
115
|
-r# specifies the levels of recursion to pull. **WARNING** This is quite taxing on the pDNS servers, so use judiciously (never more than 3 or so) or find yourself blocked!
|
116
116
|
-w# specifies the amount of time to wait, in seconds, between queries (Default: 0)
|
117
117
|
-l <count> limits the number of records returned per passive dns database queried.
|
118
|
+
|
119
|
+
Specifying a Configuration File
|
120
|
+
--config <file> specifies a config file. default: #{ENV['HOME']}/.passivedns-client
|
118
121
|
|
119
122
|
Getting Help
|
120
123
|
-v debugging information
|
data/lib/passivedns/client.rb
CHANGED
@@ -94,6 +94,12 @@ module PassiveDNS # :nodoc:
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
+
def timeout=(t)
|
98
|
+
@pdnsdbs.each do |pdnsdb|
|
99
|
+
pdnsdb.timeout = t
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
97
103
|
# perform the query lookup accross all configured PassiveDNS providers
|
98
104
|
def query(item, limit=nil)
|
99
105
|
threads = []
|
@@ -75,7 +75,8 @@ module PassiveDNS # :nodoc:
|
|
75
75
|
:debug => false,
|
76
76
|
:sqlitedb => nil,
|
77
77
|
:limit => nil,
|
78
|
-
:help => false
|
78
|
+
:help => false,
|
79
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
79
80
|
}
|
80
81
|
|
81
82
|
opts.each do |opt, arg|
|
@@ -186,6 +187,9 @@ module PassiveDNS # :nodoc:
|
|
186
187
|
help_text << " -w# specifies the amount of time to wait, in seconds, between queries (Default: 0)\n"
|
187
188
|
help_text << " -l <count> limits the number of records returned per passive dns database queried.\n"
|
188
189
|
help_text << "\n"
|
190
|
+
help_text << "Specifying a Configuration File\n"
|
191
|
+
help_text << " --config <file> specifies a config file. default: #{ENV['HOME']}/.passivedns-client\n"
|
192
|
+
help_text << "\n"
|
189
193
|
help_text << "Getting Help\n"
|
190
194
|
help_text << " -h hello there. This option produces this helpful help information on how to access help.\n"
|
191
195
|
help_text << " -v debugging information\n"
|
@@ -36,6 +36,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
36
36
|
#
|
37
37
|
def initialize(options={})
|
38
38
|
@debug = options[:debug] || false
|
39
|
+
@timeout = options[:timeout] || 20
|
39
40
|
@base = options["URL"] || "http://www.bfk.de/bfk_dnslogger.html?query="
|
40
41
|
raise "Due to the EU GDPR policy, this service has been shut down until further notice."
|
41
42
|
end
|
@@ -44,7 +45,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
44
45
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
45
46
|
def lookup(label, limit=nil)
|
46
47
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
47
|
-
Timeout::timeout(
|
48
|
+
Timeout::timeout(@timeout) {
|
48
49
|
t1 = Time.now
|
49
50
|
open(
|
50
51
|
@base+label,
|
@@ -47,6 +47,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
47
47
|
#
|
48
48
|
def initialize(options={})
|
49
49
|
@debug = options[:debug] || false
|
50
|
+
@timeout = options[:timeout] || 20
|
50
51
|
@username = options["USERNAME"]
|
51
52
|
@password = options["PASSWORD"]
|
52
53
|
@auth_token = options["AUTH_TOKEN"]
|
@@ -57,10 +58,16 @@ module PassiveDNS #:nodoc: don't document this
|
|
57
58
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
58
59
|
def lookup(label, limit=nil)
|
59
60
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
60
|
-
|
61
|
+
recs = []
|
62
|
+
Timeout::timeout(@timeout) {
|
61
63
|
url = @url+"/"+label
|
62
64
|
$stderr.puts "DEBUG: #{self.class.name} url = #{url}" if @debug
|
63
|
-
|
65
|
+
begin
|
66
|
+
url = URI.parse url
|
67
|
+
rescue URI::InvalidURIError
|
68
|
+
$stderr.puts "ERROR: Invalid address: #{url}"
|
69
|
+
return recs
|
70
|
+
end
|
64
71
|
http = Net::HTTP.new(url.host, url.port)
|
65
72
|
http.use_ssl = (url.scheme == 'https')
|
66
73
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -74,9 +81,17 @@ module PassiveDNS #:nodoc: don't document this
|
|
74
81
|
request.add_field("Authorization", @auth_token)
|
75
82
|
end
|
76
83
|
t1 = Time.now
|
77
|
-
|
78
|
-
|
79
|
-
|
84
|
+
0.upto(9) do
|
85
|
+
response = http.request(request)
|
86
|
+
body = response.body
|
87
|
+
if body == "Rate Limit Exceeded"
|
88
|
+
$stderr.puts "DEBUG: Rate Limit Exceeded. Retrying #{label}" if @debug
|
89
|
+
else
|
90
|
+
t2 = Time.now
|
91
|
+
recs = parse_json(response.body, label, t2-t1)
|
92
|
+
break
|
93
|
+
end
|
94
|
+
end
|
80
95
|
if limit
|
81
96
|
recs[0,limit]
|
82
97
|
else
|
@@ -85,6 +100,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
85
100
|
}
|
86
101
|
rescue Timeout::Error => e
|
87
102
|
$stderr.puts "#{self.class.name} lookup timed out: #{label}"
|
103
|
+
recs
|
88
104
|
end
|
89
105
|
|
90
106
|
private
|
@@ -43,6 +43,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
43
43
|
#
|
44
44
|
def initialize(options={})
|
45
45
|
@debug = options[:debug] || false
|
46
|
+
@timeout = options[:timeout] || 20
|
46
47
|
["API", "API_ID", "API_KEY"].each do |opt|
|
47
48
|
if not options[opt]
|
48
49
|
raise "Field #{opt} is required. See README.md"
|
@@ -60,28 +61,33 @@ module PassiveDNS #:nodoc: don't document this
|
|
60
61
|
end
|
61
62
|
limit ||= 10000
|
62
63
|
path = "/api/#{table}/keyword/#{label}/count/#{limit}/"
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
64
|
+
Timeout::timeout(@timeout) {
|
65
|
+
url = @cp["API"]+path
|
66
|
+
url = URI.parse url
|
67
|
+
http = Net::HTTP.new(url.host, url.port)
|
68
|
+
http.use_ssl = (url.scheme == 'https')
|
69
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # I hate doing this
|
70
|
+
http.verify_depth = 5
|
71
|
+
request = Net::HTTP::Get.new(url.path)
|
72
|
+
request.add_field("User-Agent", "Ruby/#{RUBY_VERSION} passivedns-client rubygem v#{PassiveDNS::Client::VERSION}")
|
73
|
+
request.add_field('Accept', 'application/json')
|
74
|
+
request.add_field("X-BashTokid", @cp["API_ID"])
|
75
|
+
token = Digest::MD5.hexdigest(path+@cp["API_KEY"])
|
76
|
+
$stderr.puts "DEBUG: cn360 url = #{url} token = #{token}" if @debug
|
77
|
+
request.add_field("X-BashToken", token)
|
78
|
+
t1 = Time.now
|
79
|
+
response = http.request(request)
|
80
|
+
t2 = Time.now
|
81
|
+
recs = parse_json(response.body, label, t2-t1)
|
82
|
+
if limit
|
83
|
+
recs[0,limit]
|
84
|
+
else
|
85
|
+
recs
|
86
|
+
end
|
87
|
+
}
|
88
|
+
rescue Timeout::Error => e
|
89
|
+
$stderr.puts "#{self.class.name} lookup timed out: #{label}"
|
90
|
+
recs
|
85
91
|
end
|
86
92
|
|
87
93
|
private
|
@@ -41,6 +41,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
41
41
|
#
|
42
42
|
def initialize(options={})
|
43
43
|
@debug = options[:debug] || false
|
44
|
+
@timeout = options[:timeout] || 20
|
44
45
|
@key = options["APIKEY"] || raise("APIKEY option required for #{self.class}")
|
45
46
|
@base = options["URL"] || "https://api.dnsdb.info/lookup"
|
46
47
|
end
|
@@ -49,7 +50,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
49
50
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
50
51
|
def lookup(label, limit=nil)
|
51
52
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
52
|
-
Timeout::timeout(
|
53
|
+
Timeout::timeout(@timeout) {
|
53
54
|
url = nil
|
54
55
|
if label =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$/
|
55
56
|
label = label.gsub(/\//,',')
|
@@ -41,6 +41,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
41
41
|
#
|
42
42
|
def initialize(options={})
|
43
43
|
@debug = options[:debug] || false
|
44
|
+
@timeout = options[:timeout] || 20
|
44
45
|
@apikey = options["APIKEY"]
|
45
46
|
@url = options["URL"] || "https://api.mnemonic.no/pdns/v3/"
|
46
47
|
if @url == "https://passivedns.mnemonic.no/api1/?apikey="
|
@@ -52,7 +53,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
52
53
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
53
54
|
def lookup(label, limit=nil)
|
54
55
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
55
|
-
Timeout::timeout(
|
56
|
+
Timeout::timeout(@timeout) {
|
56
57
|
url = "#{@url}#{label}"
|
57
58
|
$stderr.puts "DEBUG: #{self.class.name} url = #{url}" if @debug
|
58
59
|
url = URI.parse url
|
@@ -54,6 +54,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
54
54
|
#
|
55
55
|
def initialize(options={})
|
56
56
|
@debug = options[:debug] || false
|
57
|
+
@timeout = options[:timeout] || 20
|
57
58
|
@username = options["USERNAME"] || raise("#{self.class.name} requires a USERNAME")
|
58
59
|
@apikey = options["APIKEY"] || raise("#{self.class.name} requires an APIKEY")
|
59
60
|
@url = options["URL"] || "https://api.passivetotal.org/v2/dns/passive"
|
@@ -63,7 +64,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
63
64
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
64
65
|
def lookup(label, limit=nil)
|
65
66
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
66
|
-
Timeout::timeout(
|
67
|
+
Timeout::timeout(@timeout) {
|
67
68
|
url = @url+"?query=#{label}"
|
68
69
|
$stderr.puts "DEBUG: #{self.class.name} url = #{url}" if @debug
|
69
70
|
url = URI.parse url
|
@@ -46,10 +46,11 @@ module PassiveDNS #:nodoc: don't document this
|
|
46
46
|
#
|
47
47
|
def initialize(options={})
|
48
48
|
@debug = options[:debug] || false
|
49
|
+
@timeout = options[:timeout] || 20
|
49
50
|
@token = options["API_TOKEN"] || raise("#{self.class.name} requires an API_TOKEN")
|
50
51
|
@privkey = options["API_PRIVATE_KEY"] || raise("#{self.class.name} requires an API_PRIVATE_KEY")
|
51
|
-
@server = options["API_SERVER"] || "ws.riskiq.net"
|
52
52
|
@version = options["API_VERSION"] || "v1"
|
53
|
+
@server = options["API_SERVER"] || api_settings[@version][:server]
|
53
54
|
@url = "https://#{@server}/#{@version}"
|
54
55
|
end
|
55
56
|
|
@@ -57,7 +58,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
57
58
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
58
59
|
def lookup(label, limit=nil)
|
59
60
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
60
|
-
Timeout::timeout(
|
61
|
+
Timeout::timeout(@timeout) {
|
61
62
|
url = nil
|
62
63
|
params = {"rrType" => "", "maxResults" => limit || 1000}
|
63
64
|
|
@@ -65,8 +66,10 @@ module PassiveDNS #:nodoc: don't document this
|
|
65
66
|
url = @url+"/dns/data"
|
66
67
|
params["ip"] = label
|
67
68
|
else
|
68
|
-
|
69
|
-
|
69
|
+
resource = api_settings[@version][:resource]
|
70
|
+
param = api_settings[@version][:param]
|
71
|
+
url = @url+"/dns/#{resource}"
|
72
|
+
params[param] = label
|
70
73
|
end
|
71
74
|
url << "?"
|
72
75
|
params.each do |k,v|
|
@@ -101,10 +104,23 @@ module PassiveDNS #:nodoc: don't document this
|
|
101
104
|
|
102
105
|
private
|
103
106
|
|
107
|
+
def api_settings
|
108
|
+
@api_settings ||= {
|
109
|
+
'v1' => { server: "ws.riskiq.net", resource: 'name', param: 'name' },
|
110
|
+
'v2' => { server: "api.passivetotal.org", resource: 'passive', param: 'query' }
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
104
114
|
# parses the response of riskiq's JSON reply to generate an array of PDNSResult
|
105
115
|
def parse_json(page,query,response_time=0)
|
106
|
-
|
116
|
+
res = []
|
107
117
|
data = JSON.parse(page)
|
118
|
+
if data['message']
|
119
|
+
if data['message'] =~ /quota_exceeded/
|
120
|
+
$stderr.puts "ERROR: quota exceeded."
|
121
|
+
return res
|
122
|
+
end
|
123
|
+
end
|
108
124
|
if data['records']
|
109
125
|
data['records'].each do |record|
|
110
126
|
name = record['name'].gsub!(/\.$/,'')
|
@@ -42,6 +42,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
42
42
|
#
|
43
43
|
def initialize(options={})
|
44
44
|
@debug = options[:debug] || false
|
45
|
+
@timeout = options[:timeout] || 20
|
45
46
|
@apikey = options["APIKEY"] || raise("#{self.class.name} requires an APIKEY. See README.md")
|
46
47
|
@url = options["URL"] || "https://www.utlsapi.com/api.php?version=1.0&apikey="
|
47
48
|
end
|
@@ -53,7 +54,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
53
54
|
type = (label.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)) ? "domainneighbors" : "domainipdnshistory"
|
54
55
|
url = "#{@url}#{@apikey}&type=#{type}&q=#{label}"
|
55
56
|
recs = []
|
56
|
-
Timeout::timeout(
|
57
|
+
Timeout::timeout(@timeout) {
|
57
58
|
url = URI.parse url
|
58
59
|
http = Net::HTTP.new(url.host, url.port)
|
59
60
|
http.use_ssl = (url.scheme == 'https')
|
@@ -41,6 +41,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
41
41
|
#
|
42
42
|
def initialize(options={})
|
43
43
|
@debug = options[:debug] || false
|
44
|
+
@timeout = options[:timeout] || 20
|
44
45
|
@apikey = options["APIKEY"] || raise("#{self.class.name} requires an APIKEY. See README.md")
|
45
46
|
@url = options["URL"] || "https://www.virustotal.com/vtapi/v2/"
|
46
47
|
end
|
@@ -49,7 +50,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
49
50
|
# an array of PassiveDNS::PDNSResult instances with the answers to the query
|
50
51
|
def lookup(label, limit=nil)
|
51
52
|
$stderr.puts "DEBUG: #{self.class.name}.lookup(#{label})" if @debug
|
52
|
-
Timeout::timeout(
|
53
|
+
Timeout::timeout(@timeout) {
|
53
54
|
url = nil
|
54
55
|
if label =~ /^[\d\.]+$/
|
55
56
|
url = "#{@url}ip-address/report?ip=#{label}&apikey=#{@apikey}"
|
@@ -57,7 +58,12 @@ module PassiveDNS #:nodoc: don't document this
|
|
57
58
|
url = "#{@url}domain/report?domain=#{label}&apikey=#{@apikey}"
|
58
59
|
end
|
59
60
|
$stderr.puts "DEBUG: #{self.class.name} url = #{url}" if @debug
|
60
|
-
|
61
|
+
begin
|
62
|
+
url = URI.parse url
|
63
|
+
rescue URI::InvalidURIError
|
64
|
+
$stderr.puts "ERROR: Invalid address: #{url}"
|
65
|
+
return
|
66
|
+
end
|
61
67
|
http = Net::HTTP.new(url.host, url.port)
|
62
68
|
http.use_ssl = (url.scheme == 'https')
|
63
69
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -66,6 +72,10 @@ module PassiveDNS #:nodoc: don't document this
|
|
66
72
|
request.add_field("User-Agent", "Ruby/#{RUBY_VERSION} passivedns-client rubygem v#{PassiveDNS::Client::VERSION}")
|
67
73
|
t1 = Time.now
|
68
74
|
response = http.request(request)
|
75
|
+
if response.code.to_i == 204
|
76
|
+
$stderr.puts "DEBUG: empty response from server" if @debug
|
77
|
+
return
|
78
|
+
end
|
69
79
|
t2 = Time.now
|
70
80
|
recs = parse_json(response.body, label, t2-t1)
|
71
81
|
if limit
|
@@ -83,6 +93,7 @@ module PassiveDNS #:nodoc: don't document this
|
|
83
93
|
# parses the response of virustotal's JSON reply to generate an array of PDNSResult
|
84
94
|
def parse_json(page,query,response_time=0)
|
85
95
|
res = []
|
96
|
+
return res if !page
|
86
97
|
data = JSON.parse(page)
|
87
98
|
if data['resolutions']
|
88
99
|
data['resolutions'].each do |row|
|
@@ -94,6 +105,9 @@ module PassiveDNS #:nodoc: don't document this
|
|
94
105
|
end
|
95
106
|
end
|
96
107
|
end
|
108
|
+
if data['response_code'] == 0
|
109
|
+
$stderr.puts "DEBUG: server returned error: #{data['verbose_msg']}" if @debug
|
110
|
+
end
|
97
111
|
res
|
98
112
|
rescue Exception => e
|
99
113
|
$stderr.puts "VirusTotal Exception: #{e}"
|
data/test/test_cli.rb
CHANGED
@@ -51,6 +51,9 @@ State and Recursion
|
|
51
51
|
-w# specifies the amount of time to wait, in seconds, between queries (Default: 0)
|
52
52
|
-l <count> limits the number of records returned per passive dns database queried.
|
53
53
|
|
54
|
+
Specifying a Configuration File
|
55
|
+
--config <file> specifies a config file. default: #{ENV['HOME']}/.passivedns-client
|
56
|
+
|
54
57
|
Getting Help
|
55
58
|
-h hello there. This option produces this helpful help information on how to access help.
|
56
59
|
-v debugging information
|
@@ -68,7 +71,8 @@ Getting Help
|
|
68
71
|
:debug => false,
|
69
72
|
:sqlitedb => nil,
|
70
73
|
:limit => nil,
|
71
|
-
:help => false
|
74
|
+
:help => false,
|
75
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
72
76
|
}
|
73
77
|
|
74
78
|
options, items = PassiveDNS::CLI.parse_command_line([])
|
@@ -108,7 +112,8 @@ Getting Help
|
|
108
112
|
:debug => false,
|
109
113
|
:sqlitedb => nil,
|
110
114
|
:limit => nil,
|
111
|
-
:help => false
|
115
|
+
:help => false,
|
116
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
112
117
|
}
|
113
118
|
|
114
119
|
options_target[:sep] = ","
|
@@ -171,7 +176,8 @@ Getting Help
|
|
171
176
|
:debug => false,
|
172
177
|
:sqlitedb => nil,
|
173
178
|
:limit => nil,
|
174
|
-
:help => true
|
179
|
+
:help => true,
|
180
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
175
181
|
}
|
176
182
|
|
177
183
|
options, items = PassiveDNS::CLI.parse_command_line(["-dptv", "-h", "8.8.8.8"])
|
@@ -195,7 +201,8 @@ Getting Help
|
|
195
201
|
:debug => false,
|
196
202
|
:sqlitedb => "test.db",
|
197
203
|
:limit => 10,
|
198
|
-
:help => false
|
204
|
+
:help => false,
|
205
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
199
206
|
}
|
200
207
|
|
201
208
|
options, items = PassiveDNS::CLI.parse_command_line(["-dptv", "-f", "test.db", "-r", "5", "-w", "30", "-l", "10", "8.8.8.8"])
|
@@ -215,11 +222,11 @@ Getting Help
|
|
215
222
|
:sqlitedb => nil,
|
216
223
|
:limit => nil,
|
217
224
|
:help => false,
|
218
|
-
:configfile => "
|
225
|
+
:configfile => "#{ENV['HOME']}/.passivedns-client"
|
219
226
|
}
|
220
227
|
|
221
228
|
|
222
|
-
options, items = PassiveDNS::CLI.parse_command_line(["--config", "
|
229
|
+
options, items = PassiveDNS::CLI.parse_command_line(["--config", "#{ENV['HOME']}/.passivedns-client"])
|
223
230
|
assert_equal(options_target, options)
|
224
231
|
assert_equal([], items)
|
225
232
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: passivedns-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chrislee35
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|