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.
Files changed (354) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +80 -0
  3. data/CODE_OF_CONDUCT.md +30 -0
  4. data/CONTRIBUTING.md +80 -0
  5. data/GOVERNANCE.md +59 -0
  6. data/LICENSE.txt +22 -0
  7. data/MAINTAINERS.md +44 -0
  8. data/README.md +123 -0
  9. data/RELEASING.md +43 -0
  10. data/ROADMAP.md +59 -0
  11. data/SECURITY.md +41 -0
  12. data/lib/whois/parser/contact.rb +56 -0
  13. data/lib/whois/parser/errors.rb +46 -0
  14. data/lib/whois/parser/nameserver.rb +39 -0
  15. data/lib/whois/parser/registrar.rb +25 -0
  16. data/lib/whois/parser/super_struct.rb +50 -0
  17. data/lib/whois/parser/version.rb +6 -0
  18. data/lib/whois/parser.rb +447 -0
  19. data/lib/whois/parser_extensions/whois.rb +83 -0
  20. data/lib/whois/parser_extensions/whois_parser.rb +24 -0
  21. data/lib/whois/parser_extensions/whois_record.rb +236 -0
  22. data/lib/whois/parser_extensions.rb +3 -0
  23. data/lib/whois/parsers/base.rb +413 -0
  24. data/lib/whois/parsers/base_afilias.rb +144 -0
  25. data/lib/whois/parsers/base_afilias2.rb +145 -0
  26. data/lib/whois/parsers/base_cocca.rb +97 -0
  27. data/lib/whois/parsers/base_cocca2.rb +93 -0
  28. data/lib/whois/parsers/base_icann_compliant.rb +158 -0
  29. data/lib/whois/parsers/base_icb.rb +51 -0
  30. data/lib/whois/parsers/base_iisse.rb +113 -0
  31. data/lib/whois/parsers/base_nic_fr.rb +175 -0
  32. data/lib/whois/parsers/base_shared1.rb +112 -0
  33. data/lib/whois/parsers/base_shared2.rb +130 -0
  34. data/lib/whois/parsers/base_shared3.rb +131 -0
  35. data/lib/whois/parsers/base_unsupported_registry.rb +30 -0
  36. data/lib/whois/parsers/base_verisign.rb +106 -0
  37. data/lib/whois/parsers/base_whoisd.rb +150 -0
  38. data/lib/whois/parsers/blank.rb +35 -0
  39. data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
  40. data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
  41. data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
  42. data/lib/whois/parsers/coza-whois.registry.net.za.rb +25 -0
  43. data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
  44. data/lib/whois/parsers/example.rb +163 -0
  45. data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
  46. data/lib/whois/parsers/kero.yachay.pe.rb +97 -0
  47. data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
  48. data/lib/whois/parsers/registry_response_safety.rb +29 -0
  49. data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
  50. data/lib/whois/parsers/vunic.vu.rb +11 -0
  51. data/lib/whois/parsers/whois.1und1.info.rb +28 -0
  52. data/lib/whois/parsers/whois.35.com.rb +23 -0
  53. data/lib/whois/parsers/whois.aeda.net.ae.rb +65 -0
  54. data/lib/whois/parsers/whois.aero.rb +58 -0
  55. data/lib/whois/parsers/whois.afilias-grs.info.rb +33 -0
  56. data/lib/whois/parsers/whois.afilias-srs.net.rb +16 -0
  57. data/lib/whois/parsers/whois.afilias.net.rb +41 -0
  58. data/lib/whois/parsers/whois.amnic.net.rb +81 -0
  59. data/lib/whois/parsers/whois.ascio.com.rb +29 -0
  60. data/lib/whois/parsers/whois.ati.tn.rb +120 -0
  61. data/lib/whois/parsers/whois.auda.org.au.rb +12 -0
  62. data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
  63. data/lib/whois/parsers/whois.ax.rb +64 -0
  64. data/lib/whois/parsers/whois.biz.rb +34 -0
  65. data/lib/whois/parsers/whois.bnnic.bn.rb +77 -0
  66. data/lib/whois/parsers/whois.cat.rb +75 -0
  67. data/lib/whois/parsers/whois.cctld.by.rb +98 -0
  68. data/lib/whois/parsers/whois.cctld.uz.rb +83 -0
  69. data/lib/whois/parsers/whois.cdmon.com.rb +23 -0
  70. data/lib/whois/parsers/whois.centralnic.com.rb +144 -0
  71. data/lib/whois/parsers/whois.cira.ca.rb +227 -0
  72. data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
  73. data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
  74. data/lib/whois/parsers/whois.co.ca.rb +74 -0
  75. data/lib/whois/parsers/whois.co.pl.rb +82 -0
  76. data/lib/whois/parsers/whois.co.ug.rb +93 -0
  77. data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
  78. data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
  79. data/lib/whois/parsers/whois.denic.de.rb +164 -0
  80. data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
  81. data/lib/whois/parsers/whois.dns.be.rb +120 -0
  82. data/lib/whois/parsers/whois.dns.hr.rb +119 -0
  83. data/lib/whois/parsers/whois.dns.lu.rb +125 -0
  84. data/lib/whois/parsers/whois.dns.pl.rb +151 -0
  85. data/lib/whois/parsers/whois.dns.pt.rb +92 -0
  86. data/lib/whois/parsers/whois.domain-registry.nl.rb +133 -0
  87. data/lib/whois/parsers/whois.domainregistry.ie.rb +128 -0
  88. data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
  89. data/lib/whois/parsers/whois.donuts.co.rb +59 -0
  90. data/lib/whois/parsers/whois.dot.cf.rb +71 -0
  91. data/lib/whois/parsers/whois.dot.tk.rb +70 -0
  92. data/lib/whois/parsers/whois.dotgov.gov.rb +58 -0
  93. data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
  94. data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
  95. data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
  96. data/lib/whois/parsers/whois.educause.edu.rb +198 -0
  97. data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
  98. data/lib/whois/parsers/whois.enom.com.rb +34 -0
  99. data/lib/whois/parsers/whois.eu.org.rb +58 -0
  100. data/lib/whois/parsers/whois.eu.rb +130 -0
  101. data/lib/whois/parsers/whois.fi.rb +119 -0
  102. data/lib/whois/parsers/whois.gandi.net.rb +36 -0
  103. data/lib/whois/parsers/whois.gg.rb +93 -0
  104. data/lib/whois/parsers/whois.godaddy.com.rb +42 -0
  105. data/lib/whois/parsers/whois.gov.za.rb +60 -0
  106. data/lib/whois/parsers/whois.hkirc.hk.rb +71 -0
  107. data/lib/whois/parsers/whois.iana.org.rb +102 -0
  108. data/lib/whois/parsers/whois.id.rb +26 -0
  109. data/lib/whois/parsers/whois.iedr.ie.rb +18 -0
  110. data/lib/whois/parsers/whois.iis.nu.rb +46 -0
  111. data/lib/whois/parsers/whois.iis.se.rb +26 -0
  112. data/lib/whois/parsers/whois.in.ua.rb +75 -0
  113. data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
  114. data/lib/whois/parsers/whois.isnic.is.rb +70 -0
  115. data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
  116. data/lib/whois/parsers/whois.ja.net.rb +75 -0
  117. data/lib/whois/parsers/whois.je.rb +75 -0
  118. data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
  119. data/lib/whois/parsers/whois.kenic.or.ke.rb +93 -0
  120. data/lib/whois/parsers/whois.kg.rb +77 -0
  121. data/lib/whois/parsers/whois.kr.rb +79 -0
  122. data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
  123. data/lib/whois/parsers/whois.marnet.mk.rb +20 -0
  124. data/lib/whois/parsers/whois.monic.mo.rb +83 -0
  125. data/lib/whois/parsers/whois.museum.rb +79 -0
  126. data/lib/whois/parsers/whois.mx.rb +16 -0
  127. data/lib/whois/parsers/whois.mynic.my.rb +86 -0
  128. data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
  129. data/lib/whois/parsers/whois.nc.rb +122 -0
  130. data/lib/whois/parsers/whois.netcom.cm.rb +54 -0
  131. data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
  132. data/lib/whois/parsers/whois.nic.ac.rb +33 -0
  133. data/lib/whois/parsers/whois.nic.af.rb +32 -0
  134. data/lib/whois/parsers/whois.nic.ag.rb +33 -0
  135. data/lib/whois/parsers/whois.nic.ai.rb +62 -0
  136. data/lib/whois/parsers/whois.nic.ar.rb +54 -0
  137. data/lib/whois/parsers/whois.nic.art.rb +9 -0
  138. data/lib/whois/parsers/whois.nic.as.rb +73 -0
  139. data/lib/whois/parsers/whois.nic.asia.rb +112 -0
  140. data/lib/whois/parsers/whois.nic.at.rb +68 -0
  141. data/lib/whois/parsers/whois.nic.best.rb +9 -0
  142. data/lib/whois/parsers/whois.nic.bj.rb +127 -0
  143. data/lib/whois/parsers/whois.nic.bo.rb +82 -0
  144. data/lib/whois/parsers/whois.nic.business.rb +8 -0
  145. data/lib/whois/parsers/whois.nic.cat.rb +23 -0
  146. data/lib/whois/parsers/whois.nic.cd.rb +38 -0
  147. data/lib/whois/parsers/whois.nic.cfd.rb +9 -0
  148. data/lib/whois/parsers/whois.nic.ch.rb +109 -0
  149. data/lib/whois/parsers/whois.nic.chat.rb +10 -0
  150. data/lib/whois/parsers/whois.nic.ci.rb +74 -0
  151. data/lib/whois/parsers/whois.nic.cl.rb +76 -0
  152. data/lib/whois/parsers/whois.nic.cloud.rb +15 -0
  153. data/lib/whois/parsers/whois.nic.club.rb +15 -0
  154. data/lib/whois/parsers/whois.nic.co.rb +25 -0
  155. data/lib/whois/parsers/whois.nic.college.rb +25 -0
  156. data/lib/whois/parsers/whois.nic.coop.rb +70 -0
  157. data/lib/whois/parsers/whois.nic.cr.rb +64 -0
  158. data/lib/whois/parsers/whois.nic.cx.rb +25 -0
  159. data/lib/whois/parsers/whois.nic.cz.rb +42 -0
  160. data/lib/whois/parsers/whois.nic.delivery.rb +9 -0
  161. data/lib/whois/parsers/whois.nic.design.rb +30 -0
  162. data/lib/whois/parsers/whois.nic.direct.rb +9 -0
  163. data/lib/whois/parsers/whois.nic.dm.rb +39 -0
  164. data/lib/whois/parsers/whois.nic.domains.rb +8 -0
  165. data/lib/whois/parsers/whois.nic.dz.rb +67 -0
  166. data/lib/whois/parsers/whois.nic.ec.rb +44 -0
  167. data/lib/whois/parsers/whois.nic.es.rb +114 -0
  168. data/lib/whois/parsers/whois.nic.fm.rb +18 -0
  169. data/lib/whois/parsers/whois.nic.fo.rb +69 -0
  170. data/lib/whois/parsers/whois.nic.fr.rb +25 -0
  171. data/lib/whois/parsers/whois.nic.fun.rb +13 -0
  172. data/lib/whois/parsers/whois.nic.games.rb +9 -0
  173. data/lib/whois/parsers/whois.nic.gd.rb +31 -0
  174. data/lib/whois/parsers/whois.nic.gl.rb +49 -0
  175. data/lib/whois/parsers/whois.nic.group.rb +8 -0
  176. data/lib/whois/parsers/whois.nic.gs.rb +31 -0
  177. data/lib/whois/parsers/whois.nic.hn.rb +49 -0
  178. data/lib/whois/parsers/whois.nic.host.rb +37 -0
  179. data/lib/whois/parsers/whois.nic.ht.rb +25 -0
  180. data/lib/whois/parsers/whois.nic.hu.rb +78 -0
  181. data/lib/whois/parsers/whois.nic.icu.rb +12 -0
  182. data/lib/whois/parsers/whois.nic.im.rb +66 -0
  183. data/lib/whois/parsers/whois.nic.ink.rb +12 -0
  184. data/lib/whois/parsers/whois.nic.io.rb +52 -0
  185. data/lib/whois/parsers/whois.nic.ir.rb +70 -0
  186. data/lib/whois/parsers/whois.nic.it.rb +159 -0
  187. data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
  188. data/lib/whois/parsers/whois.nic.ki.rb +25 -0
  189. data/lib/whois/parsers/whois.nic.kz.rb +69 -0
  190. data/lib/whois/parsers/whois.nic.la.rb +32 -0
  191. data/lib/whois/parsers/whois.nic.li.rb +68 -0
  192. data/lib/whois/parsers/whois.nic.life.rb +10 -0
  193. data/lib/whois/parsers/whois.nic.link.rb +13 -0
  194. data/lib/whois/parsers/whois.nic.lk.rb +109 -0
  195. data/lib/whois/parsers/whois.nic.ltd.rb +8 -0
  196. data/lib/whois/parsers/whois.nic.lv.rb +69 -0
  197. data/lib/whois/parsers/whois.nic.ly.rb +78 -0
  198. data/lib/whois/parsers/whois.nic.market.rb +8 -0
  199. data/lib/whois/parsers/whois.nic.md.rb +101 -0
  200. data/lib/whois/parsers/whois.nic.me.rb +85 -0
  201. data/lib/whois/parsers/whois.nic.mg.rb +35 -0
  202. data/lib/whois/parsers/whois.nic.ms.rb +37 -0
  203. data/lib/whois/parsers/whois.nic.mu.rb +25 -0
  204. data/lib/whois/parsers/whois.nic.mw.rb +33 -0
  205. data/lib/whois/parsers/whois.nic.mx.rb +79 -0
  206. data/lib/whois/parsers/whois.nic.name.rb +68 -0
  207. data/lib/whois/parsers/whois.nic.net.bw.rb +11 -0
  208. data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
  209. data/lib/whois/parsers/whois.nic.net.sa.rb +74 -0
  210. data/lib/whois/parsers/whois.nic.net.sb.rb +35 -0
  211. data/lib/whois/parsers/whois.nic.news.rb +8 -0
  212. data/lib/whois/parsers/whois.nic.nf.rb +50 -0
  213. data/lib/whois/parsers/whois.nic.ninja.rb +8 -0
  214. data/lib/whois/parsers/whois.nic.one.rb +41 -0
  215. data/lib/whois/parsers/whois.nic.online.rb +39 -0
  216. data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
  217. data/lib/whois/parsers/whois.nic.plus.rb +8 -0
  218. data/lib/whois/parsers/whois.nic.pm.rb +25 -0
  219. data/lib/whois/parsers/whois.nic.pr.rb +84 -0
  220. data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
  221. data/lib/whois/parsers/whois.nic.pub.rb +8 -0
  222. data/lib/whois/parsers/whois.nic.pw.rb +25 -0
  223. data/lib/whois/parsers/whois.nic.re.rb +29 -0
  224. data/lib/whois/parsers/whois.nic.rocks.rb +8 -0
  225. data/lib/whois/parsers/whois.nic.run.rb +8 -0
  226. data/lib/whois/parsers/whois.nic.sh.rb +25 -0
  227. data/lib/whois/parsers/whois.nic.site.rb +62 -0
  228. data/lib/whois/parsers/whois.nic.sl.rb +80 -0
  229. data/lib/whois/parsers/whois.nic.sm.rb +84 -0
  230. data/lib/whois/parsers/whois.nic.sn.rb +119 -0
  231. data/lib/whois/parsers/whois.nic.so.rb +71 -0
  232. data/lib/whois/parsers/whois.nic.software.rb +9 -0
  233. data/lib/whois/parsers/whois.nic.solutions.rb +9 -0
  234. data/lib/whois/parsers/whois.nic.space.rb +25 -0
  235. data/lib/whois/parsers/whois.nic.st.rb +76 -0
  236. data/lib/whois/parsers/whois.nic.store.rb +15 -0
  237. data/lib/whois/parsers/whois.nic.studio.rb +8 -0
  238. data/lib/whois/parsers/whois.nic.systems.rb +8 -0
  239. data/lib/whois/parsers/whois.nic.tc.rb +25 -0
  240. data/lib/whois/parsers/whois.nic.tech.rb +33 -0
  241. data/lib/whois/parsers/whois.nic.technology.rb +8 -0
  242. data/lib/whois/parsers/whois.nic.tel.rb +25 -0
  243. data/lib/whois/parsers/whois.nic.tg.rb +49 -0
  244. data/lib/whois/parsers/whois.nic.tl.rb +32 -0
  245. data/lib/whois/parsers/whois.nic.tm.rb +101 -0
  246. data/lib/whois/parsers/whois.nic.today.rb +8 -0
  247. data/lib/whois/parsers/whois.nic.tools.rb +9 -0
  248. data/lib/whois/parsers/whois.nic.tr.rb +159 -0
  249. data/lib/whois/parsers/whois.nic.travel.rb +25 -0
  250. data/lib/whois/parsers/whois.nic.tv.rb +15 -0
  251. data/lib/whois/parsers/whois.nic.uk.rb +177 -0
  252. data/lib/whois/parsers/whois.nic.us.rb +25 -0
  253. data/lib/whois/parsers/whois.nic.ve.rb +94 -0
  254. data/lib/whois/parsers/whois.nic.vg.rb +16 -0
  255. data/lib/whois/parsers/whois.nic.video.rb +10 -0
  256. data/lib/whois/parsers/whois.nic.vip.rb +13 -0
  257. data/lib/whois/parsers/whois.nic.website.rb +9 -0
  258. data/lib/whois/parsers/whois.nic.wf.rb +29 -0
  259. data/lib/whois/parsers/whois.nic.win.rb +10 -0
  260. data/lib/whois/parsers/whois.nic.work.rb +10 -0
  261. data/lib/whois/parsers/whois.nic.works.rb +8 -0
  262. data/lib/whois/parsers/whois.nic.world.rb +10 -0
  263. data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
  264. data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
  265. data/lib/whois/parsers/whois.nixiregistry.in.rb +15 -0
  266. data/lib/whois/parsers/whois.norid.no.rb +61 -0
  267. data/lib/whois/parsers/whois.ovh.com.rb +12 -0
  268. data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
  269. data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
  270. data/lib/whois/parsers/whois.pir.org.rb +90 -0
  271. data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
  272. data/lib/whois/parsers/whois.register.bg.rb +86 -0
  273. data/lib/whois/parsers/whois.register.com.rb +30 -0
  274. data/lib/whois/parsers/whois.register.si.rb +73 -0
  275. data/lib/whois/parsers/whois.registre.ma.rb +65 -0
  276. data/lib/whois/parsers/whois.registro.br.rb +126 -0
  277. data/lib/whois/parsers/whois.registry.co.rb +19 -0
  278. data/lib/whois/parsers/whois.registry.gy.rb +32 -0
  279. data/lib/whois/parsers/whois.registry.hm.rb +72 -0
  280. data/lib/whois/parsers/whois.registry.om.rb +40 -0
  281. data/lib/whois/parsers/whois.registry.qa.rb +25 -0
  282. data/lib/whois/parsers/whois.ricta.org.rw.rb +16 -0
  283. data/lib/whois/parsers/whois.ripe.net.rb +68 -0
  284. data/lib/whois/parsers/whois.rnids.rs.rb +135 -0
  285. data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
  286. data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
  287. data/lib/whois/parsers/whois.safenames.net.rb +48 -0
  288. data/lib/whois/parsers/whois.schlund.info.rb +34 -0
  289. data/lib/whois/parsers/whois.sgnic.sg.rb +92 -0
  290. data/lib/whois/parsers/whois.sk-nic.sk.rb +111 -0
  291. data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
  292. data/lib/whois/parsers/whois.srs.net.nz.rb +177 -0
  293. data/lib/whois/parsers/whois.sx.rb +127 -0
  294. data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
  295. data/lib/whois/parsers/whois.thnic.co.th.rb +80 -0
  296. data/lib/whois/parsers/whois.tld.ee.rb +134 -0
  297. data/lib/whois/parsers/whois.tld.sy.rb +34 -0
  298. data/lib/whois/parsers/whois.tonic.to.rb +100 -0
  299. data/lib/whois/parsers/whois.tonicregistry.to.rb +12 -0
  300. data/lib/whois/parsers/whois.trabis.gov.tr.rb +58 -0
  301. data/lib/whois/parsers/whois.tucows.com.rb +28 -0
  302. data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
  303. data/lib/whois/parsers/whois.tznic.or.tz.rb +36 -0
  304. data/lib/whois/parsers/whois.ua.rb +242 -0
  305. data/lib/whois/parsers/whois.udag.net.rb +28 -0
  306. data/lib/whois/parsers/whois.uniregistry.net.rb +71 -0
  307. data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
  308. data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
  309. data/lib/whois/parsers/whois.vunic.vu.rb +14 -0
  310. data/lib/whois/parsers/whois.website.ws.rb +79 -0
  311. data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
  312. data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
  313. data/lib/whois/parsers/whois.za.net.rb +72 -0
  314. data/lib/whois/parsers/whois.za.org.rb +72 -0
  315. data/lib/whois/parsers/whois.zicta.zm.rb +13 -0
  316. data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
  317. data/lib/whois/parsers/za_central_registry.rb +80 -0
  318. data/lib/whois/parsers.rb +1 -0
  319. data/lib/whois/safe_record.rb +170 -0
  320. data/lib/whois/scanners/base.rb +114 -0
  321. data/lib/whois/scanners/base_afilias.rb +51 -0
  322. data/lib/whois/scanners/base_cocca2.rb +58 -0
  323. data/lib/whois/scanners/base_icann_compliant.rb +45 -0
  324. data/lib/whois/scanners/base_iisse.rb +36 -0
  325. data/lib/whois/scanners/base_shared1.rb +31 -0
  326. data/lib/whois/scanners/base_shared2.rb +35 -0
  327. data/lib/whois/scanners/base_shared3.rb +37 -0
  328. data/lib/whois/scanners/base_whoisd.rb +44 -0
  329. data/lib/whois/scanners/iana.rb +89 -0
  330. data/lib/whois/scanners/scannable.rb +65 -0
  331. data/lib/whois/scanners/verisign.rb +100 -0
  332. data/lib/whois/scanners/whois.ati.tn.rb +32 -0
  333. data/lib/whois/scanners/whois.audns.net.au.rb +32 -0
  334. data/lib/whois/scanners/whois.cctld.by.rb +35 -0
  335. data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
  336. data/lib/whois/scanners/whois.cira.ca.rb +72 -0
  337. data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
  338. data/lib/whois/scanners/whois.denic.de.rb +103 -0
  339. data/lib/whois/scanners/whois.dns.hr.rb +30 -0
  340. data/lib/whois/scanners/whois.domainregistry.ie.rb +51 -0
  341. data/lib/whois/scanners/whois.fi.rb +66 -0
  342. data/lib/whois/scanners/whois.nc.rb +32 -0
  343. data/lib/whois/scanners/whois.nic.cz.rb +22 -0
  344. data/lib/whois/scanners/whois.nic.it.rb +92 -0
  345. data/lib/whois/scanners/whois.pir.org.rb +17 -0
  346. data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
  347. data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
  348. data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
  349. data/lib/whois/scanners/whois.sx.rb +37 -0
  350. data/lib/whois/scanners/whois.tld.ee.rb +47 -0
  351. data/lib/whois/scanners/whois.tucows.com.rb +23 -0
  352. data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
  353. data/lib/whois-parser.rb +10 -0
  354. 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