globetrotter 0.0.6 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b888a19dab6e39a83cc3c9dfd9314712c02ae8bf
4
- data.tar.gz: bbf71fe7a2b929f648fef841779212f45f6f48f2
3
+ metadata.gz: 72d27cd241554a27d2a1293837f8fa80343d54f7
4
+ data.tar.gz: 0e1d8d1c57e0eadfa8d2548040ecb4ca2e87e9ac
5
5
  SHA512:
6
- metadata.gz: 37c74d82d195af4ff99ce60a595e1762168e40c26779d6f139792ed0e8f058279ec0815c28a55b6ae66e949d843589e3e0e2226ec0b3da6a223f339663d4a5d6
7
- data.tar.gz: b4d66382e11f283a85722f7b81fe472a9e12873f0d85a9c6cd3232cecb84af62d1231dcfb00d38bc13e042cdd7827987d8ce6bcb120721fb255f0697d1c1482b
6
+ metadata.gz: 16f0ef1273875bedb0fc7f696be7af7bd60844be7c6c780426a6a97c66f9fb97801fdceb926970970df52e77a84c185783e9c5511cb5e2889ccdebc9bb9dd8d0
7
+ data.tar.gz: e5878877935ef59cd2728a07d1f130811afde79b12e634474d433005f1e2a9218a8542f809e3a0ed01f461c921d2d9bdebf1f970d03477226029c0639e733a05
data/README.md CHANGED
@@ -4,11 +4,16 @@ globetrotter retrieves a list of DNS servers around the world from the [Public D
4
4
 
5
5
  ## Installation
6
6
 
7
- `gem install globetrotter`
7
+ $ gem install globetrotter
8
8
 
9
9
  ## Usage
10
10
  Query 100 DNS servers for googleapis.com, making 10 requests in parallel at a time:
11
- `globetrotter -q googleapis.com -c 100 -p 10`
11
+
12
+ $ globetrotter -q googleapis.com -c 100 -p 10
13
+
14
+ Write results for google.com to /tmp/google.txt - file will be created if it doens't exist
15
+
16
+ $ globetrotter -q google.com -f /tmp/google.txt
12
17
 
13
18
  See `globetrotter -h` for all parameters
14
19
 
data/bin/globetrotter CHANGED
@@ -4,7 +4,6 @@ $:.unshift File.join(File.dirname(__FILE__), %w{.. lib})
4
4
  require 'globetrotter'
5
5
  require 'optparse'
6
6
  require 'ostruct'
7
- require 'dnsruby'
8
7
 
9
8
  class GlobetrotterOptions
10
9
  def self.parse(args)
@@ -14,6 +13,7 @@ class GlobetrotterOptions
14
13
  options.ns_max_age_minutes = 60
15
14
  options.timeout_seconds = 2
16
15
  options.ns_query_concurrency = 10
16
+ options.file = false
17
17
 
18
18
  opt_parser = OptionParser.new do |opts|
19
19
  opts.banner = 'Usage: globetrotter [options] example.org'
@@ -32,6 +32,9 @@ class GlobetrotterOptions
32
32
  opts.on('-a 60', Integer, 'Use name servers checked less than A minutes ago') do |o|
33
33
  options.ns_max_age_minutes = o
34
34
  end
35
+ opts.on('-f /path/to/file', String, 'Read/write data to this file') do |o|
36
+ options.file = o
37
+ end
35
38
  opts.on_tail('-h', '--help', 'Display CLI help (this output)') do |o|
36
39
  puts opts.help
37
40
  exit
data/globetrotter.gemspec CHANGED
@@ -22,6 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake'
23
23
 
24
24
  spec.add_runtime_dependency 'rubydns', '~> 0.8'
25
- spec.add_runtime_dependency 'dnsruby', '~> 1.54'
26
25
  spec.add_runtime_dependency 'wrest', '~> 1.5'
27
26
  end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ require 'ipaddr'
3
+ require 'set'
4
+
5
+ class GlobetrotterFile
6
+ def initialize(file)
7
+ @set = Set.new
8
+ @file = open(file)
9
+ parse
10
+ end
11
+
12
+ attr_accessor :set
13
+
14
+ def open(file)
15
+ begin
16
+ file = File.open(file, File::RDONLY|File::CREAT)
17
+ rescue StandardError => e
18
+ abort e.to_s
19
+ end
20
+ file
21
+ end # open
22
+
23
+ def parse
24
+ self.open if @file.nil?
25
+ line_number = 0
26
+ # parse line for IP
27
+ @file.each_line do |line|
28
+ line_number += 1
29
+ begin
30
+ ip = IPAddr.new(line.chomp)
31
+ @set.add(ip)
32
+ rescue StandardError => e
33
+ abort "#{e} on line #{line_number}: '#{line}'"
34
+ end
35
+ end
36
+ @file.close unless @file.nil?
37
+ self
38
+ end # parse
39
+
40
+ def write
41
+ begin
42
+ File.open(@file, 'w') do |f|
43
+ f.puts(@set.to_a.sort.join("\n"))
44
+ end
45
+ rescue StandardError => e
46
+ abort e.to_s
47
+ end
48
+ end # write
49
+
50
+ def to_s
51
+ @file.path
52
+ end
53
+
54
+ end
@@ -1,3 +1,3 @@
1
1
  class Globetrotter
2
- VERSION = "0.0.6"
2
+ VERSION = '0.0.10'
3
3
  end
data/lib/globetrotter.rb CHANGED
@@ -1,5 +1,6 @@
1
- require_relative './globetrotter/version'
2
- require_relative './globetrotter/nameserver'
1
+ require 'globetrotter/version'
2
+ require 'globetrotter/nameserver'
3
+ require 'globetrotter/file'
3
4
  require 'wrest'
4
5
  require 'rubydns'
5
6
  require 'time'
@@ -15,6 +16,7 @@ class Globetrotter
15
16
  @query = options.domain
16
17
  @concurrency = options.ns_query_concurrency
17
18
  @ns_ips = fetch_ns_ips
19
+ @file = GlobetrotterFile.new(options.file) if options.file
18
20
  end
19
21
 
20
22
  def run
@@ -30,6 +32,7 @@ class Globetrotter
30
32
 
31
33
  EM.run do
32
34
  result_ips = Set.new
35
+ result_ips.merge(@file.set) if @file
33
36
  ok = 0
34
37
  nok = 0
35
38
  EM::Iterator.new(@ns_ips, @concurrency).each(
@@ -55,8 +58,14 @@ class Globetrotter
55
58
  end,
56
59
  proc do
57
60
  EM.stop
58
- result_ips.each { |ip| puts ip }
61
+ if @file
62
+ @file.set = result_ips
63
+ @file.write
64
+ else
65
+ result_ips.each { |ip| puts ip }
66
+ end
59
67
  $stderr.puts "#{ok} succeeded, #{nok} failed (#{ok + nok} total)"
68
+ $stderr.puts "Results written to #{@file}" if @file
60
69
  end
61
70
  )
62
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: globetrotter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Lopez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-19 00:00:00.000000000 Z
11
+ date: 2014-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.8'
55
- - !ruby/object:Gem::Dependency
56
- name: dnsruby
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.54'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.54'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: wrest
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -96,6 +82,7 @@ files:
96
82
  - bin/globetrotter
97
83
  - globetrotter.gemspec
98
84
  - lib/globetrotter.rb
85
+ - lib/globetrotter/file.rb
99
86
  - lib/globetrotter/nameserver.rb
100
87
  - lib/globetrotter/version.rb
101
88
  homepage: https://github.com/amplify-education/globetrotter