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,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