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,127 @@
|
|
|
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.sx.rb'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.sx server.
|
|
18
|
+
#
|
|
19
|
+
# @see Whois::Parsers::Example
|
|
20
|
+
# The Example parser for the list of all available methods.
|
|
21
|
+
#
|
|
22
|
+
class WhoisSx < Base
|
|
23
|
+
include Scanners::Scannable
|
|
24
|
+
|
|
25
|
+
self.scanner = Scanners::WhoisSx
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
property_supported :disclaimer do
|
|
29
|
+
node("field:disclaimer")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
property_supported :domain do
|
|
34
|
+
node("Domain Name", &:downcase)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_supported :domain_id do
|
|
38
|
+
node("Domain ID")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
property_supported :status do
|
|
43
|
+
case (s = node("Domain Status", &:downcase))
|
|
44
|
+
when "available"
|
|
45
|
+
:available
|
|
46
|
+
when "ok"
|
|
47
|
+
:registered
|
|
48
|
+
when "premium name"
|
|
49
|
+
:unavailable
|
|
50
|
+
else
|
|
51
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{s}'.")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
property_supported :available? do
|
|
56
|
+
status == :available
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
property_supported :registered? do
|
|
60
|
+
status == :registered
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
property_supported :created_on do
|
|
65
|
+
node("Creation Date") { |value| parse_time(value) }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
property_supported :updated_on do
|
|
69
|
+
node("Updated Date") { |value| parse_time(value) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
property_supported :expires_on do
|
|
73
|
+
node("Registry Expiry Date") { |value| parse_time(value) }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
property_supported :registrar do
|
|
78
|
+
node("Sponsoring Registrar") do |value|
|
|
79
|
+
Parser::Registrar.new(
|
|
80
|
+
:name => value
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
property_supported :registrant_contacts do
|
|
87
|
+
build_contact("Registrant", Parser::Contact::TYPE_REGISTRANT)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
property_supported :admin_contacts do
|
|
91
|
+
build_contact("Admin", Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
property_supported :technical_contacts do
|
|
95
|
+
build_contact("Tech", Parser::Contact::TYPE_TECHNICAL)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
property_supported :nameservers do
|
|
100
|
+
Array.wrap(node("Name Server")).map do |name|
|
|
101
|
+
Parser::Nameserver.new(:name => name)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
def build_contact(element, type)
|
|
109
|
+
node("#{element} ID") do |id|
|
|
110
|
+
Parser::Contact.new(
|
|
111
|
+
:type => type,
|
|
112
|
+
:id => id,
|
|
113
|
+
:name => node("#{element} Name"),
|
|
114
|
+
:organization => node("#{element} Organization"),
|
|
115
|
+
:address => node("#{element} Street"),
|
|
116
|
+
:city => node("#{element} City"),
|
|
117
|
+
:zip => node("#{element} Postal Code"),
|
|
118
|
+
:country => node("#{element} Country"),
|
|
119
|
+
:email => node("#{element} Email")
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
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.tcinet.ru 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 WhoisTcinetRu < Base
|
|
26
|
+
|
|
27
|
+
property_supported :domain do
|
|
28
|
+
if content_for_scanner =~ /domain:\s+(.+?)\n/
|
|
29
|
+
::Regexp.last_match(1).downcase
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
property_not_supported :domain_id
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
property_supported :status do
|
|
37
|
+
if content_for_scanner =~ /state:\s+(.+?)\n/
|
|
38
|
+
::Regexp.last_match(1).split(",").map(&:strip)
|
|
39
|
+
else
|
|
40
|
+
[]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
property_supported :available? do
|
|
45
|
+
!!(content_for_scanner =~ /No entries found/)
|
|
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 =~ /created:\s+(.*)\n/
|
|
55
|
+
parse_time(::Regexp.last_match(1))
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
property_not_supported :updated_on
|
|
60
|
+
|
|
61
|
+
property_supported :expires_on do
|
|
62
|
+
if content_for_scanner =~ /paid-till:\s+(.*)\n/
|
|
63
|
+
parse_time(::Regexp.last_match(1))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
property_supported :registrar do
|
|
69
|
+
if content_for_scanner =~ /registrar:\s+(.*)\n/
|
|
70
|
+
Parser::Registrar.new(
|
|
71
|
+
:id => ::Regexp.last_match(1)
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
property_supported :admin_contacts do
|
|
78
|
+
url = content_for_scanner[/admin-contact:\s+(.+)\n/, 1]
|
|
79
|
+
email = content_for_scanner[/e-mail:\s+(.+)\n/, 1]
|
|
80
|
+
contact = if url or email
|
|
81
|
+
Parser::Contact.new(
|
|
82
|
+
:type => Parser::Contact::TYPE_ADMINISTRATIVE,
|
|
83
|
+
:url => url,
|
|
84
|
+
:email => email,
|
|
85
|
+
:name => content_for_scanner[/person:\s+(.+)\n/, 1],
|
|
86
|
+
:organization => content_for_scanner[/org:\s+(.+)\n/, 1],
|
|
87
|
+
:phone => content_for_scanner[/phone:\s+(.+)\n/, 1],
|
|
88
|
+
:fax => content_for_scanner[/fax-no:\s+(.+)\n/, 1]
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
Array.wrap(contact)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
property_not_supported :registrant_contacts
|
|
95
|
+
|
|
96
|
+
property_not_supported :technical_contacts
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# Nameservers are listed in the following formats:
|
|
100
|
+
#
|
|
101
|
+
# nserver: ns.masterhost.ru.
|
|
102
|
+
# nserver: ns.masterhost.ru. 217.16.20.30
|
|
103
|
+
#
|
|
104
|
+
property_supported :nameservers do
|
|
105
|
+
content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map do |line|
|
|
106
|
+
name, ipv4 = line.split(/\s+/)
|
|
107
|
+
Parser::Nameserver.new(:name => name.chomp("."), :ipv4 => ipv4)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
#
|
|
17
|
+
# = whois.thnic.co.th parser
|
|
18
|
+
#
|
|
19
|
+
# Parser for the whois.thnic.co.th 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 WhoisThnicCoTh < Base
|
|
28
|
+
|
|
29
|
+
property_supported :status do
|
|
30
|
+
if content_for_scanner =~ /Status: (.+?)\n/
|
|
31
|
+
case ::Regexp.last_match(1).strip.downcase
|
|
32
|
+
when "active"
|
|
33
|
+
:registered
|
|
34
|
+
else
|
|
35
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
:available
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
property_supported :available? do
|
|
43
|
+
!!(content_for_scanner =~ /^% No match for/ ||
|
|
44
|
+
content_for_scanner =~ /^% No match found\.$/)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
property_supported :registered? do
|
|
48
|
+
!available?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
property_supported :created_on do
|
|
53
|
+
if content_for_scanner =~ /^Created date: (.+?)\n/
|
|
54
|
+
parse_time(::Regexp.last_match(1))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
property_supported :updated_on do
|
|
59
|
+
if content_for_scanner =~ /^Updated date: (.+?)\n/
|
|
60
|
+
parse_time(::Regexp.last_match(1))
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
property_supported :expires_on do
|
|
65
|
+
if content_for_scanner =~ /^Exp date: (.+?)\n/
|
|
66
|
+
parse_time(::Regexp.last_match(1))
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
property_supported :nameservers do
|
|
72
|
+
content_for_scanner.scan(/Name Server:\s+(.+)\n/).flatten.map do |name|
|
|
73
|
+
Parser::Nameserver.new(:name => name.downcase)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
require_relative 'base'
|
|
10
|
+
require 'whois/scanners/whois.tld.ee'
|
|
11
|
+
|
|
12
|
+
module Whois
|
|
13
|
+
class Parsers
|
|
14
|
+
|
|
15
|
+
# Parser for the whois.tld.ee server.
|
|
16
|
+
#
|
|
17
|
+
# @see Whois::Parsers::Example
|
|
18
|
+
# The Example parser for the list of all available methods.
|
|
19
|
+
#
|
|
20
|
+
class WhoisTldEe < Base
|
|
21
|
+
include Scanners::Scannable
|
|
22
|
+
|
|
23
|
+
self.scanner = Scanners::WhoisTldEe
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
property_supported :disclaimer do
|
|
27
|
+
node('field:disclaimer').to_s.strip
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
property_supported :domain do
|
|
32
|
+
if content_for_scanner =~ /^Domain:\nname:\s+(.+)\n/
|
|
33
|
+
::Regexp.last_match(1).to_s.strip.downcase
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_not_supported :domain_id
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
property_supported :status do
|
|
41
|
+
if content_for_scanner =~ /status:\s+(.+?)\n/
|
|
42
|
+
case ::Regexp.last_match(1)
|
|
43
|
+
when 'ok (paid and in zone)'
|
|
44
|
+
:registered
|
|
45
|
+
when 'expired'
|
|
46
|
+
:expired
|
|
47
|
+
else
|
|
48
|
+
::Regexp.last_match(1)
|
|
49
|
+
end
|
|
50
|
+
else
|
|
51
|
+
:available
|
|
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
|
+
if content_for_scanner =~ /registered:\s+(.+?)\n/
|
|
66
|
+
parse_time(::Regexp.last_match(1))
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
property_supported :updated_on do
|
|
71
|
+
if content_for_scanner =~ /changed:\s+(.+?)\n/
|
|
72
|
+
parse_time(::Regexp.last_match(1))
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
property_supported :expires_on do
|
|
77
|
+
if content_for_scanner =~ /expire:\s+(.+?)\n/
|
|
78
|
+
parse_time(::Regexp.last_match(1))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
property_supported :registrar do
|
|
84
|
+
node('Registrar') do |hash|
|
|
85
|
+
Parser::Registrar.new(
|
|
86
|
+
name: hash['name'],
|
|
87
|
+
organization: hash['name'],
|
|
88
|
+
url: hash['url']
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
property_supported :registrant_contacts do
|
|
94
|
+
build_contact('Registrant', Parser::Contact::TYPE_REGISTRANT)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
property_supported :admin_contacts do
|
|
98
|
+
build_contact('Administrative contact', Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
property_supported :technical_contacts do
|
|
102
|
+
build_contact('Technical contact', Parser::Contact::TYPE_TECHNICAL)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
property_supported :nameservers do
|
|
107
|
+
node('Name servers') do |hash|
|
|
108
|
+
Array.wrap(hash['nserver']).map do |name|
|
|
109
|
+
Parser::Nameserver.new(name: name.downcase)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
|
|
117
|
+
def build_contact(element, type)
|
|
118
|
+
node(element) do |hash|
|
|
119
|
+
el_size = Array.wrap(hash['name']).size
|
|
120
|
+
|
|
121
|
+
(0...el_size).map do |i|
|
|
122
|
+
Parser::Contact.new(
|
|
123
|
+
type: type,
|
|
124
|
+
name: Array.wrap(hash['name'])[i],
|
|
125
|
+
email: Array.wrap(hash['email'])[i],
|
|
126
|
+
updated_on: parse_time(Array.wrap(hash['changed'])[i])
|
|
127
|
+
)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
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_cocca2'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.tld.sy server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisTldSy < BaseCocca2
|
|
22
|
+
|
|
23
|
+
property_supported :status do
|
|
24
|
+
list = Array.wrap(node("Domain Status")).map(&:downcase)
|
|
25
|
+
list.include?("available") ? :available : super()
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
property_not_supported :updated_on
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
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.tonic.to server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
class WhoisTonicTo < Base
|
|
21
|
+
|
|
22
|
+
property_not_supported :disclaimer
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
property_not_supported :domain
|
|
26
|
+
|
|
27
|
+
property_not_supported :domain_id
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
property_supported :status do
|
|
31
|
+
if response_incomplete?
|
|
32
|
+
:incomplete
|
|
33
|
+
elsif available?
|
|
34
|
+
:available
|
|
35
|
+
else
|
|
36
|
+
:registered
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
property_supported :available? do
|
|
41
|
+
!response_incomplete? && !!(content_for_scanner =~ /^No match for \S+\s*$/)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
property_supported :registered? do
|
|
45
|
+
!response_incomplete? && !available?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
property_not_supported :created_on
|
|
50
|
+
|
|
51
|
+
property_not_supported :updated_on
|
|
52
|
+
|
|
53
|
+
property_not_supported :expires_on
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
property_not_supported :registrar
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
property_not_supported :registrant_contacts
|
|
60
|
+
|
|
61
|
+
property_not_supported :admin_contacts
|
|
62
|
+
|
|
63
|
+
property_not_supported :technical_contacts
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
property_not_supported :nameservers
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# Very often the .to server returns a partial response,
|
|
70
|
+
# which is a response containing an empty line.
|
|
71
|
+
# It seems to be a very poorly-designed throttle mechanism.
|
|
72
|
+
#
|
|
73
|
+
# @return [Boolean]
|
|
74
|
+
#
|
|
75
|
+
# @see Whois::Parsers::Base#response_incomplete?
|
|
76
|
+
#
|
|
77
|
+
def response_incomplete?
|
|
78
|
+
content_for_scanner.strip == ""
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def response_throttled?
|
|
82
|
+
content_for_scanner.match?(
|
|
83
|
+
/^(?:\s*(?:%|#)\s*)?(?:whois\s+)?query\s+(?:rate\s+)?limit\s+exceeded\b/i
|
|
84
|
+
) || content_for_scanner.match?(
|
|
85
|
+
/^(?:\s*(?:%|#)\s*)?maximum\s+query\s+rate\s+reached\b/i
|
|
86
|
+
) || content_for_scanner.match?(
|
|
87
|
+
/^(?:\s*(?:%|#)\s*)?excessive\s+querying\b/i
|
|
88
|
+
)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def response_unavailable?
|
|
92
|
+
content_for_scanner.match?(
|
|
93
|
+
/^(?:\s*(?:%|#)\s*)?(?:requests of this client are not permitted|access to the whois service is denied|whois service is unavailable)\b/i
|
|
94
|
+
)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require_relative 'base_icann_compliant'
|
|
2
|
+
|
|
3
|
+
module Whois
|
|
4
|
+
class Parsers
|
|
5
|
+
# Parser for the whois.tonicregistry.to server.
|
|
6
|
+
class WhoisTonicregistryTo < BaseIcannCompliant
|
|
7
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
8
|
+
pattern_available: /^>>> Domain .+ is available for registration\n/,
|
|
9
|
+
}
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative 'registry_response_safety'
|
|
3
|
+
|
|
4
|
+
module Whois
|
|
5
|
+
class Parsers
|
|
6
|
+
# Parser for the whois.trabis.gov.tr server.
|
|
7
|
+
class WhoisTrabisGovTr < Base
|
|
8
|
+
include RegistryResponseSafety
|
|
9
|
+
|
|
10
|
+
property_supported :domain do
|
|
11
|
+
content_for_scanner.slice(/^\*\* Domain Name:\s+(.+)\n/, 1)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
property_supported :status do
|
|
15
|
+
if available?
|
|
16
|
+
:available
|
|
17
|
+
elsif domain
|
|
18
|
+
:registered
|
|
19
|
+
else
|
|
20
|
+
:unknown
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
property_supported :available? do
|
|
25
|
+
!!(content_for_scanner =~ /^No match found for .+\n/)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
property_supported :registered? do
|
|
29
|
+
status == :registered
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
property_supported :created_on do
|
|
33
|
+
if content_for_scanner =~ /^Created on\.+:\s+(.+)\.\n/
|
|
34
|
+
parse_time(Regexp.last_match(1))
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
property_supported :expires_on do
|
|
39
|
+
if content_for_scanner =~ /^Expires on\.+:\s+(.+)\.\n/
|
|
40
|
+
parse_time(Regexp.last_match(1))
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
property_not_supported :updated_on
|
|
45
|
+
property_not_supported :registrar
|
|
46
|
+
property_not_supported :registrant_contacts
|
|
47
|
+
property_not_supported :admin_contacts
|
|
48
|
+
property_not_supported :technical_contacts
|
|
49
|
+
|
|
50
|
+
property_supported :nameservers do
|
|
51
|
+
section = content_for_scanner.slice(/\*\* Domain Servers:\n((?:.+\n)+?)\n/, 1)
|
|
52
|
+
return [] unless section
|
|
53
|
+
|
|
54
|
+
section.lines.map { |line| Parser::Nameserver.new(name: line.strip) }
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
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_icann_compliant'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.tucows.com server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisTucowsCom < BaseIcannCompliant
|
|
22
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
23
|
+
pattern_available: /^ No match for/,
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|