rubydns 0.8.1 → 0.8.4

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.
@@ -0,0 +1,14 @@
1
+
2
+ options {
3
+ directory "./";
4
+
5
+ listen-on-v6 { none; };
6
+ listen-on { 127.0.0.1; };
7
+
8
+ pid-file "./named.pid";
9
+ };
10
+
11
+ zone "local" {
12
+ type master;
13
+ file "./local.zone";
14
+ };
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright, 2009, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require 'rubydns'
24
+ require 'benchmark'
25
+
26
+ require 'stackprof'
27
+
28
+ Name = Resolv::DNS::Name
29
+ IN = Resolv::DNS::Resource::IN
30
+
31
+ # Generate a million A record "domains":
32
+
33
+ million = {}
34
+
35
+ Benchmark.bm do |x|
36
+ x.report("Generate names") do
37
+ (1..1_000_000).each do |i|
38
+ domain = "domain#{i}.local"
39
+
40
+ million[domain] = "#{69}.#{(i >> 16)%256}.#{(i >> 8)%256}.#{i%256}"
41
+ end
42
+ end
43
+ end
44
+
45
+ # Run the server:
46
+
47
+ StackProf.run(mode: :cpu, out: 'rubydns.stackprof') do
48
+ RubyDNS::run_server(:listen => [[:udp, '0.0.0.0', 5300]]) do
49
+ @logger.level = Logger::WARN
50
+
51
+ match(//, IN::A) do |transaction|
52
+ transaction.respond!(million[transaction.name])
53
+ end
54
+
55
+ # Default DNS handler
56
+ otherwise do |transaction|
57
+ logger.info "Passing DNS request upstream..."
58
+ transaction.fail!(:NXDomain)
59
+
60
+ EventMachine::stop
61
+ end
62
+ end
63
+ end
64
+
65
+ # Expected output:
66
+ #
67
+ # > dig @localhost -p 5300 domain1000000
68
+ #
69
+ # ; <<>> DiG 9.8.3-P1 <<>> @localhost -p 5300 domain1000000
70
+ # ; (3 servers found)
71
+ # ;; global options: +cmd
72
+ # ;; Got answer:
73
+ # ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50336
74
+ # ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
75
+ # ;; WARNING: recursion requested but not available
76
+ #
77
+ # ;; QUESTION SECTION:
78
+ # ;domain1000000. IN A
79
+ #
80
+ # ;; ANSWER SECTION:
81
+ # domain1000000. 86400 IN A 69.15.66.64
82
+ #
83
+ # ;; Query time: 1 msec
84
+ # ;; SERVER: 127.0.0.1#5300(127.0.0.1)
85
+ # ;; WHEN: Fri May 16 19:17:48 2014
86
+ # ;; MSG SIZE rcvd: 47
87
+ #
data/test/test_daemon.rb CHANGED
@@ -29,10 +29,12 @@ require 'process/daemon'
29
29
  class BasicTestServer < Process::Daemon
30
30
  SERVER_PORTS = [[:udp, '127.0.0.1', 5350], [:tcp, '127.0.0.1', 5350]]
31
31
 
32
- @@base_directory = File.dirname(__FILE__)
33
-
34
32
  IN = Resolv::DNS::Resource::IN
35
33
 
34
+ def working_directory
35
+ File.expand_path("../tmp", __FILE__)
36
+ end
37
+
36
38
  def startup
37
39
  # Start the RubyDNS server
38
40
  RubyDNS::run_server(:listen => SERVER_PORTS) do
@@ -44,6 +46,10 @@ class BasicTestServer < Process::Daemon
44
46
  transaction.respond!("192.168.1.2")
45
47
  end
46
48
 
49
+ match(/peername/, IN::A) do |transaction|
50
+ transaction.respond!(transaction[:connection].peername[1])
51
+ end
52
+
47
53
  # Default DNS handler
48
54
  otherwise do |transaction|
49
55
  transaction.fail!(:NXDomain)
@@ -96,4 +102,20 @@ class DaemonTest < MiniTest::Test
96
102
  end
97
103
  end
98
104
  end
105
+
106
+ def test_peername
107
+ assert_equal :running, BasicTestServer.status
108
+
109
+ EventMachine.run do
110
+ resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
111
+
112
+ resolver.query("peername") do |response|
113
+ answer = response.answer.first
114
+
115
+ assert_equal "127.0.0.1", answer[2].address.to_s
116
+
117
+ EventMachine.stop
118
+ end
119
+ end
120
+ end
99
121
  end
@@ -30,7 +30,7 @@ class PassthroughServer < Process::Daemon
30
30
  SERVER_PORTS = [[:udp, '127.0.0.1', 5340], [:tcp, '127.0.0.1', 5340]]
31
31
 
32
32
  def working_directory
33
- File.join(__dir__, "tmp")
33
+ File.expand_path("../tmp", __FILE__)
34
34
  end
35
35
 
36
36
  Name = Resolv::DNS::Name
@@ -86,6 +86,7 @@ class ResolverPerformanceTest < MiniTest::Test
86
86
  rubydns_resolved = {}
87
87
  resolv_resolved = {}
88
88
 
89
+ puts nil, "Comparing resolvers..."
89
90
  Benchmark.bm(20) do |x|
90
91
  x.report("RubyDNS::Resolver") do
91
92
  resolver = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
@@ -113,7 +114,7 @@ class ResolverPerformanceTest < MiniTest::Test
113
114
  end
114
115
  end
115
116
 
116
- DOMAINS.each do |domain|
117
+ DOMAINS.first(3).each do |domain|
117
118
  # We don't really care if the responses aren't identical - they should be most of the time but due to the way DNS works this isn't always the case:
118
119
  refute_empty resolv_resolved[domain]
119
120
  refute_empty rubydns_resolved[domain]
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require 'minitest/autorun'
24
+
25
+ require 'rubydns'
26
+ require 'process/daemon'
27
+
28
+ require 'benchmark'
29
+
30
+ class ServerPerformanceRubyDNS < Process::Daemon
31
+ IN = Resolv::DNS::Resource::IN
32
+
33
+ def working_directory
34
+ File.expand_path("../tmp", __FILE__)
35
+ end
36
+
37
+ def startup
38
+ million = {}
39
+
40
+ puts "Generating domains..."
41
+ (1..5_000).each do |i|
42
+ domain = "domain#{i}.local"
43
+
44
+ million[domain] = "#{69}.#{(i >> 16)%256}.#{(i >> 8)%256}.#{i%256}"
45
+ end
46
+
47
+ puts "Starting DNS server..."
48
+ RubyDNS::run_server(:listen => [[:udp, '0.0.0.0', 5300]]) do
49
+ @logger.level = Logger::WARN
50
+
51
+ match(//, IN::A) do |transaction|
52
+ puts "Responding to #{transaction.name}"
53
+ transaction.respond!(million[transaction.name])
54
+ end
55
+
56
+ # Default DNS handler
57
+ otherwise do |transaction|
58
+ transaction.fail!(:NXDomain)
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ class ServerPerformanceBind9 < Process::Daemon
65
+ def working_directory
66
+ File.expand_path("../performance/bind9", __FILE__)
67
+ end
68
+
69
+ def startup
70
+ exec(self.class.named_executable, "-c", "named.conf", "-f", "-p", "5400", "-g")
71
+ end
72
+
73
+ def self.named_executable
74
+ # Check if named executable is available:
75
+ @named ||= `which named`.chomp
76
+ end
77
+ end
78
+
79
+ class ServerPerformanceTest < MiniTest::Test
80
+ DOMAINS = (1..1000).collect do |i|
81
+ "domain#{i}.local"
82
+ end
83
+
84
+ def setup
85
+ @servers = []
86
+ @servers << ["RubyDNS::Server", 5300]
87
+
88
+ ServerPerformanceRubyDNS.start
89
+
90
+ unless ServerPerformanceBind9.named_executable.empty?
91
+ ServerPerformanceBind9.start
92
+ @servers << ["Bind9", 5400]
93
+ end
94
+
95
+ # Give the daemons some time to start up:
96
+ sleep 2
97
+ end
98
+
99
+ def teardown
100
+ ServerPerformanceRubyDNS.stop
101
+
102
+ unless ServerPerformanceBind9.named_executable.empty?
103
+ ServerPerformanceBind9.stop
104
+ end
105
+ end
106
+
107
+ def test_server_performance
108
+ resolved = {}
109
+
110
+ puts nil, "Testing server performance..."
111
+ Benchmark.bm(20) do |x|
112
+ @servers.each do |name, port|
113
+ x.report(name) do
114
+ # Number of requests remaining since this is an asynchronous event loop:
115
+ 5.times do
116
+ pending = DOMAINS.size
117
+
118
+ EventMachine::run do
119
+ resolver = RubyDNS::Resolver.new([[:udp, '127.0.0.1', port]])
120
+
121
+ DOMAINS.each do |domain|
122
+ resolver.addresses_for(domain) do |addresses|
123
+ resolved[domain] = addresses
124
+
125
+ EventMachine::stop if (pending -= 1) == 0
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -29,10 +29,8 @@ require 'process/daemon'
29
29
  class SlowServer < Process::Daemon
30
30
  SERVER_PORTS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
31
31
 
32
- @@base_directory = File.dirname(__FILE__)
33
-
34
32
  def working_directory
35
- File.join(__dir__, "tmp")
33
+ File.expand_path("../tmp", __FILE__)
36
34
  end
37
35
 
38
36
  IN = Resolv::DNS::Resource::IN
@@ -30,10 +30,8 @@ require 'process/daemon'
30
30
  class TruncatedServer < Process::Daemon
31
31
  SERVER_PORTS = [[:udp, '127.0.0.1', 5320], [:tcp, '127.0.0.1', 5320]]
32
32
 
33
- @@base_directory = File.dirname(__FILE__)
34
-
35
33
  def working_directory
36
- File.join(__dir__, "tmp")
34
+ File.expand_path("../tmp", __FILE__)
37
35
  end
38
36
 
39
37
  IN = Resolv::DNS::Resource::IN
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: process-daemon
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.5.0
47
+ version: 0.5.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.5.0
54
+ version: 0.5.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: "\t\tRubyDNS is a high-performance DNS server which can be easily integrated
@@ -80,9 +80,9 @@ executables:
80
80
  extensions: []
81
81
  extra_rdoc_files: []
82
82
  files:
83
- - .gitignore
84
- - .travis.yml
85
- - .yardopts
83
+ - ".gitignore"
84
+ - ".travis.yml"
85
+ - ".yardopts"
86
86
  - Gemfile
87
87
  - README.md
88
88
  - Rakefile
@@ -109,13 +109,18 @@ files:
109
109
  - test/examples/test-dns-2.rb
110
110
  - test/examples/wikipedia-dns.rb
111
111
  - test/hosts.txt
112
+ - test/performance/benchmark.rb
113
+ - test/performance/bind9/generate-local.rb
114
+ - test/performance/bind9/local.zone
115
+ - test/performance/bind9/named.conf
116
+ - test/performance/million.rb
112
117
  - test/test_daemon.rb
113
- - test/test_domains.txt
114
118
  - test/test_message.rb
115
119
  - test/test_passthrough.rb
116
120
  - test/test_resolver.rb
117
121
  - test/test_resolver_performance.rb
118
122
  - test/test_rules.rb
123
+ - test/test_server_performance.rb
119
124
  - test/test_slow_server.rb
120
125
  - test/test_system.rb
121
126
  - test/test_truncation.rb
@@ -129,17 +134,17 @@ require_paths:
129
134
  - lib
130
135
  required_ruby_version: !ruby/object:Gem::Requirement
131
136
  requirements:
132
- - - '>='
137
+ - - ">="
133
138
  - !ruby/object:Gem::Version
134
139
  version: 1.9.3
135
140
  required_rubygems_version: !ruby/object:Gem::Requirement
136
141
  requirements:
137
- - - '>='
142
+ - - ">="
138
143
  - !ruby/object:Gem::Version
139
144
  version: '0'
140
145
  requirements: []
141
146
  rubyforge_project:
142
- rubygems_version: 2.0.3
147
+ rubygems_version: 2.2.2
143
148
  signing_key:
144
149
  specification_version: 4
145
150
  summary: An easy to use DNS server and resolver for Ruby.
@@ -152,13 +157,18 @@ test_files:
152
157
  - test/examples/test-dns-2.rb
153
158
  - test/examples/wikipedia-dns.rb
154
159
  - test/hosts.txt
160
+ - test/performance/benchmark.rb
161
+ - test/performance/bind9/generate-local.rb
162
+ - test/performance/bind9/local.zone
163
+ - test/performance/bind9/named.conf
164
+ - test/performance/million.rb
155
165
  - test/test_daemon.rb
156
- - test/test_domains.txt
157
166
  - test/test_message.rb
158
167
  - test/test_passthrough.rb
159
168
  - test/test_resolver.rb
160
169
  - test/test_resolver_performance.rb
161
170
  - test/test_rules.rb
171
+ - test/test_server_performance.rb
162
172
  - test/test_slow_server.rb
163
173
  - test/test_system.rb
164
174
  - test/test_truncation.rb
@@ -1,185 +0,0 @@
1
- 0.channel18.facebook.com
2
- 2leep.com
3
- EVIntl-ocsp.verisign.com
4
- EVSecure-ocsp.verisign.com
5
- a.tribalfusion.com
6
- a1059.g.akamai.net
7
- a126.g.akamai.net
8
- a1338.g.akamai.net
9
- a199.gi3.akamai.net
10
- a248.e.akamai.net
11
- a696.g.akamai.net
12
- a803.g.akamai.net
13
- ad.doubleclick.net
14
- ad.yieldmanager.com
15
- ad1.netshelter.net
16
- ad2.netshelter.net
17
- address.yahoo.com
18
- ads.adbrite.com
19
- ads.trademe.co.nz
20
- ads.tw.adsonar.com
21
- ads1.perfadbrite.com.akadns.net
22
- adsfac.us
23
- ajax.googleapis.com
24
- aleccolocco.blogspot.com
25
- anycast-asia.quantserve.com.akadns.net
26
- apps.facebook.com
27
- appspot.l.google.com
28
- ayako.oriontransfer.org
29
- b.scorecardresearch.com
30
- b1.adbrite.com
31
- backend.deviantart.com
32
- blog.nominet.org.uk
33
- c.fsdn.com
34
- cache-01.cleanprint.net
35
- clients.l.google.com
36
- clients1.google.com
37
- cms.myspacecdn.com
38
- configuration.apple.com
39
- d.yimg.com
40
- d1.openx.org
41
- data.coremetrics.com
42
- developer.apple.com
43
- devimages.apple.com
44
- dg.specificclick.net
45
- digg.analytics.live.com
46
- digg.com
47
- e.vistaprint.com
48
- englishrussia.com
49
- feeds.digg.com
50
- feeds.dzone.com
51
- feeds.feedburner.com
52
- feeds2.feedburner.com
53
- filetransfer.msg.yahoo.com
54
- filterforge.com
55
- financier.oriontransfer.co.nz
56
- gems.oriontransfer.org
57
- ghs.l.google.com
58
- googleads.g.doubleclick.net
59
- googlemail-pop.l.google.com
60
- groups.google.com
61
- hat.bmanpn.com
62
- hogbaysoftware.appspot.com
63
- i.creativecommons.org
64
- id.google.com
65
- images.apple.com
66
- images.macrumors.com
67
- images.trademe.co.nz
68
- img.slate.com
69
- js.adsonar.com
70
- js.revsci.net
71
- kotaku.com
72
- l.sharethis.com
73
- l.yimg.com
74
- lambda-the-ultimate.org
75
- login.facebook.com
76
- login.live.com
77
- login.messaging.aol.com
78
- login.oscar.aol.com
79
- login.yahoo.com
80
- lus.sharethis.com.akadns.net
81
- m1.2mdn.net
82
- mac.com
83
- mail.google.com
84
- mail.mac.com
85
- mail.me.com
86
- managingosx.wordpress.com
87
- maps.google.com
88
- marketing.vistaprint.com
89
- media.digg.com
90
- media.washingtonpost.com
91
- messenger.hotmail.com
92
- metrics.washingtonpost.com
93
- metro-amz-lb1-1649407802.us-east-1.elb.amazonaws.com
94
- mm.chitika.net
95
- news.ycombinator.com
96
- o.aolcdn.com
97
- o.sa.aol.com
98
- ocsp.verisign.net
99
- odb.outbrain.com
100
- omega.contacts.msn.com
101
- omega.contacts.msn.com.nsatc.net
102
- pagead2.googlesyndication.com
103
- partner.googleadservices.com
104
- partnerad.l.google.com
105
- pixel.quantserve.com
106
- pop.googlemail.com
107
- ps.friendconnect.gmodules.com
108
- publish.iwork.com
109
- r1rk9np7bpcsfoeekl0khkd2juj27q3o.friendconnect.gmodules.com
110
- rad.msn.com
111
- regretfulmorning.com
112
- resources.infolinks.com
113
- rss.lists.apple.com
114
- rss.slashdot.org
115
- s24.sitemeter.com
116
- s26.sitemeter.com
117
- s7.addthis.com
118
- safebrowsing-cache.google.com
119
- safebrowsing.clients.google.com
120
- scripts.chitika.net
121
- scsa.msg.yahoo.com
122
- seal.verisign.com
123
- sec.westpac.co.nz
124
- secure-nz.imrworldwide.com
125
- shared-hosted-1561031087.us-east-1.elb.amazonaws.com
126
- slashdot.org
127
- slate.cleanprint.net
128
- spacemusic.libsyn.com
129
- ssl-google-analytics.l.google.com
130
- ssl-hints.netflame.cc
131
- ssl.google-analytics.com
132
- static.ak.connect.facebook.com
133
- static.ak.facebook.com
134
- static.getclicky.com
135
- stats.wordpress.com
136
- syndication.thedailywtf.com
137
- tags.expo9.exponential.com
138
- talk.google.com
139
- time.asia.apple.com
140
- tools.google.com
141
- votes.buzz.yahoo.com
142
- widgets.outbrain.com
143
- wiki.oriontransfer.org
144
- www-google-analytics.l.google.com
145
- www.acquire.co.nz
146
- www.apple.com
147
- www.apple.com.akadns.net
148
- www.applejoe.com
149
- www.apples.com
150
- www.ascent.co.nz
151
- www.bing.com
152
- www.blogcdn.com
153
- www.blogger.com
154
- www.blogsmithmedia.com
155
- www.co2stats.com
156
- www.demonoid.com
157
- www.digg.com
158
- www.drobostore.com
159
- www.dzone.com
160
- www.em6live.co.nz
161
- www.engadget.com
162
- www.facebook.com
163
- www.filterforge.com
164
- www.friendconnect.gmodules.com
165
- www.geekologie.com
166
- www.google-analytics.com
167
- www.google.com
168
- www.idevgames.com
169
- www.iwatchstuff.com
170
- www.l.google.com
171
- www.linuxquestions.org
172
- www.lucidsystems.org
173
- www.macrumors.com
174
- www.michael.net.nz
175
- www.potionfactory.com
176
- www.recipepuppy.com
177
- www.slashdot.org
178
- www.slate.com
179
- www.sqlite.org
180
- www.trademe.co.nz
181
- www.vistaprint.com
182
- www.washingtonpost.com
183
- www.westpac.co.nz
184
- www4.l.google.com
185
- z.digg.com