whois 0.5.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/CHANGELOG.rdoc +55 -0
  2. data/Manifest +43 -8
  3. data/README.rdoc +53 -20
  4. data/lib/whois.rb +69 -1
  5. data/lib/whois/answer.rb +126 -0
  6. data/lib/whois/answer/contact.rb +55 -0
  7. data/lib/whois/answer/parser.rb +110 -0
  8. data/lib/whois/answer/parser/README.rdoc +21 -0
  9. data/lib/whois/answer/parser/base.rb +144 -0
  10. data/lib/whois/answer/parser/blank.rb +45 -0
  11. data/lib/whois/answer/parser/whois.crsnic.net.rb +209 -0
  12. data/lib/whois/answer/parser/whois.denic.de.rb +202 -0
  13. data/lib/whois/answer/parser/whois.nic.it.rb +330 -0
  14. data/lib/whois/answer/parser/whois.publicinterestregistry.net.rb +232 -0
  15. data/lib/whois/answer/part.rb +35 -0
  16. data/lib/whois/answer/registrar.rb +42 -0
  17. data/lib/whois/answer/super_struct.rb +57 -0
  18. data/lib/whois/client.rb +6 -0
  19. data/lib/whois/definitions/tlds.rb +2 -2
  20. data/lib/whois/errors.rb +25 -8
  21. data/lib/whois/server.rb +0 -1
  22. data/lib/whois/server/adapters/afilias.rb +5 -5
  23. data/lib/whois/server/adapters/base.rb +31 -4
  24. data/lib/whois/server/adapters/formatted.rb +3 -1
  25. data/lib/whois/server/adapters/none.rb +20 -1
  26. data/lib/whois/server/adapters/pir.rb +5 -5
  27. data/lib/whois/server/adapters/standard.rb +13 -2
  28. data/lib/whois/server/adapters/verisign.rb +5 -5
  29. data/lib/whois/server/adapters/web.rb +15 -0
  30. data/lib/whois/version.rb +2 -2
  31. data/lib/whois/whois.rb +2 -2
  32. data/test/answer/parser/base_test.rb +27 -0
  33. data/test/answer/parser/blank_test.rb +19 -0
  34. data/test/answer/parser/whois_crsnic_net_test.rb +175 -0
  35. data/test/answer/parser/whois_denic_de_test.rb +209 -0
  36. data/test/answer/parser/whois_nic_it_test.rb +255 -0
  37. data/test/answer/parser/whois_publicinterestregistry_net_test.rb +210 -0
  38. data/test/answer/parser_test.rb +77 -0
  39. data/test/answer_test.rb +99 -0
  40. data/test/client_test.rb +3 -3
  41. data/test/integration_test.rb +31 -0
  42. data/test/{adapters → server/adapters}/afilias_test.rb +10 -5
  43. data/test/server/adapters/base_test.rb +15 -0
  44. data/test/server/adapters/formatted_test.rb +26 -0
  45. data/test/{adapters → server/adapters}/none_test.rb +0 -0
  46. data/test/{adapters → server/adapters}/not_implemented_test.rb +0 -0
  47. data/test/{adapters → server/adapters}/pir_test.rb +10 -5
  48. data/test/server/adapters/standard_test.rb +29 -0
  49. data/test/{adapters → server/adapters}/verisign_test.rb +10 -5
  50. data/test/{adapters → server/adapters}/web_test.rb +0 -0
  51. data/test/server_test.rb +5 -1
  52. data/test/testcases/responses/super_struct_test.rb +25 -0
  53. data/test/testcases/responses/whois.crsnic.net/available.txt +43 -0
  54. data/test/testcases/responses/whois.crsnic.net/registered.txt +57 -0
  55. data/test/testcases/responses/whois.denic.de/available.txt +30 -0
  56. data/test/testcases/responses/whois.denic.de/registered.txt +77 -0
  57. data/test/testcases/responses/whois.nic.it/available.txt +2 -0
  58. data/test/testcases/responses/{it.txt → whois.nic.it/registered.txt} +1 -0
  59. data/test/testcases/responses/whois.nic.it/status_active.txt +53 -0
  60. data/test/testcases/responses/whois.nic.it/status_available.txt +2 -0
  61. data/test/testcases/responses/whois.publicinterestregistry.net/available.txt +1 -0
  62. data/test/testcases/responses/whois.publicinterestregistry.net/registered.txt +85 -0
  63. data/test/whois_test.rb +23 -1
  64. data/utils/bm_delegation_vs_inheritance.rb +150 -0
  65. data/whois.gemspec +6 -6
  66. metadata +78 -18
  67. data/test/adapters/standard_test.rb +0 -23
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class ServerAdaptersBaseTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @definition = [:tld, ".foo", "whois.foo", {}]
7
+ @klass = Whois::Server::Adapters::Base
8
+ @server = @klass.new(*@definition)
9
+ end
10
+
11
+ def test_query_should_raise
12
+ assert_raise(NotImplementedError) { @server.query("example.com") }
13
+ end
14
+
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class ServerAdaptersFormattedTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @definition = [:tld, ".de", "whois.denic.de", {:format => "-T dn,ace -C US-ASCII %s"}]
7
+ @klass = Whois::Server::Adapters::Formatted
8
+ @server = @klass.new(*@definition)
9
+ end
10
+
11
+ def test_query
12
+ @server.expects(:ask_the_socket).with("-T dn,ace -C US-ASCII domain.foo", "whois.denic.de", 43).returns("Whois Response")
13
+ response = @server.query("domain.foo")
14
+ assert_equal "Whois Response",
15
+ response.to_s
16
+ assert_equal [Whois::Answer::Part.new(response, "whois.denic.de")],
17
+ @server.buffer
18
+ end
19
+
20
+ def test_query_should_raise_without_option_format
21
+ @server = @klass.new(*[:tld, ".de", "whois.denic.de", {}])
22
+ @server.expects(:ask_the_socket).never
23
+ assert_raise(Whois::ServerError) { @server.query("domain.foo") }
24
+ end
25
+
26
+ end
@@ -1,11 +1,10 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ServerAdaptersPirTest < Test::Unit::TestCase
4
- include Whois
5
4
 
6
5
  def setup
7
6
  @definition = [:tld, ".foo", "whois.foo", {}]
8
- @klass = Server::Adapters::Pir
7
+ @klass = Whois::Server::Adapters::Pir
9
8
  @server = @klass.new(*@definition)
10
9
  end
11
10
 
@@ -13,16 +12,22 @@ class ServerAdaptersPirTest < Test::Unit::TestCase
13
12
  response = "No match for DOMAIN.FOO."
14
13
  expected = response
15
14
  @server.expects(:ask_the_socket).with("FULL domain.foo", "whois.publicinterestregistry.net", 43).returns(response)
16
- assert_equal expected, @server.query("domain.foo")
15
+ assert_equal expected,
16
+ @server.query("domain.foo").to_s
17
+ assert_equal [Whois::Answer::Part.new(response, "whois.publicinterestregistry.net")],
18
+ @server.buffer
17
19
  end
18
20
 
19
21
  def test_query_with_referral
20
- referral = File.read(File.dirname(__FILE__) + "/../testcases/referrals/pir.org.txt")
22
+ referral = File.read(File.dirname(__FILE__) + "/../../testcases/referrals/pir.org.txt")
21
23
  response = "Match for DOMAIN.FOO."
22
24
  expected = referral + "\n" + response
23
25
  @server.expects(:ask_the_socket).with("FULL domain.foo", "whois.publicinterestregistry.net", 43).returns(referral)
24
26
  @server.expects(:ask_the_socket).with("domain.foo", "whois.iana.org", 43).returns(response)
25
- assert_equal expected, @server.query("domain.foo")
27
+ assert_equal expected,
28
+ @server.query("domain.foo").to_s
29
+ assert_equal [Whois::Answer::Part.new(referral, "whois.publicinterestregistry.net"), Whois::Answer::Part.new(response, "whois.iana.org")],
30
+ @server.buffer
26
31
  end
27
32
 
28
33
  end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class ServerAdaptersStandardTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @definition = [:tld, ".foo", "whois.foo", {}]
7
+ @klass = Whois::Server::Adapters::Standard
8
+ @server = @klass.new(*@definition)
9
+ end
10
+
11
+ def test_query
12
+ @server.expects(:ask_the_socket).with("domain.foo", "whois.foo", 43).returns("Whois Response")
13
+ response = @server.query("domain.foo")
14
+ assert_equal "Whois Response", response.to_s
15
+ assert_equal [Whois::Answer::Part.new(response, "whois.foo")],
16
+ @server.buffer
17
+ end
18
+
19
+ def test_query_with_port
20
+ @server = @klass.new(:tld, ".foo", "whois.foo", { :port => 20 })
21
+ @server.expects(:ask_the_socket).with("domain.foo", "whois.foo", 20).returns("Whois Response")
22
+ response = @server.query("domain.foo")
23
+ assert_equal "Whois Response",
24
+ response.to_s
25
+ assert_equal [Whois::Answer::Part.new(response, "whois.foo")],
26
+ @server.buffer
27
+ end
28
+
29
+ end
@@ -1,11 +1,10 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ServerAdaptersVerisignTest < Test::Unit::TestCase
4
- include Whois
5
4
 
6
5
  def setup
7
6
  @definition = [:tld, ".foo", "whois.foo", {}]
8
- @klass = Server::Adapters::Verisign
7
+ @klass = Whois::Server::Adapters::Verisign
9
8
  @server = @klass.new(*@definition)
10
9
  end
11
10
 
@@ -13,16 +12,22 @@ class ServerAdaptersVerisignTest < Test::Unit::TestCase
13
12
  response = "No match for DOMAIN.FOO."
14
13
  expected = response
15
14
  @server.expects(:ask_the_socket).with("=domain.foo", "whois.foo", 43).returns(response)
16
- assert_equal expected, @server.query("domain.foo")
15
+ assert_equal expected,
16
+ @server.query("domain.foo").to_s
17
+ assert_equal [Whois::Answer::Part.new(response, "whois.foo")],
18
+ @server.buffer
17
19
  end
18
20
 
19
21
  def test_query_with_referral
20
- referral = File.read(File.dirname(__FILE__) + "/../testcases/referrals/crsnic.com.txt")
22
+ referral = File.read(File.dirname(__FILE__) + "/../../testcases/referrals/crsnic.com.txt")
21
23
  response = "Match for DOMAIN.FOO."
22
24
  expected = referral + "\n" + response
23
25
  @server.expects(:ask_the_socket).with("=domain.foo", "whois.foo", 43).returns(referral)
24
26
  @server.expects(:ask_the_socket).with("domain.foo", "whois.tucows.com", 43).returns(response)
25
- assert_equal expected, @server.query("domain.foo")
27
+ assert_equal expected,
28
+ @server.query("domain.foo").to_s
29
+ assert_equal [Whois::Answer::Part.new(referral, "whois.foo"), Whois::Answer::Part.new(response, "whois.tucows.com")],
30
+ @server.buffer
26
31
  end
27
32
 
28
33
  end
@@ -6,7 +6,7 @@ class ServerTest < Test::Unit::TestCase
6
6
  Whois::Server.class_eval { class_variable_set("@@definitions", { :tld => [], :ipv4 =>[], :ipv6 => [] }) }
7
7
  end
8
8
 
9
-
9
+
10
10
  def test_guess_should_recognize_email
11
11
  Whois::Server.expects(:find_for_email).with("email@example.org").returns(true)
12
12
  assert Whois::Server.guess("email@example.org")
@@ -49,6 +49,10 @@ class ServerTest < Test::Unit::TestCase
49
49
  assert Whois::Server.guess("::192.168.1.1")
50
50
  end
51
51
 
52
+ def test_guess_should_raise_servernotfound_with_unrecognized_query
53
+ assert_raise(Whois::ServerNotFound) { Whois::Server.guess("xyz") }
54
+ end
55
+
52
56
 
53
57
  def test_definitions
54
58
  assert_instance_of Hash, Whois::Server.definitions
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class SuperStructTest < Test::Unit::TestCase
4
+
5
+ Supereroe = Class.new(SuperStruct.new(:name, :supername))
6
+
7
+
8
+ def setup
9
+ @klass = Supereroe
10
+ end
11
+
12
+ def test_initialize_with_block
13
+ @klass.new do |instance|
14
+ assert_instance_of Supereroe, instance
15
+ assert_kind_of SuperStruct, instance
16
+ end
17
+ end
18
+
19
+ def test_initialize_with_hash
20
+ instance = @klass.new(:name => "Pippo", :supername => "SuperPippo")
21
+ assert_equal "Pippo", instance.name
22
+ assert_equal "SuperPippo", instance.supername
23
+ end
24
+
25
+ end
@@ -0,0 +1,43 @@
1
+
2
+ Whois Server Version 2.0
3
+
4
+ Domain names in the .com and .net domains can now be registered
5
+ with many different competing registrars. Go to http://www.internic.net
6
+ for detailed information.
7
+
8
+ No match for "GOOGLELKJHGFDFGHJKLKJHGF.NET".
9
+ >>> Last update of whois database: Sun, 20 Sep 2009 13:43:28 UTC <<<
10
+
11
+ NOTICE: The expiration date displayed in this record is the date the
12
+ registrar's sponsorship of the domain name registration in the registry is
13
+ currently set to expire. This date does not necessarily reflect the expiration
14
+ date of the domain name registrant's agreement with the sponsoring
15
+ registrar. Users may consult the sponsoring registrar's Whois database to
16
+ view the registrar's reported date of expiration for this registration.
17
+
18
+ TERMS OF USE: You are not authorized to access or query our Whois
19
+ database through the use of electronic processes that are high-volume and
20
+ automated except as reasonably necessary to register domain names or
21
+ modify existing registrations; the Data in VeriSign Global Registry
22
+ Services' ("VeriSign") Whois database is provided by VeriSign for
23
+ information purposes only, and to assist persons in obtaining information
24
+ about or related to a domain name registration record. VeriSign does not
25
+ guarantee its accuracy. By submitting a Whois query, you agree to abide
26
+ by the following terms of use: You agree that you may use this Data only
27
+ for lawful purposes and that under no circumstances will you use this Data
28
+ to: (1) allow, enable, or otherwise support the transmission of mass
29
+ unsolicited, commercial advertising or solicitations via e-mail, telephone,
30
+ or facsimile; or (2) enable high volume, automated, electronic processes
31
+ that apply to VeriSign (or its computer systems). The compilation,
32
+ repackaging, dissemination or other use of this Data is expressly
33
+ prohibited without the prior written consent of VeriSign. You agree not to
34
+ use electronic processes that are automated and high-volume to access or
35
+ query the Whois database except as reasonably necessary to register
36
+ domain names or modify existing registrations. VeriSign reserves the right
37
+ to restrict your access to the Whois database in its sole discretion to ensure
38
+ operational stability. VeriSign may restrict or terminate your access to the
39
+ Whois database for failure to abide by these terms of use. VeriSign
40
+ reserves the right to modify these terms at any time.
41
+
42
+ The Registry database contains ONLY .COM, .NET, .EDU domains and
43
+ Registrars.
@@ -0,0 +1,57 @@
1
+
2
+ Whois Server Version 2.0
3
+
4
+ Domain names in the .com and .net domains can now be registered
5
+ with many different competing registrars. Go to http://www.internic.net
6
+ for detailed information.
7
+
8
+ Domain Name: GOOGLE.NET
9
+ Registrar: MARKMONITOR INC.
10
+ Whois Server: whois.markmonitor.com
11
+ Referral URL: http://www.markmonitor.com
12
+ Name Server: NS1.GOOGLE.COM
13
+ Name Server: NS2.GOOGLE.COM
14
+ Name Server: NS3.GOOGLE.COM
15
+ Name Server: NS4.GOOGLE.COM
16
+ Status: clientDeleteProhibited
17
+ Status: clientTransferProhibited
18
+ Status: clientUpdateProhibited
19
+ Updated Date: 10-feb-2009
20
+ Creation Date: 15-mar-1999
21
+ Expiration Date: 15-mar-2010
22
+
23
+ >>> Last update of whois database: Sun, 20 Sep 2009 12:42:50 UTC <<<
24
+
25
+ NOTICE: The expiration date displayed in this record is the date the
26
+ registrar's sponsorship of the domain name registration in the registry is
27
+ currently set to expire. This date does not necessarily reflect the expiration
28
+ date of the domain name registrant's agreement with the sponsoring
29
+ registrar. Users may consult the sponsoring registrar's Whois database to
30
+ view the registrar's reported date of expiration for this registration.
31
+
32
+ TERMS OF USE: You are not authorized to access or query our Whois
33
+ database through the use of electronic processes that are high-volume and
34
+ automated except as reasonably necessary to register domain names or
35
+ modify existing registrations; the Data in VeriSign Global Registry
36
+ Services' ("VeriSign") Whois database is provided by VeriSign for
37
+ information purposes only, and to assist persons in obtaining information
38
+ about or related to a domain name registration record. VeriSign does not
39
+ guarantee its accuracy. By submitting a Whois query, you agree to abide
40
+ by the following terms of use: You agree that you may use this Data only
41
+ for lawful purposes and that under no circumstances will you use this Data
42
+ to: (1) allow, enable, or otherwise support the transmission of mass
43
+ unsolicited, commercial advertising or solicitations via e-mail, telephone,
44
+ or facsimile; or (2) enable high volume, automated, electronic processes
45
+ that apply to VeriSign (or its computer systems). The compilation,
46
+ repackaging, dissemination or other use of this Data is expressly
47
+ prohibited without the prior written consent of VeriSign. You agree not to
48
+ use electronic processes that are automated and high-volume to access or
49
+ query the Whois database except as reasonably necessary to register
50
+ domain names or modify existing registrations. VeriSign reserves the right
51
+ to restrict your access to the Whois database in its sole discretion to ensure
52
+ operational stability. VeriSign may restrict or terminate your access to the
53
+ Whois database for failure to abide by these terms of use. VeriSign
54
+ reserves the right to modify these terms at any time.
55
+
56
+ The Registry database contains ONLY .COM, .NET, .EDU domains and
57
+ Registrars.
@@ -0,0 +1,30 @@
1
+ % Copyright (c)2008 by DENIC
2
+ % Version: 1.10.0
3
+ %
4
+ % Restricted rights.
5
+ %
6
+ %
7
+ % Terms and Conditions of Use
8
+ %
9
+ % All the domain data that is visible in the whois search is protected
10
+ % by law. It is not permitted to use it for any purpose other than
11
+ % technical or administrative requirements associated with the
12
+ % operation of the Internet or in order to contact the domain holder
13
+ % over legal problems. You are not permitted to save it electronically
14
+ % or in any other way without DENIC's express written permission. It
15
+ % is prohibited, in particular, to use it for advertising or any similar
16
+ % purpose.
17
+ %
18
+ % By maintaining the connection you assure that you have a legitimate
19
+ % interest in the data and that you will only use it for the stated
20
+ % purposes. You are aware that DENIC maintains the right to initiate
21
+ % legal proceedings against you in the event of any breach of this
22
+ % assurance and to bar you from using its whois query.
23
+
24
+ % Object "this-domain-is-not-registered.de" not found in database
25
+ %
26
+ % If you would like to search on arbitrary strings,
27
+ % please see the Database page on the RIPE NCC
28
+ % web-site at http://www.ripe.net/db/
29
+ % This will only work for RIPE data.
30
+
@@ -0,0 +1,77 @@
1
+ % Copyright (c)2008 by DENIC
2
+ % Version: 1.10.0
3
+ %
4
+ % Restricted rights.
5
+ %
6
+ %
7
+ % Terms and Conditions of Use
8
+ %
9
+ % All the domain data that is visible in the whois search is protected
10
+ % by law. It is not permitted to use it for any purpose other than
11
+ % technical or administrative requirements associated with the
12
+ % operation of the Internet or in order to contact the domain holder
13
+ % over legal problems. You are not permitted to save it electronically
14
+ % or in any other way without DENIC's express written permission. It
15
+ % is prohibited, in particular, to use it for advertising or any similar
16
+ % purpose.
17
+ %
18
+ % By maintaining the connection you assure that you have a legitimate
19
+ % interest in the data and that you will only use it for the stated
20
+ % purposes. You are aware that DENIC maintains the right to initiate
21
+ % legal proceedings against you in the event of any breach of this
22
+ % assurance and to bar you from using its whois query.
23
+
24
+ Domain: google.de
25
+ Domain-Ace: google.de
26
+ Nserver: ns1.google.com
27
+ Nserver: ns4.google.com
28
+ Nserver: ns3.google.com
29
+ Nserver: ns2.google.com
30
+ Status: connect
31
+ Changed: 2009-02-28T12:03:09+01:00
32
+
33
+ [Holder]
34
+ Type: ORG
35
+ Name: Google Inc.
36
+ Address: 1600 Amphitheatre Parkway
37
+ Pcode: 94043
38
+ City: Mountain View
39
+ Country: US
40
+ Changed: 2006-09-05T17:05:45+02:00
41
+
42
+ [Admin-C]
43
+ Type: PERSON
44
+ Name: Lena Tangermann
45
+ Organisation: Google Germany GmbH
46
+ Address: ABC-Strasse 19
47
+ Pcode: 20354
48
+ City: Hamburg
49
+ Country: DE
50
+ Changed: 2006-09-05T17:05:46+02:00
51
+
52
+ [Tech-C]
53
+ Type: PERSON
54
+ Name: Google Inc.
55
+ Address: Google Inc.
56
+ Address: 1600 Amphitheatre Parkway
57
+ Pcode: 94043
58
+ City: Mountain View
59
+ Country: US
60
+ Phone: +1-6503300100
61
+ Fax: +1-6506188571
62
+ Email: dns-admin@google.com
63
+ Changed: 2005-05-19T18:02:06+02:00
64
+
65
+ [Zone-C]
66
+ Type: PERSON
67
+ Name: Domain Billing
68
+ Organisation: MarkMonitor
69
+ Address: PO Box 155 10400 Overland Road
70
+ Pcode: 83709
71
+ City: Boise
72
+ Country: US
73
+ Phone: +1-2083895740
74
+ Fax: +1-2083895799
75
+ Email: ccops@markmonitor.com
76
+ Changed: 2008-09-24T08:40:07+02:00
77
+
@@ -0,0 +1,2 @@
1
+ Domain: google.it
2
+ Status: AVAILABLE
@@ -50,3 +50,4 @@ Nameservers
50
50
  ns4.google.com
51
51
  ns2.google.com
52
52
  ns3.google.com
53
+
@@ -0,0 +1,53 @@
1
+
2
+
3
+ *********************************************************************
4
+ * Please note that the following result could be a subgroup of *
5
+ * the data contained in the database. *
6
+ * *
7
+ * Additional information can be visualized at: *
8
+ * http://www.nic.it/cgi-bin/Whois/whois.cgi *
9
+ *********************************************************************
10
+
11
+ Domain: google.it
12
+ Status: ACTIVE
13
+ Created: 1999-12-10 00:00:00
14
+ Last Update: 2008-11-27 16:47:22
15
+ Expire Date: 2009-11-27
16
+
17
+ Registrant
18
+ Name: Google Ireland Holdings
19
+ ContactID: GOOG175-ITNIC
20
+ Address: 30 Herbert Street
21
+ Dublin
22
+ 2
23
+ IE
24
+ IE
25
+ Created: 2008-11-27 16:47:22
26
+ Last Update: 2008-11-27 16:47:22
27
+
28
+ Admin Contact
29
+ Name: Tsao Tu
30
+ ContactID: TT4277-ITNIC
31
+ Organization: Tu Tsao
32
+ Address: 30 Herbert Street
33
+ Dublin
34
+ 2
35
+ IE
36
+ IE
37
+ Created: 2008-11-27 16:47:22
38
+ Last Update: 2008-11-27 16:47:22
39
+
40
+ Technical Contacts
41
+ Name: Technical Services
42
+ ContactID: TS7016-ITNIC
43
+
44
+ Registrar
45
+ Organization: Register.it s.p.a.
46
+ Name: REGISTER-MNT
47
+
48
+ Nameservers
49
+ ns1.google.com
50
+ ns4.google.com
51
+ ns2.google.com
52
+ ns3.google.com
53
+