whois-parser-next 0.1.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +80 -0
- data/CODE_OF_CONDUCT.md +30 -0
- data/CONTRIBUTING.md +80 -0
- data/GOVERNANCE.md +59 -0
- data/LICENSE.txt +22 -0
- data/MAINTAINERS.md +44 -0
- data/README.md +123 -0
- data/RELEASING.md +43 -0
- data/ROADMAP.md +59 -0
- data/SECURITY.md +41 -0
- 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 +50 -0
- data/lib/whois/parser/version.rb +6 -0
- data/lib/whois/parser.rb +447 -0
- data/lib/whois/parser_extensions/whois.rb +83 -0
- data/lib/whois/parser_extensions/whois_parser.rb +24 -0
- data/lib/whois/parser_extensions/whois_record.rb +236 -0
- data/lib/whois/parser_extensions.rb +3 -0
- data/lib/whois/parsers/base.rb +413 -0
- data/lib/whois/parsers/base_afilias.rb +144 -0
- data/lib/whois/parsers/base_afilias2.rb +145 -0
- data/lib/whois/parsers/base_cocca.rb +97 -0
- data/lib/whois/parsers/base_cocca2.rb +93 -0
- data/lib/whois/parsers/base_icann_compliant.rb +158 -0
- data/lib/whois/parsers/base_icb.rb +51 -0
- data/lib/whois/parsers/base_iisse.rb +113 -0
- data/lib/whois/parsers/base_nic_fr.rb +175 -0
- data/lib/whois/parsers/base_shared1.rb +112 -0
- data/lib/whois/parsers/base_shared2.rb +130 -0
- data/lib/whois/parsers/base_shared3.rb +131 -0
- data/lib/whois/parsers/base_unsupported_registry.rb +30 -0
- data/lib/whois/parsers/base_verisign.rb +106 -0
- data/lib/whois/parsers/base_whoisd.rb +150 -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/coza-whois.registry.net.za.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 +97 -0
- data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/registry_response_safety.rb +29 -0
- data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
- data/lib/whois/parsers/vunic.vu.rb +11 -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 +65 -0
- data/lib/whois/parsers/whois.aero.rb +58 -0
- data/lib/whois/parsers/whois.afilias-grs.info.rb +33 -0
- data/lib/whois/parsers/whois.afilias-srs.net.rb +16 -0
- data/lib/whois/parsers/whois.afilias.net.rb +41 -0
- data/lib/whois/parsers/whois.amnic.net.rb +81 -0
- data/lib/whois/parsers/whois.ascio.com.rb +29 -0
- data/lib/whois/parsers/whois.ati.tn.rb +120 -0
- data/lib/whois/parsers/whois.auda.org.au.rb +12 -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 +34 -0
- data/lib/whois/parsers/whois.bnnic.bn.rb +77 -0
- data/lib/whois/parsers/whois.cat.rb +75 -0
- data/lib/whois/parsers/whois.cctld.by.rb +98 -0
- data/lib/whois/parsers/whois.cctld.uz.rb +83 -0
- data/lib/whois/parsers/whois.cdmon.com.rb +23 -0
- data/lib/whois/parsers/whois.centralnic.com.rb +144 -0
- data/lib/whois/parsers/whois.cira.ca.rb +227 -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 +93 -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 +119 -0
- data/lib/whois/parsers/whois.dns.lu.rb +125 -0
- data/lib/whois/parsers/whois.dns.pl.rb +151 -0
- data/lib/whois/parsers/whois.dns.pt.rb +92 -0
- data/lib/whois/parsers/whois.domain-registry.nl.rb +133 -0
- data/lib/whois/parsers/whois.domainregistry.ie.rb +128 -0
- data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
- data/lib/whois/parsers/whois.donuts.co.rb +59 -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 +58 -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 +198 -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 +119 -0
- data/lib/whois/parsers/whois.gandi.net.rb +36 -0
- data/lib/whois/parsers/whois.gg.rb +93 -0
- data/lib/whois/parsers/whois.godaddy.com.rb +42 -0
- data/lib/whois/parsers/whois.gov.za.rb +60 -0
- data/lib/whois/parsers/whois.hkirc.hk.rb +71 -0
- data/lib/whois/parsers/whois.iana.org.rb +102 -0
- data/lib/whois/parsers/whois.id.rb +26 -0
- data/lib/whois/parsers/whois.iedr.ie.rb +18 -0
- data/lib/whois/parsers/whois.iis.nu.rb +46 -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 +75 -0
- data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
- data/lib/whois/parsers/whois.kenic.or.ke.rb +93 -0
- data/lib/whois/parsers/whois.kg.rb +77 -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.marnet.mk.rb +20 -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.mx.rb +16 -0
- data/lib/whois/parsers/whois.mynic.my.rb +86 -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 +54 -0
- data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
- data/lib/whois/parsers/whois.nic.ac.rb +33 -0
- data/lib/whois/parsers/whois.nic.af.rb +32 -0
- data/lib/whois/parsers/whois.nic.ag.rb +33 -0
- data/lib/whois/parsers/whois.nic.ai.rb +62 -0
- data/lib/whois/parsers/whois.nic.ar.rb +54 -0
- data/lib/whois/parsers/whois.nic.art.rb +9 -0
- data/lib/whois/parsers/whois.nic.as.rb +73 -0
- data/lib/whois/parsers/whois.nic.asia.rb +112 -0
- data/lib/whois/parsers/whois.nic.at.rb +68 -0
- data/lib/whois/parsers/whois.nic.best.rb +9 -0
- data/lib/whois/parsers/whois.nic.bj.rb +127 -0
- data/lib/whois/parsers/whois.nic.bo.rb +82 -0
- data/lib/whois/parsers/whois.nic.business.rb +8 -0
- data/lib/whois/parsers/whois.nic.cat.rb +23 -0
- data/lib/whois/parsers/whois.nic.cd.rb +38 -0
- data/lib/whois/parsers/whois.nic.cfd.rb +9 -0
- data/lib/whois/parsers/whois.nic.ch.rb +109 -0
- data/lib/whois/parsers/whois.nic.chat.rb +10 -0
- data/lib/whois/parsers/whois.nic.ci.rb +74 -0
- data/lib/whois/parsers/whois.nic.cl.rb +76 -0
- data/lib/whois/parsers/whois.nic.cloud.rb +15 -0
- data/lib/whois/parsers/whois.nic.club.rb +15 -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.cr.rb +64 -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.delivery.rb +9 -0
- data/lib/whois/parsers/whois.nic.design.rb +30 -0
- data/lib/whois/parsers/whois.nic.direct.rb +9 -0
- data/lib/whois/parsers/whois.nic.dm.rb +39 -0
- data/lib/whois/parsers/whois.nic.domains.rb +8 -0
- data/lib/whois/parsers/whois.nic.dz.rb +67 -0
- data/lib/whois/parsers/whois.nic.ec.rb +44 -0
- data/lib/whois/parsers/whois.nic.es.rb +114 -0
- data/lib/whois/parsers/whois.nic.fm.rb +18 -0
- data/lib/whois/parsers/whois.nic.fo.rb +69 -0
- data/lib/whois/parsers/whois.nic.fr.rb +25 -0
- data/lib/whois/parsers/whois.nic.fun.rb +13 -0
- data/lib/whois/parsers/whois.nic.games.rb +9 -0
- data/lib/whois/parsers/whois.nic.gd.rb +31 -0
- data/lib/whois/parsers/whois.nic.gl.rb +49 -0
- data/lib/whois/parsers/whois.nic.group.rb +8 -0
- data/lib/whois/parsers/whois.nic.gs.rb +31 -0
- data/lib/whois/parsers/whois.nic.hn.rb +49 -0
- data/lib/whois/parsers/whois.nic.host.rb +37 -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.icu.rb +12 -0
- data/lib/whois/parsers/whois.nic.im.rb +66 -0
- data/lib/whois/parsers/whois.nic.ink.rb +12 -0
- data/lib/whois/parsers/whois.nic.io.rb +52 -0
- data/lib/whois/parsers/whois.nic.ir.rb +70 -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 +69 -0
- data/lib/whois/parsers/whois.nic.la.rb +32 -0
- data/lib/whois/parsers/whois.nic.li.rb +68 -0
- data/lib/whois/parsers/whois.nic.life.rb +10 -0
- data/lib/whois/parsers/whois.nic.link.rb +13 -0
- data/lib/whois/parsers/whois.nic.lk.rb +109 -0
- data/lib/whois/parsers/whois.nic.ltd.rb +8 -0
- data/lib/whois/parsers/whois.nic.lv.rb +69 -0
- data/lib/whois/parsers/whois.nic.ly.rb +78 -0
- data/lib/whois/parsers/whois.nic.market.rb +8 -0
- data/lib/whois/parsers/whois.nic.md.rb +101 -0
- data/lib/whois/parsers/whois.nic.me.rb +85 -0
- data/lib/whois/parsers/whois.nic.mg.rb +35 -0
- data/lib/whois/parsers/whois.nic.ms.rb +37 -0
- data/lib/whois/parsers/whois.nic.mu.rb +25 -0
- data/lib/whois/parsers/whois.nic.mw.rb +33 -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.bw.rb +11 -0
- data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
- data/lib/whois/parsers/whois.nic.net.sa.rb +74 -0
- data/lib/whois/parsers/whois.nic.net.sb.rb +35 -0
- data/lib/whois/parsers/whois.nic.news.rb +8 -0
- data/lib/whois/parsers/whois.nic.nf.rb +50 -0
- data/lib/whois/parsers/whois.nic.ninja.rb +8 -0
- data/lib/whois/parsers/whois.nic.one.rb +41 -0
- data/lib/whois/parsers/whois.nic.online.rb +39 -0
- data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
- data/lib/whois/parsers/whois.nic.plus.rb +8 -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.pub.rb +8 -0
- data/lib/whois/parsers/whois.nic.pw.rb +25 -0
- data/lib/whois/parsers/whois.nic.re.rb +29 -0
- data/lib/whois/parsers/whois.nic.rocks.rb +8 -0
- data/lib/whois/parsers/whois.nic.run.rb +8 -0
- data/lib/whois/parsers/whois.nic.sh.rb +25 -0
- data/lib/whois/parsers/whois.nic.site.rb +62 -0
- data/lib/whois/parsers/whois.nic.sl.rb +80 -0
- data/lib/whois/parsers/whois.nic.sm.rb +84 -0
- data/lib/whois/parsers/whois.nic.sn.rb +119 -0
- data/lib/whois/parsers/whois.nic.so.rb +71 -0
- data/lib/whois/parsers/whois.nic.software.rb +9 -0
- data/lib/whois/parsers/whois.nic.solutions.rb +9 -0
- data/lib/whois/parsers/whois.nic.space.rb +25 -0
- data/lib/whois/parsers/whois.nic.st.rb +76 -0
- data/lib/whois/parsers/whois.nic.store.rb +15 -0
- data/lib/whois/parsers/whois.nic.studio.rb +8 -0
- data/lib/whois/parsers/whois.nic.systems.rb +8 -0
- data/lib/whois/parsers/whois.nic.tc.rb +25 -0
- data/lib/whois/parsers/whois.nic.tech.rb +33 -0
- data/lib/whois/parsers/whois.nic.technology.rb +8 -0
- data/lib/whois/parsers/whois.nic.tel.rb +25 -0
- data/lib/whois/parsers/whois.nic.tg.rb +49 -0
- data/lib/whois/parsers/whois.nic.tl.rb +32 -0
- data/lib/whois/parsers/whois.nic.tm.rb +101 -0
- data/lib/whois/parsers/whois.nic.today.rb +8 -0
- data/lib/whois/parsers/whois.nic.tools.rb +9 -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.tv.rb +15 -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 +94 -0
- data/lib/whois/parsers/whois.nic.vg.rb +16 -0
- data/lib/whois/parsers/whois.nic.video.rb +10 -0
- data/lib/whois/parsers/whois.nic.vip.rb +13 -0
- data/lib/whois/parsers/whois.nic.website.rb +9 -0
- data/lib/whois/parsers/whois.nic.wf.rb +29 -0
- data/lib/whois/parsers/whois.nic.win.rb +10 -0
- data/lib/whois/parsers/whois.nic.work.rb +10 -0
- data/lib/whois/parsers/whois.nic.works.rb +8 -0
- data/lib/whois/parsers/whois.nic.world.rb +10 -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.nixiregistry.in.rb +15 -0
- data/lib/whois/parsers/whois.norid.no.rb +61 -0
- data/lib/whois/parsers/whois.ovh.com.rb +12 -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 +86 -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 +65 -0
- data/lib/whois/parsers/whois.registro.br.rb +126 -0
- data/lib/whois/parsers/whois.registry.co.rb +19 -0
- data/lib/whois/parsers/whois.registry.gy.rb +32 -0
- data/lib/whois/parsers/whois.registry.hm.rb +72 -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.ricta.org.rw.rb +16 -0
- data/lib/whois/parsers/whois.ripe.net.rb +68 -0
- data/lib/whois/parsers/whois.rnids.rs.rb +135 -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 +92 -0
- data/lib/whois/parsers/whois.sk-nic.sk.rb +111 -0
- data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
- data/lib/whois/parsers/whois.srs.net.nz.rb +177 -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 +80 -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 +100 -0
- data/lib/whois/parsers/whois.tonicregistry.to.rb +12 -0
- data/lib/whois/parsers/whois.trabis.gov.tr.rb +58 -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 +36 -0
- data/lib/whois/parsers/whois.ua.rb +242 -0
- data/lib/whois/parsers/whois.udag.net.rb +28 -0
- data/lib/whois/parsers/whois.uniregistry.net.rb +71 -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.vunic.vu.rb +14 -0
- data/lib/whois/parsers/whois.website.ws.rb +79 -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/whois.zicta.zm.rb +13 -0
- data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
- data/lib/whois/parsers/za_central_registry.rb +80 -0
- data/lib/whois/parsers.rb +1 -0
- data/lib/whois/safe_record.rb +170 -0
- data/lib/whois/scanners/base.rb +114 -0
- data/lib/whois/scanners/base_afilias.rb +51 -0
- data/lib/whois/scanners/base_cocca2.rb +58 -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 +32 -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 +103 -0
- data/lib/whois/scanners/whois.dns.hr.rb +30 -0
- data/lib/whois/scanners/whois.domainregistry.ie.rb +51 -0
- data/lib/whois/scanners/whois.fi.rb +66 -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.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
- metadata +507 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
require 'whois/scanners/whois.dns.hr.rb'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.dns.hr server.
|
|
18
|
+
#
|
|
19
|
+
# @see Whois::Parsers::Example
|
|
20
|
+
# The Example parser for the list of all available methods.
|
|
21
|
+
#
|
|
22
|
+
class WhoisDnsHr < Base
|
|
23
|
+
include Scanners::Scannable
|
|
24
|
+
|
|
25
|
+
self.scanner = Scanners::WhoisDnsHr
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
property_not_supported :disclaimer
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
property_supported :domain do
|
|
32
|
+
node("Domain Name") || node("domain")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
property_not_supported :domain_id
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
property_supported :status do
|
|
39
|
+
if available?
|
|
40
|
+
:available
|
|
41
|
+
elsif node("Domain Name") || node("domain")
|
|
42
|
+
:registered
|
|
43
|
+
else
|
|
44
|
+
:unknown
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
property_supported :available? do
|
|
49
|
+
!!node("status:available")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
property_supported :registered? do
|
|
53
|
+
status == :registered
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
property_not_supported :created_on
|
|
58
|
+
|
|
59
|
+
property_not_supported :updated_on
|
|
60
|
+
|
|
61
|
+
property_supported :expires_on do
|
|
62
|
+
node("Registrar Registration Expiration Date") { |value| parse_time(value) } ||
|
|
63
|
+
node("expires") { |value| parse_time(value) }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
property_not_supported :registrar
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
property_supported :registrant_contacts do
|
|
71
|
+
if node("descr")
|
|
72
|
+
node("descr") do |array|
|
|
73
|
+
_, zip, city = array[2].match(/([\d\s]+) (.+)/).to_a
|
|
74
|
+
Parser::Contact.new(
|
|
75
|
+
:type => Parser::Contact::TYPE_REGISTRANT,
|
|
76
|
+
:id => nil,
|
|
77
|
+
:name => array[0],
|
|
78
|
+
:organization => nil,
|
|
79
|
+
:address => array[1],
|
|
80
|
+
:city => city,
|
|
81
|
+
:zip => zip,
|
|
82
|
+
:state => nil,
|
|
83
|
+
:country => nil,
|
|
84
|
+
:phone => nil,
|
|
85
|
+
:fax => nil,
|
|
86
|
+
:email => nil
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
elsif node("Registrant Name")
|
|
90
|
+
Parser::Contact.new(
|
|
91
|
+
type: Parser::Contact::TYPE_REGISTRANT,
|
|
92
|
+
name: node("Registrant Name"),
|
|
93
|
+
address: node("Registrant Street"),
|
|
94
|
+
city: node("Registrant City"),
|
|
95
|
+
zip: node("Registrant Postal Code"),
|
|
96
|
+
country_code: node("Registrant Country"),
|
|
97
|
+
email: node("Registrant Email")
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
property_not_supported :admin_contacts
|
|
103
|
+
|
|
104
|
+
property_not_supported :technical_contacts
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
property_not_supported :nameservers
|
|
108
|
+
|
|
109
|
+
def response_unavailable?
|
|
110
|
+
body = content_for_scanner
|
|
111
|
+
!body.match?(/^%ERROR:\s*no entries found\s*$/i) &&
|
|
112
|
+
!body.match?(/^Domain Name:\s+\S+/i) &&
|
|
113
|
+
!body.match?(/^domain:\s+\S+/i)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
require_relative 'registry_response_safety'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.dns.lu server.
|
|
18
|
+
#
|
|
19
|
+
# @note This parser is just a stub and provides only a few basic methods
|
|
20
|
+
# to check for domain availability and get domain status.
|
|
21
|
+
# Please consider to contribute implementing missing methods.
|
|
22
|
+
#
|
|
23
|
+
# @see Whois::Parsers::Example
|
|
24
|
+
# The Example parser for the list of all available methods.
|
|
25
|
+
#
|
|
26
|
+
class WhoisDnsLu < Base
|
|
27
|
+
include RegistryResponseSafety
|
|
28
|
+
|
|
29
|
+
property_supported :status do
|
|
30
|
+
if content_for_scanner.match?(/domaintype:\s+active\s*$/i)
|
|
31
|
+
:registered
|
|
32
|
+
elsif available?
|
|
33
|
+
:available
|
|
34
|
+
else
|
|
35
|
+
Whois::Parser.bug!(ParserError, "Unable to parse .lu response status.")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
property_supported :available? do
|
|
40
|
+
!!(content_for_scanner =~ /% No such domain/)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
property_supported :registered? do
|
|
44
|
+
status == :registered
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
property_supported :created_on do
|
|
49
|
+
if content_for_scanner =~ /registered:\s+(.*)\n/
|
|
50
|
+
# Force the parser to use the dd/mm/yyyy format.
|
|
51
|
+
Time.utc(*::Regexp.last_match(1).split("/").reverse)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
property_not_supported :updated_on
|
|
56
|
+
|
|
57
|
+
property_not_supported :expires_on
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
property_supported :registrar do
|
|
61
|
+
if name = value_for_key('registrar-name')
|
|
62
|
+
Parser::Registrar.new(
|
|
63
|
+
name: name,
|
|
64
|
+
url: value_for_key('registrar-url')
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
property_supported :registrant_contacts do
|
|
70
|
+
build_contact('org', Parser::Contact::TYPE_REGISTRANT)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
property_supported :admin_contacts do
|
|
74
|
+
build_contact('adm', Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
property_supported :technical_contacts do
|
|
78
|
+
build_contact('tec', Parser::Contact::TYPE_TECHNICAL)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
property_supported :nameservers do
|
|
83
|
+
values_for_key('nserver').map do |line|
|
|
84
|
+
if line =~ /(.+) \[(.+)\]/
|
|
85
|
+
Parser::Nameserver.new(name: ::Regexp.last_match(1), ipv4: ::Regexp.last_match(2))
|
|
86
|
+
else
|
|
87
|
+
Parser::Nameserver.new(name: line)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
def build_contact(element, type)
|
|
96
|
+
return unless (name = value_for_key(format("%s-name", element)))
|
|
97
|
+
|
|
98
|
+
Parser::Contact.new(
|
|
99
|
+
type: type,
|
|
100
|
+
id: nil,
|
|
101
|
+
name: name,
|
|
102
|
+
address: value_for_key(format("%s-address", element)),
|
|
103
|
+
city: value_for_key(format("%s-city", element)),
|
|
104
|
+
zip: value_for_key(format("%s-zipcode", element)),
|
|
105
|
+
country_code: value_for_key(format("%s-country", element)),
|
|
106
|
+
email: value_for_key(format("%s-email", element))
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def value_for_key(key)
|
|
111
|
+
values = values_for_key(key)
|
|
112
|
+
if values.size > 1
|
|
113
|
+
values.join(', ')
|
|
114
|
+
else
|
|
115
|
+
values.first
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def values_for_key(key)
|
|
120
|
+
content_for_scanner.scan(/#{key}:\s+(.+)\n/).flatten
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 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
|
+
::Regexp.last_match(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(::Regexp.last_match(1))
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
property_supported :updated_on do
|
|
56
|
+
if content_for_scanner =~ /last modified:\s+(.+?)\n/
|
|
57
|
+
parse_time(::Regexp.last_match(1))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
property_supported :expires_on do
|
|
62
|
+
if content_for_scanner =~ /renewal date:\s+(.+?)\n/ && ::Regexp.last_match(1) != "not defined"
|
|
63
|
+
parse_time(::Regexp.last_match(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 => ::Regexp.last_match(1).chomp("."), :ipv4 => ::Regexp.last_match(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 = ::Regexp.last_match(1)] = ::Regexp.last_match(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,92 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 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 =~ %r{^(?:Estado / Status|Domain Status):\s+(.+)$}i
|
|
29
|
+
case ::Regexp.last_match(1).downcase
|
|
30
|
+
when "active", "registered"
|
|
31
|
+
:registered
|
|
32
|
+
when "reserved"
|
|
33
|
+
:reserved
|
|
34
|
+
when "tech-pro"
|
|
35
|
+
:inactive
|
|
36
|
+
else
|
|
37
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
|
|
38
|
+
end
|
|
39
|
+
else
|
|
40
|
+
:available
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
property_supported :available? do
|
|
45
|
+
!!(content_for_scanner =~ /^.* no match\s*$/i)
|
|
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
|
+
parse_pt_date(::Regexp.last_match(1))
|
|
56
|
+
elsif content_for_scanner =~ /^Creation Date:\s+(.+)$/i
|
|
57
|
+
parse_pt_date(::Regexp.last_match(1))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
property_not_supported :updated_on
|
|
62
|
+
|
|
63
|
+
property_supported :expires_on do
|
|
64
|
+
if content_for_scanner =~ / Expiration Date .+?:\s+(.+)\n/
|
|
65
|
+
parse_pt_date(::Regexp.last_match(1))
|
|
66
|
+
elsif content_for_scanner =~ /^Expiration Date:\s+(.+)$/i
|
|
67
|
+
parse_pt_date(::Regexp.last_match(1))
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
property_supported :nameservers do
|
|
73
|
+
names = content_for_scanner.scan(/^\s*Name Server:\s+([^\s|]+)/i).flatten
|
|
74
|
+
names = content_for_scanner.scan(/Nameserver:\s+(?:.*)\s+NS\s+(.+?)\.\n/).flatten if names.empty?
|
|
75
|
+
names.map do |name|
|
|
76
|
+
Parser::Nameserver.new(:name => name)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
def parse_pt_date(value)
|
|
83
|
+
date, time = value.strip.split(/\s+/, 2)
|
|
84
|
+
day, month, year = date.split("/").map(&:to_i)
|
|
85
|
+
hour, minute, second = (time || "00:00:00").split(":").map(&:to_i)
|
|
86
|
+
Time.utc(year, month, day, hour, minute, second)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 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
|
+
property_supported :domain do
|
|
28
|
+
content_for_scanner.slice(/Domain name:\s+(.+?)\n/i, 1)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# == Values for Status
|
|
32
|
+
#
|
|
33
|
+
# - free: the .nl domain name is still available for registration
|
|
34
|
+
# - withdrawn: the .nl domain name is barred from registration
|
|
35
|
+
# - excluded: the .nl domain name is excluded from registration
|
|
36
|
+
# - requested: an application for the .nl domain name is being processed
|
|
37
|
+
# - 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.)
|
|
38
|
+
# - 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.)
|
|
39
|
+
# - in quarantine: this .nl domain name's registration has been cancelled. Following cancellation, a domain name is placed in quarantine for forty days.
|
|
40
|
+
#
|
|
41
|
+
# @see https://www.sidn.nl/en/whois/
|
|
42
|
+
# @see https://www.sidn.nl/en/about-nl/whois/looking-up-a-domain-name/
|
|
43
|
+
#
|
|
44
|
+
property_supported :status do
|
|
45
|
+
if content_for_scanner =~ /Status:\s+(.+?)\n/i
|
|
46
|
+
case ::Regexp.last_match(1).downcase
|
|
47
|
+
when "free"
|
|
48
|
+
:available
|
|
49
|
+
when "withdrawn", "excluded"
|
|
50
|
+
:reserved
|
|
51
|
+
when "requested"
|
|
52
|
+
:registered
|
|
53
|
+
when "active"
|
|
54
|
+
:registered
|
|
55
|
+
when "in quarantine"
|
|
56
|
+
:redemption
|
|
57
|
+
when "inactive"
|
|
58
|
+
:inactive
|
|
59
|
+
else
|
|
60
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
:available
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
property_supported :available? do
|
|
68
|
+
status == :available
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
property_supported :registered? do
|
|
72
|
+
status != :available
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
property_supported :created_on do
|
|
77
|
+
if content_for_scanner =~ /(?:Date registered|Creation Date):\s+(.+)\n/i
|
|
78
|
+
parse_time(::Regexp.last_match(1))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
property_supported :updated_on do
|
|
83
|
+
if content_for_scanner =~ /(?:Record last updated|Updated Date):\s+(.+)\n/i
|
|
84
|
+
parse_time(::Regexp.last_match(1))
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
property_not_supported :expires_on
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
property_supported :nameservers do
|
|
92
|
+
if content_for_scanner =~ /Domain nameservers:\n((.+\n)+)\n/
|
|
93
|
+
::Regexp.last_match(1).split("\n").map do |line|
|
|
94
|
+
name, ipv4 = line.strip.split(/\s+/)
|
|
95
|
+
Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# Checks whether the response has been throttled.
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
#
|
|
105
|
+
# @example
|
|
106
|
+
# whois.domain-registry.nl: only 1 request per second allowed, try again later
|
|
107
|
+
#
|
|
108
|
+
# @example
|
|
109
|
+
# whois.domain-registry.nl: daily whois-limit exceeded
|
|
110
|
+
#
|
|
111
|
+
def response_throttled?
|
|
112
|
+
case content_for_scanner
|
|
113
|
+
when /^#{Regexp.escape('whois.domain-registry.nl: only 1 request per second allowed, try again later')}/
|
|
114
|
+
true
|
|
115
|
+
when /^#{Regexp.escape('whois.domain-registry.nl: daily whois-limit exceeded')}/
|
|
116
|
+
true
|
|
117
|
+
else
|
|
118
|
+
false
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Checks whether this response contains a message
|
|
123
|
+
# that can be reconducted to a "WHOIS Server Unavailable" status.
|
|
124
|
+
#
|
|
125
|
+
# @return [Boolean]
|
|
126
|
+
def response_unavailable?
|
|
127
|
+
!!(content_for_scanner =~ /Server too busy, try again later/)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|
|
133
|
+
end
|