rubydns 0.8.1 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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