whois-parser 0.0.1 → 1.0.0.pre.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +2 -0
- data/CHANGELOG.md +20 -0
- data/CONTRIBUTING.md +40 -0
- data/LICENSE.txt +17 -18
- data/README.md +6 -24
- data/lib/whois/parser/contact.rb +56 -0
- data/lib/whois/parser/errors.rb +46 -0
- data/lib/whois/parser/nameserver.rb +39 -0
- data/lib/whois/parser/registrar.rb +25 -0
- data/lib/whois/parser/super_struct.rb +53 -0
- data/lib/whois/parser/version.rb +3 -2
- data/lib/whois/parser.rb +407 -3
- data/lib/whois/parser_extensions/whois.rb +78 -0
- data/lib/whois/parser_extensions/whois_record.rb +222 -0
- data/lib/whois/parser_extensions.rb +9 -0
- data/lib/whois/parsers/base.rb +412 -0
- data/lib/whois/parsers/base_afilias.rb +139 -0
- data/lib/whois/parsers/base_afilias2.rb +140 -0
- data/lib/whois/parsers/base_cocca.rb +97 -0
- data/lib/whois/parsers/base_cocca2.rb +91 -0
- data/lib/whois/parsers/base_icann_compliant.rb +150 -0
- data/lib/whois/parsers/base_icb.rb +92 -0
- data/lib/whois/parsers/base_iisse.rb +113 -0
- data/lib/whois/parsers/base_nic_fr.rb +169 -0
- data/lib/whois/parsers/base_shared1.rb +108 -0
- data/lib/whois/parsers/base_shared2.rb +127 -0
- data/lib/whois/parsers/base_shared3.rb +127 -0
- data/lib/whois/parsers/base_verisign.rb +106 -0
- data/lib/whois/parsers/base_whoisd.rb +145 -0
- data/lib/whois/parsers/blank.rb +35 -0
- data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
- data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
- data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/example.rb +163 -0
- data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/kero.yachay.pe.rb +86 -0
- data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
- data/lib/whois/parsers/whois.1und1.info.rb +28 -0
- data/lib/whois/parsers/whois.35.com.rb +23 -0
- data/lib/whois/parsers/whois.aeda.net.ae.rb +64 -0
- data/lib/whois/parsers/whois.aero.rb +58 -0
- data/lib/whois/parsers/whois.afilias-grs.info.rb +21 -0
- data/lib/whois/parsers/whois.afilias.net.rb +41 -0
- data/lib/whois/parsers/whois.ai.rb +62 -0
- data/lib/whois/parsers/whois.amnic.net.rb +79 -0
- data/lib/whois/parsers/whois.ascio.com.rb +29 -0
- data/lib/whois/parsers/whois.ati.tn.rb +116 -0
- data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
- data/lib/whois/parsers/whois.ax.rb +64 -0
- data/lib/whois/parsers/whois.biz.rb +25 -0
- data/lib/whois/parsers/whois.bnnic.bn.rb +75 -0
- data/lib/whois/parsers/whois.cat.rb +75 -0
- data/lib/whois/parsers/whois.cctld.by.rb +94 -0
- data/lib/whois/parsers/whois.cctld.uz.rb +79 -0
- data/lib/whois/parsers/whois.centralnic.com.rb +140 -0
- data/lib/whois/parsers/whois.cira.ca.rb +192 -0
- data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
- data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
- data/lib/whois/parsers/whois.co.ca.rb +74 -0
- data/lib/whois/parsers/whois.co.pl.rb +82 -0
- data/lib/whois/parsers/whois.co.ug.rb +82 -0
- data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
- data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
- data/lib/whois/parsers/whois.denic.de.rb +164 -0
- data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
- data/lib/whois/parsers/whois.dns.be.rb +120 -0
- data/lib/whois/parsers/whois.dns.hr.rb +97 -0
- data/lib/whois/parsers/whois.dns.lu.rb +126 -0
- data/lib/whois/parsers/whois.dns.pl.rb +151 -0
- data/lib/whois/parsers/whois.dns.pt.rb +77 -0
- data/lib/whois/parsers/whois.domain-registry.nl.rb +123 -0
- data/lib/whois/parsers/whois.domain.kg.rb +76 -0
- data/lib/whois/parsers/whois.domainregistry.ie.rb +121 -0
- data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
- data/lib/whois/parsers/whois.donuts.co.rb +61 -0
- data/lib/whois/parsers/whois.dot.cf.rb +71 -0
- data/lib/whois/parsers/whois.dot.tk.rb +70 -0
- data/lib/whois/parsers/whois.dotgov.gov.rb +61 -0
- data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
- data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
- data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
- data/lib/whois/parsers/whois.educause.edu.rb +200 -0
- data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
- data/lib/whois/parsers/whois.enom.com.rb +34 -0
- data/lib/whois/parsers/whois.eu.org.rb +58 -0
- data/lib/whois/parsers/whois.eu.rb +130 -0
- data/lib/whois/parsers/whois.fi.rb +117 -0
- data/lib/whois/parsers/whois.gandi.net.rb +30 -0
- data/lib/whois/parsers/whois.gg.rb +31 -0
- data/lib/whois/parsers/whois.godaddy.com.rb +112 -0
- data/lib/whois/parsers/whois.gov.za.rb +60 -0
- data/lib/whois/parsers/whois.hkirc.hk.rb +70 -0
- data/lib/whois/parsers/whois.iana.org.rb +102 -0
- data/lib/whois/parsers/whois.iis.nu.rb +26 -0
- data/lib/whois/parsers/whois.iis.se.rb +26 -0
- data/lib/whois/parsers/whois.in.ua.rb +75 -0
- data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
- data/lib/whois/parsers/whois.isnic.is.rb +70 -0
- data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
- data/lib/whois/parsers/whois.ja.net.rb +75 -0
- data/lib/whois/parsers/whois.je.rb +25 -0
- data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
- data/lib/whois/parsers/whois.kenic.or.ke.rb +91 -0
- data/lib/whois/parsers/whois.kr.rb +79 -0
- data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
- data/lib/whois/parsers/whois.monic.mo.rb +83 -0
- data/lib/whois/parsers/whois.museum.rb +79 -0
- data/lib/whois/parsers/whois.mynic.my.rb +72 -0
- data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
- data/lib/whois/parsers/whois.nc.rb +122 -0
- data/lib/whois/parsers/whois.netcom.cm.rb +26 -0
- data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
- data/lib/whois/parsers/whois.nic.ac.rb +25 -0
- data/lib/whois/parsers/whois.nic.af.rb +25 -0
- data/lib/whois/parsers/whois.nic.ag.rb +21 -0
- data/lib/whois/parsers/whois.nic.as.rb +63 -0
- data/lib/whois/parsers/whois.nic.asia.rb +107 -0
- data/lib/whois/parsers/whois.nic.at.rb +64 -0
- data/lib/whois/parsers/whois.nic.bj.rb +126 -0
- data/lib/whois/parsers/whois.nic.bo.rb +73 -0
- data/lib/whois/parsers/whois.nic.cd.rb +34 -0
- data/lib/whois/parsers/whois.nic.ch.rb +109 -0
- data/lib/whois/parsers/whois.nic.ci.rb +70 -0
- data/lib/whois/parsers/whois.nic.cl.rb +71 -0
- data/lib/whois/parsers/whois.nic.co.rb +25 -0
- data/lib/whois/parsers/whois.nic.college.rb +25 -0
- data/lib/whois/parsers/whois.nic.coop.rb +70 -0
- data/lib/whois/parsers/whois.nic.cx.rb +25 -0
- data/lib/whois/parsers/whois.nic.cz.rb +42 -0
- data/lib/whois/parsers/whois.nic.design.rb +25 -0
- data/lib/whois/parsers/whois.nic.dm.rb +25 -0
- data/lib/whois/parsers/whois.nic.dz.rb +58 -0
- data/lib/whois/parsers/whois.nic.ec.rb +34 -0
- data/lib/whois/parsers/whois.nic.es.rb +105 -0
- data/lib/whois/parsers/whois.nic.fo.rb +43 -0
- data/lib/whois/parsers/whois.nic.fr.rb +25 -0
- data/lib/whois/parsers/whois.nic.gd.rb +31 -0
- data/lib/whois/parsers/whois.nic.gl.rb +25 -0
- data/lib/whois/parsers/whois.nic.gs.rb +31 -0
- data/lib/whois/parsers/whois.nic.hn.rb +25 -0
- data/lib/whois/parsers/whois.nic.ht.rb +25 -0
- data/lib/whois/parsers/whois.nic.hu.rb +78 -0
- data/lib/whois/parsers/whois.nic.im.rb +66 -0
- data/lib/whois/parsers/whois.nic.io.rb +48 -0
- data/lib/whois/parsers/whois.nic.ir.rb +66 -0
- data/lib/whois/parsers/whois.nic.it.rb +159 -0
- data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
- data/lib/whois/parsers/whois.nic.ki.rb +25 -0
- data/lib/whois/parsers/whois.nic.kz.rb +67 -0
- data/lib/whois/parsers/whois.nic.la.rb +25 -0
- data/lib/whois/parsers/whois.nic.li.rb +64 -0
- data/lib/whois/parsers/whois.nic.lk.rb +109 -0
- data/lib/whois/parsers/whois.nic.lv.rb +65 -0
- data/lib/whois/parsers/whois.nic.ly.rb +76 -0
- data/lib/whois/parsers/whois.nic.md.rb +94 -0
- data/lib/whois/parsers/whois.nic.me.rb +85 -0
- data/lib/whois/parsers/whois.nic.mg.rb +31 -0
- data/lib/whois/parsers/whois.nic.ms.rb +25 -0
- data/lib/whois/parsers/whois.nic.mu.rb +25 -0
- data/lib/whois/parsers/whois.nic.mx.rb +79 -0
- data/lib/whois/parsers/whois.nic.name.rb +68 -0
- data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
- data/lib/whois/parsers/whois.nic.net.sa.rb +70 -0
- data/lib/whois/parsers/whois.nic.net.sb.rb +31 -0
- data/lib/whois/parsers/whois.nic.nf.rb +25 -0
- data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
- data/lib/whois/parsers/whois.nic.pm.rb +25 -0
- data/lib/whois/parsers/whois.nic.pr.rb +84 -0
- data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
- data/lib/whois/parsers/whois.nic.pw.rb +25 -0
- data/lib/whois/parsers/whois.nic.re.rb +25 -0
- data/lib/whois/parsers/whois.nic.sh.rb +25 -0
- data/lib/whois/parsers/whois.nic.sl.rb +76 -0
- data/lib/whois/parsers/whois.nic.sm.rb +76 -0
- data/lib/whois/parsers/whois.nic.sn.rb +113 -0
- data/lib/whois/parsers/whois.nic.so.rb +70 -0
- data/lib/whois/parsers/whois.nic.space.rb +25 -0
- data/lib/whois/parsers/whois.nic.st.rb +72 -0
- data/lib/whois/parsers/whois.nic.tc.rb +25 -0
- data/lib/whois/parsers/whois.nic.tech.rb +25 -0
- data/lib/whois/parsers/whois.nic.tel.rb +25 -0
- data/lib/whois/parsers/whois.nic.tl.rb +25 -0
- data/lib/whois/parsers/whois.nic.tm.rb +31 -0
- data/lib/whois/parsers/whois.nic.tr.rb +159 -0
- data/lib/whois/parsers/whois.nic.travel.rb +25 -0
- data/lib/whois/parsers/whois.nic.uk.rb +177 -0
- data/lib/whois/parsers/whois.nic.us.rb +25 -0
- data/lib/whois/parsers/whois.nic.ve.rb +87 -0
- data/lib/whois/parsers/whois.nic.wf.rb +25 -0
- data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
- data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
- data/lib/whois/parsers/whois.norid.no.rb +61 -0
- data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
- data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
- data/lib/whois/parsers/whois.pir.org.rb +90 -0
- data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
- data/lib/whois/parsers/whois.register.bg.rb +83 -0
- data/lib/whois/parsers/whois.register.com.rb +30 -0
- data/lib/whois/parsers/whois.register.si.rb +73 -0
- data/lib/whois/parsers/whois.registre.ma.rb +63 -0
- data/lib/whois/parsers/whois.registro.br.rb +73 -0
- data/lib/whois/parsers/whois.registry.gy.rb +25 -0
- data/lib/whois/parsers/whois.registry.hm.rb +72 -0
- data/lib/whois/parsers/whois.registry.net.za.rb +139 -0
- data/lib/whois/parsers/whois.registry.om.rb +40 -0
- data/lib/whois/parsers/whois.registry.qa.rb +25 -0
- data/lib/whois/parsers/whois.ripe.net.rb +68 -0
- data/lib/whois/parsers/whois.rnids.rs.rb +134 -0
- data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
- data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
- data/lib/whois/parsers/whois.safenames.net.rb +48 -0
- data/lib/whois/parsers/whois.schlund.info.rb +34 -0
- data/lib/whois/parsers/whois.sgnic.sg.rb +87 -0
- data/lib/whois/parsers/whois.sk-nic.sk.rb +101 -0
- data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
- data/lib/whois/parsers/whois.srs.net.nz.rb +159 -0
- data/lib/whois/parsers/whois.sx.rb +127 -0
- data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
- data/lib/whois/parsers/whois.thnic.co.th.rb +79 -0
- data/lib/whois/parsers/whois.tld.ee.rb +134 -0
- data/lib/whois/parsers/whois.tld.sy.rb +34 -0
- data/lib/whois/parsers/whois.tonic.to.rb +86 -0
- data/lib/whois/parsers/whois.tucows.com.rb +28 -0
- data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
- data/lib/whois/parsers/whois.tznic.or.tz.rb +25 -0
- data/lib/whois/parsers/whois.ua.rb +240 -0
- data/lib/whois/parsers/whois.udag.net.rb +28 -0
- data/lib/whois/parsers/whois.uniregistry.net.rb +61 -0
- data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
- data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
- data/lib/whois/parsers/whois.website.ws.rb +74 -0
- data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
- data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
- data/lib/whois/parsers/whois.za.net.rb +72 -0
- data/lib/whois/parsers/whois.za.org.rb +72 -0
- data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
- data/lib/whois/parsers/za_central_registry.rb +68 -0
- data/lib/whois/parsers.rb +4 -0
- data/lib/whois/safe_record.rb +169 -0
- data/lib/whois/scanners/base.rb +116 -0
- data/lib/whois/scanners/base_afilias.rb +51 -0
- data/lib/whois/scanners/base_cocca2.rb +43 -0
- data/lib/whois/scanners/base_icann_compliant.rb +45 -0
- data/lib/whois/scanners/base_iisse.rb +36 -0
- data/lib/whois/scanners/base_shared1.rb +31 -0
- data/lib/whois/scanners/base_shared2.rb +35 -0
- data/lib/whois/scanners/base_shared3.rb +37 -0
- data/lib/whois/scanners/base_whoisd.rb +44 -0
- data/lib/whois/scanners/iana.rb +89 -0
- data/lib/whois/scanners/scannable.rb +65 -0
- data/lib/whois/scanners/verisign.rb +100 -0
- data/lib/whois/scanners/whois.ati.tn.rb +32 -0
- data/lib/whois/scanners/whois.audns.net.au.rb +25 -0
- data/lib/whois/scanners/whois.cctld.by.rb +35 -0
- data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
- data/lib/whois/scanners/whois.cira.ca.rb +72 -0
- data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
- data/lib/whois/scanners/whois.denic.de.rb +96 -0
- data/lib/whois/scanners/whois.dns.hr.rb +25 -0
- data/lib/whois/scanners/whois.domainregistry.ie.rb +46 -0
- data/lib/whois/scanners/whois.fi.rb +39 -0
- data/lib/whois/scanners/whois.nc.rb +32 -0
- data/lib/whois/scanners/whois.nic.cz.rb +22 -0
- data/lib/whois/scanners/whois.nic.it.rb +92 -0
- data/lib/whois/scanners/whois.pir.org.rb +17 -0
- data/lib/whois/scanners/whois.registry.net.za.rb +92 -0
- data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
- data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
- data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
- data/lib/whois/scanners/whois.sx.rb +37 -0
- data/lib/whois/scanners/whois.tld.ee.rb +47 -0
- data/lib/whois/scanners/whois.tucows.com.rb +23 -0
- data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
- data/lib/whois-parser.rb +10 -0
- data/whois-parser.gemspec +37 -19
- metadata +318 -20
- data/.gitignore +0 -14
- data/Gemfile +0 -4
- data/Rakefile +0 -2
@@ -0,0 +1,126 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
|
12
|
+
|
13
|
+
module Whois
|
14
|
+
class Parsers
|
15
|
+
|
16
|
+
# Parser for the whois.dns.lu server.
|
17
|
+
#
|
18
|
+
# @note This parser is just a stub and provides only a few basic methods
|
19
|
+
# to check for domain availability and get domain status.
|
20
|
+
# Please consider to contribute implementing missing methods.
|
21
|
+
#
|
22
|
+
# @see Whois::Parsers::Example
|
23
|
+
# The Example parser for the list of all available methods.
|
24
|
+
#
|
25
|
+
class WhoisDnsLu < Base
|
26
|
+
|
27
|
+
property_supported :status do
|
28
|
+
if content_for_scanner =~ /domaintype:\s+(.+)\n/
|
29
|
+
case $1.downcase
|
30
|
+
when "active"
|
31
|
+
:registered
|
32
|
+
else
|
33
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
34
|
+
end
|
35
|
+
else
|
36
|
+
:available
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
property_supported :available? do
|
41
|
+
!!(content_for_scanner =~ /% No such domain/)
|
42
|
+
end
|
43
|
+
|
44
|
+
property_supported :registered? do
|
45
|
+
!available?
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
property_supported :created_on do
|
50
|
+
if content_for_scanner =~ /registered:\s+(.*)\n/
|
51
|
+
# Force the parser to use the dd/mm/yyyy format.
|
52
|
+
Time.utc(*$1.split("/").reverse)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
property_not_supported :updated_on
|
57
|
+
|
58
|
+
property_not_supported :expires_on
|
59
|
+
|
60
|
+
|
61
|
+
property_supported :registrar do
|
62
|
+
if name = value_for_key('registrar-name')
|
63
|
+
Parser::Registrar.new(
|
64
|
+
name: name,
|
65
|
+
url: value_for_key('registrar-url'),
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
property_supported :registrant_contacts do
|
71
|
+
build_contact('org', Parser::Contact::TYPE_REGISTRANT)
|
72
|
+
end
|
73
|
+
|
74
|
+
property_supported :admin_contacts do
|
75
|
+
build_contact('adm', Parser::Contact::TYPE_ADMINISTRATIVE)
|
76
|
+
end
|
77
|
+
|
78
|
+
property_supported :technical_contacts do
|
79
|
+
build_contact('tec', Parser::Contact::TYPE_TECHNICAL)
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
property_supported :nameservers do
|
84
|
+
values_for_key('nserver').map do |line|
|
85
|
+
if line =~ /(.+) \[(.+)\]/
|
86
|
+
Parser::Nameserver.new(name: $1, ipv4: $2)
|
87
|
+
else
|
88
|
+
Parser::Nameserver.new(name: line)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def build_contact(element, type)
|
97
|
+
if name = value_for_key('%s-name' % element)
|
98
|
+
Parser::Contact.new(
|
99
|
+
type: type,
|
100
|
+
id: nil,
|
101
|
+
name: name,
|
102
|
+
address: value_for_key('%s-address' % element),
|
103
|
+
city: value_for_key('%s-city' % element),
|
104
|
+
zip: value_for_key('%s-zipcode' % element),
|
105
|
+
country_code: value_for_key('%s-country' % element),
|
106
|
+
email: value_for_key('%s-email' % element)
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def value_for_key(key)
|
112
|
+
values = values_for_key(key)
|
113
|
+
if values.size > 1
|
114
|
+
values.join(', ')
|
115
|
+
else
|
116
|
+
values.first
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def values_for_key(key)
|
121
|
+
content_for_scanner.scan(/#{key}:\s+(.+)\n/).flatten
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
|
12
|
+
|
13
|
+
module Whois
|
14
|
+
class Parsers
|
15
|
+
|
16
|
+
# Parser for the whois.dns.pl server.
|
17
|
+
#
|
18
|
+
# @see Whois::Parsers::Example
|
19
|
+
# The Example parser for the list of all available methods.
|
20
|
+
#
|
21
|
+
class WhoisDnsPl < Base
|
22
|
+
|
23
|
+
property_supported :domain do
|
24
|
+
if content_for_scanner =~ /DOMAIN NAME:\s+(.+)\n/
|
25
|
+
$1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
property_not_supported :domain_id
|
30
|
+
|
31
|
+
|
32
|
+
property_supported :status do
|
33
|
+
if available?
|
34
|
+
:available
|
35
|
+
else
|
36
|
+
:registered
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
property_supported :available? do
|
41
|
+
!!(content_for_scanner =~ /^No information available about domain name/)
|
42
|
+
end
|
43
|
+
|
44
|
+
property_supported :registered? do
|
45
|
+
!available?
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
property_supported :created_on do
|
50
|
+
if content_for_scanner =~ /created:\s+(.+?)\n/
|
51
|
+
parse_time($1)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
property_supported :updated_on do
|
56
|
+
if content_for_scanner =~ /last modified:\s+(.+?)\n/
|
57
|
+
parse_time($1)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
property_supported :expires_on do
|
62
|
+
if content_for_scanner =~ /renewal date:\s+(.+?)\n/ && $1 != "not defined"
|
63
|
+
parse_time($1)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
property_supported :registrar do
|
69
|
+
match = content_for_scanner.slice(/REGISTRAR:\n((.+\n)+)\n/, 1)
|
70
|
+
return unless match
|
71
|
+
|
72
|
+
lines = match.split("\n")
|
73
|
+
Parser::Registrar.new(
|
74
|
+
:name => lines[0]
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
property_not_supported :registrant_contacts
|
79
|
+
|
80
|
+
property_not_supported :admin_contacts
|
81
|
+
|
82
|
+
property_supported :technical_contacts do
|
83
|
+
build_contact("TECHNICAL CONTACT", Parser::Contact::TYPE_TECHNICAL)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
property_supported :nameservers do
|
88
|
+
content_for_scanner.scan(/nameservers:\s+(.+)\n(.+)\n/).flatten.map do |line|
|
89
|
+
line.strip!
|
90
|
+
if line =~ /(.+) \[(.+)\]/
|
91
|
+
Parser::Nameserver.new(:name => $1.chomp("."), :ipv4 => $2)
|
92
|
+
else
|
93
|
+
Parser::Nameserver.new(:name => line.chomp("."))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Checks whether the response has been throttled.
|
99
|
+
#
|
100
|
+
# @return [Boolean]
|
101
|
+
#
|
102
|
+
# @example
|
103
|
+
# Looup quota exceeded.
|
104
|
+
#
|
105
|
+
def response_throttled?
|
106
|
+
!!(content_for_scanner =~ /^request limit exceeded for/)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
def build_contact(element, type)
|
113
|
+
match = content_for_scanner.slice(/#{element}:\n((.+\n)+)\n/, 1)
|
114
|
+
return unless match
|
115
|
+
|
116
|
+
values = parse_contact_block(match.split("\n"))
|
117
|
+
zip, city = values["city"].match(/(.+?) (.+)/)[1..2]
|
118
|
+
|
119
|
+
Parser::Contact.new(
|
120
|
+
:type => type,
|
121
|
+
:id => values["handle"],
|
122
|
+
:name => nil,
|
123
|
+
:organization => values["company"],
|
124
|
+
:address => values["street"],
|
125
|
+
:city => city,
|
126
|
+
:zip => zip,
|
127
|
+
:state => nil,
|
128
|
+
:country_code => values["location"],
|
129
|
+
:phone => values["phone"],
|
130
|
+
:fax => values["fax"],
|
131
|
+
:email => nil
|
132
|
+
)
|
133
|
+
end
|
134
|
+
|
135
|
+
def parse_contact_block(lines)
|
136
|
+
key = nil
|
137
|
+
hash = {}
|
138
|
+
lines.each do |line|
|
139
|
+
if line =~ /(.+):(.+)/
|
140
|
+
hash[key = $1] = $2.strip
|
141
|
+
else
|
142
|
+
hash[key] += "\n#{line.strip}"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
hash
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
|
12
|
+
|
13
|
+
module Whois
|
14
|
+
class Parsers
|
15
|
+
|
16
|
+
# Parser for the whois.dns.pt server.
|
17
|
+
#
|
18
|
+
# @note This parser is just a stub and provides only a few basic methods
|
19
|
+
# to check for domain availability and get domain status.
|
20
|
+
# Please consider to contribute implementing missing methods.
|
21
|
+
#
|
22
|
+
# @see Whois::Parsers::Example
|
23
|
+
# The Example parser for the list of all available methods.
|
24
|
+
#
|
25
|
+
class WhoisDnsPt < Base
|
26
|
+
|
27
|
+
property_supported :status do
|
28
|
+
if content_for_scanner =~ /^Estado \/ Status:\s+(.+)\n/
|
29
|
+
case $1.downcase
|
30
|
+
when "active"
|
31
|
+
:registered
|
32
|
+
when "reserved"
|
33
|
+
:reserved
|
34
|
+
when "tech-pro"
|
35
|
+
:inactive
|
36
|
+
else
|
37
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
38
|
+
end
|
39
|
+
else
|
40
|
+
:available
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
property_supported :available? do
|
45
|
+
!!(content_for_scanner =~ /^.* no match$/)
|
46
|
+
end
|
47
|
+
|
48
|
+
property_supported :registered? do
|
49
|
+
!available?
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
property_supported :created_on do
|
54
|
+
if content_for_scanner =~ / Creation Date .+?:\s+(.+)\n/
|
55
|
+
Time.utc(*$1.split("/").reverse)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
property_not_supported :updated_on
|
60
|
+
|
61
|
+
property_supported :expires_on do
|
62
|
+
if content_for_scanner =~ / Expiration Date .+?:\s+(.+)\n/
|
63
|
+
Time.utc(*$1.split("/").reverse)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
property_supported :nameservers do
|
69
|
+
content_for_scanner.scan(/Nameserver:\s+(?:.*)\s+NS\s+(.+?)\.\n/).flatten.map do |name|
|
70
|
+
Parser::Nameserver.new(:name => name)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
|
12
|
+
|
13
|
+
module Whois
|
14
|
+
class Parsers
|
15
|
+
|
16
|
+
# Parser for the whois.domain-registry.nl server.
|
17
|
+
#
|
18
|
+
# @note This parser is just a stub and provides only a few basic methods
|
19
|
+
# to check for domain availability and get domain status.
|
20
|
+
# Please consider to contribute implementing missing methods.
|
21
|
+
#
|
22
|
+
# @see Whois::Parsers::Example
|
23
|
+
# The Example parser for the list of all available methods.
|
24
|
+
#
|
25
|
+
class WhoisDomainRegistryNl < Base
|
26
|
+
|
27
|
+
# == Values for Status
|
28
|
+
#
|
29
|
+
# - free: the .nl domain name is still available for registration
|
30
|
+
# - withdrawn: the .nl domain name is barred from registration
|
31
|
+
# - excluded: the .nl domain name is excluded from registration
|
32
|
+
# - requested: an application for the .nl domain name is being processed
|
33
|
+
# - active: the .nl domain name has already been registered. (If you want to know who has registered the name, tick the ‘Extended search’ box. You will then be shown more information about whoever has registered the name.)
|
34
|
+
# - inactive: the .nl domain name has already been registered, but has not yet been added to the .nl zone file. (If you want to know who has registered the name, tick the ‘Extended search’ box. You will then be shown more information about whoever has registered the name.)
|
35
|
+
# - in quarantine: this .nl domain name's registration has been cancelled. Following cancellation, a domain name is placed in quarantine for forty days.
|
36
|
+
#
|
37
|
+
# @see https://www.sidn.nl/en/whois/
|
38
|
+
# @see https://www.sidn.nl/en/about-nl/whois/looking-up-a-domain-name/
|
39
|
+
#
|
40
|
+
property_supported :status do
|
41
|
+
if content_for_scanner =~ /Status:\s+(.+?)\n/
|
42
|
+
case $1.downcase
|
43
|
+
when "active"
|
44
|
+
:registered
|
45
|
+
when "in quarantine"
|
46
|
+
:redemption
|
47
|
+
when "inactive"
|
48
|
+
:inactive
|
49
|
+
else
|
50
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
51
|
+
end
|
52
|
+
else
|
53
|
+
:available
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
property_supported :available? do
|
58
|
+
status == :available
|
59
|
+
end
|
60
|
+
|
61
|
+
property_supported :registered? do
|
62
|
+
status != :available
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
property_supported :created_on do
|
67
|
+
if content_for_scanner =~ /Date registered:\s+(.+)\n/
|
68
|
+
parse_time($1)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
property_supported :updated_on do
|
73
|
+
if content_for_scanner =~ /Record last updated:\s+(.+)\n/
|
74
|
+
parse_time($1)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
property_not_supported :expires_on
|
79
|
+
|
80
|
+
|
81
|
+
property_supported :nameservers do
|
82
|
+
if content_for_scanner =~ /Domain nameservers:\n((.+\n)+)\n/
|
83
|
+
$1.split("\n").map do |line|
|
84
|
+
name, ipv4 = line.strip.split(/\s+/)
|
85
|
+
Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
# Checks whether the response has been throttled.
|
92
|
+
#
|
93
|
+
# @return [Boolean]
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# whois.domain-registry.nl: only 1 request per second allowed, try again later
|
97
|
+
#
|
98
|
+
# @example
|
99
|
+
# whois.domain-registry.nl: daily whois-limit exceeded
|
100
|
+
#
|
101
|
+
def response_throttled?
|
102
|
+
case content_for_scanner
|
103
|
+
when /^#{Regexp.escape("whois.domain-registry.nl: only 1 request per second allowed, try again later")}/
|
104
|
+
true
|
105
|
+
when /^#{Regexp.escape("whois.domain-registry.nl: daily whois-limit exceeded")}/
|
106
|
+
true
|
107
|
+
else
|
108
|
+
false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Checks whether this response contains a message
|
113
|
+
# that can be reconducted to a "WHOIS Server Unavailable" status.
|
114
|
+
#
|
115
|
+
# @return [Boolean]
|
116
|
+
def response_unavailable?
|
117
|
+
!!(content_for_scanner =~ /Server too busy, try again later/)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
|
12
|
+
|
13
|
+
module Whois
|
14
|
+
class Parsers
|
15
|
+
|
16
|
+
#
|
17
|
+
# = whois.domain.kg
|
18
|
+
#
|
19
|
+
# Parser for the whois.domain.kg server.
|
20
|
+
#
|
21
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
22
|
+
# to check for domain availability and get domain status.
|
23
|
+
# Please consider to contribute implementing missing methods.
|
24
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
25
|
+
# and examples.
|
26
|
+
#
|
27
|
+
class WhoisDomainKg < Base
|
28
|
+
|
29
|
+
property_supported :status do
|
30
|
+
if available?
|
31
|
+
:available
|
32
|
+
else
|
33
|
+
:registered
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
property_supported :available? do
|
38
|
+
!!(content_for_scanner =~ /This domain is available for registration/)
|
39
|
+
end
|
40
|
+
|
41
|
+
property_supported :registered? do
|
42
|
+
!available?
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
property_supported :created_on do
|
47
|
+
if content_for_scanner =~ /Record created: (.+?)\n/
|
48
|
+
parse_time($1)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
property_supported :updated_on do
|
53
|
+
if content_for_scanner =~ /Record last updated on (.+?)\n/
|
54
|
+
parse_time($1)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
property_supported :expires_on do
|
59
|
+
if content_for_scanner =~ /Record expires on (.+?)\n/
|
60
|
+
parse_time($1)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
property_supported :nameservers do
|
66
|
+
if content_for_scanner =~ /Name servers in the listed order:\n\n((.+\n)+)\n/
|
67
|
+
$1.split("\n").map do |name|
|
68
|
+
Parser::Nameserver.new(:name => name.downcase)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
#--
|
2
|
+
# Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
|
7
|
+
#++
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'base'
|
11
|
+
require 'whois/scanners/whois.domainregistry.ie.rb'
|
12
|
+
|
13
|
+
|
14
|
+
module Whois
|
15
|
+
class Parsers
|
16
|
+
|
17
|
+
# Parser for the whois.domainregistry.ie server.
|
18
|
+
#
|
19
|
+
# @see Whois::Parsers::Example
|
20
|
+
# The Example parser for the list of all available methods.
|
21
|
+
#
|
22
|
+
class WhoisDomainregistryIe < Base
|
23
|
+
include Scanners::Scannable
|
24
|
+
|
25
|
+
self.scanner = Scanners::WhoisDomainregistryIe
|
26
|
+
|
27
|
+
|
28
|
+
property_supported :disclaimer do
|
29
|
+
node("field:disclaimer")
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
property_supported :domain do
|
34
|
+
node("domain")
|
35
|
+
end
|
36
|
+
|
37
|
+
property_not_supported :domain_id
|
38
|
+
|
39
|
+
|
40
|
+
property_supported :status do
|
41
|
+
case node("ren-status", &:downcase)
|
42
|
+
when /^active/
|
43
|
+
:registered
|
44
|
+
when nil
|
45
|
+
if node("status:pending")
|
46
|
+
:registered
|
47
|
+
else
|
48
|
+
:available
|
49
|
+
end
|
50
|
+
else
|
51
|
+
Whois.bug!(ParserError, "Unknown status `#{node("status")}'.")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
property_supported :available? do
|
56
|
+
!!node("status:available")
|
57
|
+
end
|
58
|
+
|
59
|
+
property_supported :registered? do
|
60
|
+
!available?
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
property_supported :created_on do
|
65
|
+
node("registration") { |value| parse_time(value) }
|
66
|
+
end
|
67
|
+
|
68
|
+
property_not_supported :updated_on
|
69
|
+
|
70
|
+
property_supported :expires_on do
|
71
|
+
node("renewal") { |value| parse_time(value) }
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
property_not_supported :registrar
|
76
|
+
|
77
|
+
|
78
|
+
property_supported :registrant_contacts do
|
79
|
+
node("descr") do |array|
|
80
|
+
Parser::Contact.new(
|
81
|
+
:type => Parser::Contact::TYPE_REGISTRANT,
|
82
|
+
:id => nil,
|
83
|
+
:name => array[0]
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
property_supported :admin_contacts do
|
89
|
+
build_contact("admin-c", Parser::Contact::TYPE_ADMINISTRATIVE)
|
90
|
+
end
|
91
|
+
|
92
|
+
property_supported :technical_contacts do
|
93
|
+
build_contact("tech-c", Parser::Contact::TYPE_TECHNICAL)
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
property_supported :nameservers do
|
98
|
+
Array.wrap(node("nserver")).map do |line|
|
99
|
+
name, ipv4 = line.split(/\s+/)
|
100
|
+
Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
def build_contact(element, type)
|
108
|
+
Array.wrap(node(element)).map do |id|
|
109
|
+
next unless (contact = node("field:#{id}"))
|
110
|
+
Parser::Contact.new(
|
111
|
+
:type => type,
|
112
|
+
:id => id,
|
113
|
+
:name => contact["person"]
|
114
|
+
)
|
115
|
+
end.compact
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|