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,65 @@
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.rotld.ro 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 WhoisRotldRo < Base
26
+
27
+ property_supported :status do
28
+ if content_for_scanner =~ /Domain Status:\s(.+?)\n/
29
+ case ::Regexp.last_match(1).downcase
30
+ when "ok", "updateprohibited"
31
+ :registered
32
+ else
33
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
34
+ end
35
+ else
36
+ :available
37
+ end
38
+ end
39
+
40
+ property_supported :available? do
41
+ !!(content_for_scanner =~ /^% No entries found/)
42
+ end
43
+
44
+ property_supported :registered? do
45
+ !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_supported :nameservers do
57
+ content_for_scanner.scan(/Nameserver:\s+(.+)\n/).flatten.map do |name|
58
+ Parser::Nameserver.new(name: name)
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,32 @@
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.rrpproxy.net server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisRrpproxyNet < BaseIcannCompliant
22
+ self.scanner = Scanners::BaseIcannCompliant, {
23
+ pattern_available: /^No match for "[\w.]+"\.\n/,
24
+ }
25
+
26
+
27
+ property_not_supported :expires_on
28
+
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,48 @@
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.safenames.net server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisSafenamesNet < BaseIcannCompliant
22
+ self.scanner = Scanners::BaseIcannCompliant, {
23
+ pattern_available: /^No match for "[\w.]+"\.\n/,
24
+ }
25
+
26
+ property_supported :created_on do
27
+ node('Created Date') do |value|
28
+ parse_time(value)
29
+ end
30
+ end
31
+
32
+
33
+ private
34
+
35
+ def contact_organization_attribute(element)
36
+ value_for_property(element, 'Organisation')
37
+ end
38
+
39
+ def contact_address_attribute(element)
40
+ address = (1..2)
41
+ .map { |i| node("#{element} Address Line #{i}") }
42
+ .compact.join("\n").chomp
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ 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_icann_compliant'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.schlund.info server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisSchlundInfo < BaseIcannCompliant
22
+ self.scanner = Scanners::BaseIcannCompliant, {
23
+ pattern_available: /^Domain [\w.]+ is not registered here\.\n/,
24
+ }
25
+
26
+ property_supported :updated_on do
27
+ node('Updated Date') do |value|
28
+ parse_time(value)
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+ 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
+ require_relative 'registry_response_safety'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ #
18
+ # = whois.sgnic.sg parser
19
+ #
20
+ # Parser for the whois.sgnic.sg server.
21
+ #
22
+ # NOTE: This parser is just a stub and provides only a few basic methods
23
+ # to check for domain availability and get domain status.
24
+ # Please consider to contribute implementing missing methods.
25
+ # See WhoisNicIt parser for an explanation of all available methods
26
+ # and examples.
27
+ #
28
+ class WhoisSgnicSg < Base
29
+ include RegistryResponseSafety
30
+
31
+ property_supported :status do
32
+ content_for_scanner.scan(/^\s*Domain Status:\s+(.+?)\s*$/).flatten
33
+ end
34
+
35
+ property_supported :available? do
36
+ !!(content_for_scanner.strip =~ /\ADomain Not Found\z|\ANot found: \S+\z/i)
37
+ end
38
+
39
+ property_supported :registered? do
40
+ !available? && !status.empty?
41
+ end
42
+
43
+
44
+ property_supported :created_on do
45
+ if content_for_scanner =~ /^\s*Creation Date:\s+(.*)$/
46
+ parse_time(::Regexp.last_match(1))
47
+ end
48
+ end
49
+
50
+ property_not_supported :updated_on
51
+
52
+ property_supported :expires_on do
53
+ if content_for_scanner =~ /^\s*Expiration Date:\s+(.*)$/
54
+ parse_time(::Regexp.last_match(1))
55
+ end
56
+ end
57
+
58
+
59
+ property_supported :nameservers do
60
+ current = content_for_scanner.scan(/^\s*Name Server:\s+(.+?)\s*$/).flatten
61
+ if current.empty? && content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
62
+ values = case value = ::Regexp.last_match(1).downcase
63
+ # schema-1
64
+ when /^(?:\s+([\w.-]+)\n){2,}/
65
+ value.scan(/\s+([\w.-]+)\n/).map do |match|
66
+ { :name => match[0] }
67
+ end
68
+ when /^(?:\s+([\w.-]+)\s+\((.+)\)\n){2,}/
69
+ value.scan(/\s+([\w.-]+)\s+\((.+)\)\n/).map do |match|
70
+ { :name => match[0], :ipv4 => match[1] }
71
+ end
72
+ # schema-2
73
+ when /^(?:\s+([\w.-]+)){2,}/
74
+ value.strip.split(/\s+/).map do |name|
75
+ { :name => name }
76
+ end
77
+ else
78
+ Whois::Parser.bug!(ParserError, "Unknown nameservers format `#{value}'")
79
+ end
80
+
81
+ values.map do |params|
82
+ Parser::Nameserver.new(params)
83
+ end
84
+ else
85
+ current.map { |name| Parser::Nameserver.new(name: name) }
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,111 @@
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.sk-nic.sk parser
18
+ #
19
+ # Parser for the whois.sk-nic.sk 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 WhoisSkNicSk < Base
28
+
29
+ # == Values for Status
30
+ #
31
+ # @see https://www.sk-nic.sk/documents/stavy_domen.html
32
+ # @see http://www.inwx.de/en/sk-domain.html
33
+ #
34
+ property_supported :status do
35
+ if content_for_scanner =~ /^Domain(?:-|\s+)status:?\s+(.+)\n/i
36
+ case ::Regexp.last_match(1).downcase
37
+ # The domain is registered and paid.
38
+ when "dom_ok"
39
+ :registered
40
+ # The domain is registered and registration fee has to be payed (14 days).
41
+ # Replacement 14-day period for domain payment.
42
+ when "dom_ta"
43
+ :registered
44
+ # 28 days before the expiration of one year's notice is sent to the first call for an extension of domains.
45
+ # The domain is still fully functional (14 days).
46
+ when "dom_dakt"
47
+ :registered
48
+ # 14 days before the expiration of one year's notice is sent to the second call to the extension of domains.
49
+ # The domain is still fully functional (14 days).
50
+ when "dom_warn"
51
+ :registered
52
+ # The domain is expired and has not been renewed (14 days).
53
+ when "dom_lnot"
54
+ :registered
55
+ when "dom_exp"
56
+ :registered
57
+ # The domain losts its registrar (28 days).
58
+ when "dom_held"
59
+ :redemption
60
+ else
61
+ # Current responses expose EPP status values instead of the
62
+ # historical DOM_* values. Unknown values are not registration
63
+ # evidence and must not fall through to :registered.
64
+ epp_status = ::Regexp.last_match(1).split(',').map { |value| value.strip.downcase }
65
+ if epp_status.all? do |value|
66
+ value.match?(/\A(?:ok|active|inactive|pending(?:create|delete|renew|transfer|update)|(?:client|server)(?:create|delete|hold|renew|transfer|update)(?:prohibited)?)\z/)
67
+ end
68
+ :registered
69
+ else
70
+ :unknown
71
+ end
72
+ end
73
+ else
74
+ :available
75
+ end
76
+ end
77
+
78
+ property_supported :available? do
79
+ !!(content_for_scanner =~ /^(?:Not found|Domain not found)\.?\s*$/i)
80
+ end
81
+
82
+ property_supported :registered? do
83
+ [:registered, :redemption].include?(status)
84
+ end
85
+
86
+
87
+ property_not_supported :created_on
88
+
89
+ property_supported :updated_on do
90
+ if content_for_scanner =~ /^Last-update\s+(.+)\n/
91
+ parse_time(::Regexp.last_match(1))
92
+ end
93
+ end
94
+
95
+ property_supported :expires_on do
96
+ if content_for_scanner =~ /^Valid-date\s+(.+)\n/
97
+ parse_time(::Regexp.last_match(1))
98
+ end
99
+ end
100
+
101
+
102
+ property_supported :nameservers do
103
+ content_for_scanner.scan(/(?:dns_name|Nameserver:)\s+(.+)\n/i).flatten.map do |name|
104
+ Parser::Nameserver.new(:name => name)
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+ end
@@ -0,0 +1,131 @@
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.smallregistry.net.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.smallregistry.net server.
18
+ #
19
+ # @author Mathieu Arnold <m@absolight.fr>
20
+ #
21
+ class WhoisSmallregistryNet < Base
22
+ include Scanners::Scannable
23
+
24
+ self.scanner = Scanners::WhoisSmallregistryNet
25
+
26
+
27
+ property_supported :disclaimer do
28
+ node("field:disclaimer") do |alpha|
29
+ alpha.scan(/# (.+)\n/).flatten.map do |beta|
30
+ token = beta.strip
31
+ token.gsub!(/\s+/, " ")
32
+ end.join(" ").gsub!(/(\s{2})/, "\n")
33
+ end
34
+ end
35
+
36
+
37
+ property_supported :domain do
38
+ node("name")
39
+ end
40
+
41
+ property_not_supported :domain_id
42
+
43
+
44
+ property_supported :status do
45
+ if node?("status:available")
46
+ :available
47
+ else
48
+ case node("status")
49
+ when "ACTIVE"
50
+ :registered
51
+ else
52
+ Whois::Parser.bug!(ParserError, "Unknown status `#{node('field:status')}'.")
53
+ end
54
+ end
55
+ end
56
+
57
+ property_supported :available? do
58
+ status == :available
59
+ end
60
+
61
+ property_supported :registered? do
62
+ !available?
63
+ end
64
+
65
+
66
+ property_supported :created_on do
67
+ node("created") { |str| parse_time(str) }
68
+ end
69
+
70
+ property_supported :updated_on do
71
+ node("updated") { |str| parse_time(str) }
72
+ end
73
+
74
+ property_supported :expires_on do
75
+ node("expired") { |str| parse_time(str) }
76
+ end
77
+
78
+
79
+ property_supported :registrar do
80
+ node("registrar") do |hash|
81
+ v1, v2, v3, v4 = hash.values_at('nil', 'name', 'name', 'web')
82
+ Parser::Registrar.new(
83
+ :id => v1,
84
+ :name => v2,
85
+ :organization => v3,
86
+ :url => v4
87
+ )
88
+ end
89
+ end
90
+
91
+ property_supported :registrant_contacts do
92
+ build_contact("registrant", Parser::Contact::TYPE_REGISTRANT)
93
+ end
94
+
95
+ property_supported :admin_contacts do
96
+ build_contact("administrative_contact", Parser::Contact::TYPE_ADMINISTRATIVE)
97
+ end
98
+
99
+ property_supported :technical_contacts do
100
+ build_contact("technical_contact", Parser::Contact::TYPE_TECHNICAL)
101
+ end
102
+
103
+
104
+ property_supported :nameservers do
105
+ Array.wrap(node("name_servers")).map do |hash|
106
+ Parser::Nameserver.new(:name => hash)
107
+ end
108
+ end
109
+
110
+
111
+ private
112
+
113
+ def build_contact(element, type)
114
+ node(element) do |hash|
115
+ Parser::Contact.new(
116
+ :type => type,
117
+ :id => hash['nic-handle'],
118
+ :name => hash['name'],
119
+ :organization => hash['company'],
120
+ :address => hash['address'],
121
+ :phone => hash['phone'],
122
+ :fax => hash['fax'],
123
+ :email => hash['mobile'],
124
+ :updated_on => parse_time(hash['updated'])
125
+ )
126
+ end
127
+ end
128
+
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,177 @@
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.srs.net.nz.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.srs.net.nz server.
18
+ #
19
+ # @see Whois::Parsers::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisSrsNetNz < Base
23
+ include Scanners::Scannable
24
+
25
+ self.scanner = Scanners::WhoisSrsNetNz
26
+
27
+
28
+ property_supported :domain do
29
+ node("domain_name") || content_for_scanner[/^Domain Name:\s*(.+)$/i, 1]
30
+ end
31
+
32
+ property_not_supported :domain_id
33
+
34
+
35
+ # @see http://dnc.org.nz/content/srs-whois-spec-1.0.html
36
+ property_supported :status do
37
+ value = node("query_status")
38
+ value ||= if content_for_scanner.match?(/^Not found:\s/i)
39
+ "220 Available"
40
+ elsif content_for_scanner.match?(/^Domain Name:\s/i) &&
41
+ content_for_scanner.match?(/^Domain Status:\s+\S+/i)
42
+ "200 Active"
43
+ end
44
+
45
+ if value
46
+ case value.downcase
47
+ when "200 active"
48
+ :registered
49
+ # The domain is no longer active but is in the period prior
50
+ # to being released for general registrations
51
+ when "210 pendingrelease"
52
+ :redemption
53
+ when "220 available"
54
+ :available
55
+ when "404 request denied"
56
+ :error
57
+ when /invalid characters/
58
+ :invalid
59
+ else
60
+ Whois::Parser.bug!(ParserError, "Unknown status `#{value}'.")
61
+ end
62
+ else
63
+ :unknown
64
+ end
65
+ end
66
+
67
+ property_supported :available? do
68
+ status == :available
69
+ end
70
+
71
+ property_supported :registered? do
72
+ [:registered, :redemption].include?(status)
73
+ end
74
+
75
+
76
+ property_supported :created_on do
77
+ node("domain_dateregistered") { |value| parse_time(value) }
78
+ end
79
+
80
+ property_supported :updated_on do
81
+ node("domain_datelastmodified") { |value| parse_time(value) }
82
+ end
83
+
84
+ property_supported :expires_on do
85
+ node("domain_datebilleduntil") { |value| parse_time(value) }
86
+ end
87
+
88
+
89
+ property_supported :registrar do
90
+ node("registrar_name") do |value|
91
+ Parser::Registrar.new(
92
+ name: value
93
+ )
94
+ end
95
+ end
96
+
97
+ property_supported :registrant_contacts do
98
+ build_contact("registrant", Parser::Contact::TYPE_REGISTRANT)
99
+ end
100
+
101
+ property_supported :admin_contacts do
102
+ build_contact("admin", Parser::Contact::TYPE_ADMINISTRATIVE)
103
+ end
104
+
105
+ property_supported :technical_contacts do
106
+ build_contact("technical", Parser::Contact::TYPE_TECHNICAL)
107
+ end
108
+
109
+
110
+ property_supported :nameservers do
111
+ nameservers = (1..4).map do |i|
112
+ node("ns_name_0#{i}") { |value| Parser::Nameserver.new(name: value) }
113
+ end.compact
114
+
115
+ if nameservers.empty?
116
+ content_for_scanner.scan(/^Name Server:\s*(.+)$/i).map do |name|
117
+ Parser::Nameserver.new(name: name.first)
118
+ end
119
+ else
120
+ nameservers
121
+ end
122
+ end
123
+
124
+
125
+ # Checks whether the response has been throttled.
126
+ #
127
+ # @return [Boolean]
128
+ #
129
+ # @example
130
+ # query_status: 440 Request Denied
131
+ #
132
+ def response_throttled?
133
+ cached_properties_fetch(:response_throttled?) do
134
+ node("query_status") == "440 Request Denied"
135
+ end
136
+ end
137
+
138
+
139
+ # NEWPROPERTY
140
+ def valid?
141
+ cached_properties_fetch(:valid?) do
142
+ !invalid?
143
+ end
144
+ end
145
+
146
+ # NEWPROPERTY
147
+ def invalid?
148
+ cached_properties_fetch(:invalid?) do
149
+ status == :invalid
150
+ end
151
+ end
152
+
153
+
154
+ private
155
+
156
+ def build_contact(element, type)
157
+ node("#{element}_contact_name") do
158
+ Parser::Contact.new(
159
+ type: type,
160
+ id: nil,
161
+ name: node("#{element}_contact_name"),
162
+ address: node("#{element}_contact_address1"),
163
+ city: node("#{element}_contact_city"),
164
+ zip: node("#{element}_contact_postalcode"),
165
+ state: node("#{element}_contact_province"),
166
+ country: node("#{element}_contact_country"),
167
+ phone: node("#{element}_contact_phone"),
168
+ fax: node("#{element}_contact_fax"),
169
+ email: node("#{element}_contact_email")
170
+ )
171
+ end
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+ end