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,198 @@
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.educause.edu 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
+ # See WhoisNicIt parser for an explanation of all available methods
22
+ # and examples.
23
+ #
24
+ class WhoisEducauseEdu < Base
25
+
26
+ property_supported :disclaimer do
27
+ if content_for_scanner =~ /\A((.*\n)+)\n--------------------------\n/
28
+ ::Regexp.last_match(1)
29
+ else
30
+ Whois::Parser.bug!(ParserError, "Unable to parse disclaimer.")
31
+ end
32
+ end
33
+
34
+
35
+ property_supported :domain do
36
+ if content_for_scanner =~ /Domain Name:\s(.+?)\n/
37
+ ::Regexp.last_match(1).downcase
38
+ end
39
+ end
40
+
41
+ property_not_supported :domain_id
42
+
43
+
44
+ property_supported :status do
45
+ if available?
46
+ :available
47
+ else
48
+ :registered
49
+ end
50
+ end
51
+
52
+ property_supported :available? do
53
+ !!(content_for_scanner =~ /(?:No Match|The domain name you requested was not found in our database\.)/)
54
+ end
55
+
56
+ property_supported :registered? do
57
+ !available?
58
+ end
59
+
60
+
61
+ property_supported :created_on do
62
+ if content_for_scanner =~ /Domain record activated:\s+(.+?)\n/
63
+ parse_time(::Regexp.last_match(1))
64
+ end
65
+ end
66
+
67
+ property_supported :updated_on do
68
+ if content_for_scanner =~ /Domain record last updated:\s+(.+?)\n/
69
+ parse_time(::Regexp.last_match(1))
70
+ end
71
+ end
72
+
73
+ property_supported :expires_on do
74
+ if content_for_scanner =~ /Domain expires:\s+(.+?)\n/
75
+ parse_time(::Regexp.last_match(1))
76
+ end
77
+ end
78
+
79
+
80
+ property_not_supported :registrar
81
+
82
+ property_supported :registrant_contacts do
83
+ build_contact_registrant("Registrant", Parser::Contact::TYPE_REGISTRANT)
84
+ end
85
+
86
+ property_supported :admin_contacts do
87
+ build_contact("Administrative Contact", Parser::Contact::TYPE_ADMINISTRATIVE)
88
+ end
89
+
90
+ property_supported :technical_contacts do
91
+ build_contact("Technical Contact", Parser::Contact::TYPE_TECHNICAL)
92
+ end
93
+
94
+
95
+ property_supported :nameservers do
96
+ if content_for_scanner =~ /Name Servers: \n((.+\n)+)\n/
97
+ ::Regexp.last_match(1).split("\n").map do |line|
98
+ name, ipv4 = line.strip.split(/\s+/)
99
+ Parser::Nameserver.new(:name => name.downcase, :ipv4 => ipv4)
100
+ end
101
+ end
102
+ end
103
+
104
+
105
+ private
106
+
107
+ # [NAME] | EMPTY
108
+ # [ROLE]?
109
+ # [ORGANIZATION]
110
+ # [ADDRESS]*
111
+ # [CITY, ST ZIP]
112
+ # [COUNTRY]
113
+ # [PHONE]
114
+ # [EMAIL]
115
+ def build_contact(element, type)
116
+ if content_for_scanner =~ /#{element}:\n+((.+\n)+)\n/
117
+ lines = ::Regexp.last_match(1).split("\n").map(&:strip)
118
+ items = lines.dup
119
+
120
+ # Extract variables
121
+
122
+ # items.shift if items[0].strip == ''
123
+
124
+ v13 = items.delete_at(-1)
125
+
126
+ v11 = items.delete_at(-1)
127
+
128
+ v9 = items.delete_at(-1)
129
+
130
+ v6 = items.delete_at(-1)
131
+ if v6 =~ /([^\n,]+),\s([A-Z]{2})(?:\s(\d{5}(?:-\d{4})?))/
132
+ v6, v7, v8 = ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3)
133
+ end
134
+
135
+ v4 = []
136
+ v4 << items.shift until items[0] =~ /^\d+/ || items.empty?
137
+ v4 = v4.join("\n")
138
+
139
+ v5 = items.empty? ? nil : items.join("\n")
140
+
141
+ # Create Contact
142
+
143
+ Parser::Contact.new(
144
+ :type => type,
145
+ :name => v4,
146
+ :organization => nil,
147
+ :address => v5,
148
+ :city => v6,
149
+ :state => v7,
150
+ :zip => v8,
151
+ :country => v9,
152
+ :phone => v11,
153
+ :email => v13
154
+ )
155
+ end
156
+ end
157
+
158
+ # [ORGANIZATION]
159
+ # [ADDRESS]*
160
+ # [CITY, ST ZIP] | [CITY]
161
+ # [COUNTRY]
162
+ def build_contact_registrant(element, type)
163
+ if content_for_scanner =~ /#{element}:\n((.+\n)+)\n/
164
+ lines = ::Regexp.last_match(1).split("\n").map(&:strip)
165
+ items = lines.dup
166
+
167
+ # Extract variables
168
+
169
+ v9 = items.delete_at(-1)
170
+
171
+ v4 = items.delete_at(0)
172
+
173
+ v6 = items.delete_at(-1)
174
+ if v6 =~ /([^\n,]+),\s([A-Z]{2})(?:\s(\d{5}))/
175
+ v6, v7, v8 = ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3)
176
+ end
177
+
178
+ v5 = items.empty? ? nil : items.join("\n")
179
+
180
+ # Create Contact
181
+
182
+ Parser::Contact.new(
183
+ :type => type,
184
+ :name => nil,
185
+ :organization => v4,
186
+ :address => v5,
187
+ :city => v6,
188
+ :state => v7,
189
+ :zip => v8,
190
+ :country => v9
191
+ )
192
+ end
193
+ end
194
+
195
+ end
196
+
197
+ end
198
+ end
@@ -0,0 +1,72 @@
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.eenet.ee 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
+ # See WhoisNicIt parser for an explanation of all available methods
22
+ # and examples.
23
+ #
24
+ # @deprecated The official .ee TLD host is now whois.tld.ee.
25
+ # This parser only exists for BC.
26
+ #
27
+ class WhoisEenetEe < Base
28
+
29
+ property_supported :status do
30
+ if available?
31
+ :available
32
+ else
33
+ :registered
34
+ end
35
+ end
36
+
37
+ property_supported :available? do
38
+ !!(content_for_scanner =~ /^NOT FOUND:/)
39
+ end
40
+
41
+ property_supported :registered? do
42
+ !available?
43
+ end
44
+
45
+
46
+ property_supported :created_on do
47
+ if content_for_scanner =~ /Record created on (.*)\n/
48
+ parse_time(::Regexp.last_match(1))
49
+ end
50
+ end
51
+
52
+ property_supported :updated_on do
53
+ if content_for_scanner =~ /Record changed on (.*)\n/
54
+ parse_time(::Regexp.last_match(1))
55
+ end
56
+ end
57
+
58
+ property_not_supported :expires_on
59
+
60
+
61
+ property_supported :nameservers do
62
+ if content_for_scanner =~ /Domain servers:\n((.+\n)+)\n/
63
+ ::Regexp.last_match(1).split("\n").map do |name|
64
+ Parser::Nameserver.new(:name => name.strip.chomp("."))
65
+ end
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ 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.enom.com server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisEnomCom < BaseIcannCompliant
22
+ self.scanner = Scanners::BaseIcannCompliant, {
23
+ pattern_available: /^Domain not found\.\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,58 @@
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.eu.org parser
18
+ #
19
+ # Parser for the whois.eu.org 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 WhoisEuOrg < Base
28
+
29
+ property_supported :status do
30
+ if available?
31
+ :available
32
+ else
33
+ :registered
34
+ end
35
+ end
36
+
37
+ property_supported :available? do
38
+ !!(content_for_scanner =~ /Key not found/)
39
+ end
40
+
41
+ property_supported :registered? do
42
+ !available?
43
+ end
44
+
45
+
46
+ property_not_supported :created_on
47
+
48
+ property_not_supported :updated_on
49
+
50
+ property_not_supported :expires_on
51
+
52
+
53
+ property_not_supported :nameservers
54
+
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,130 @@
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.eu server.
17
+ #
18
+ class WhoisEu < Base
19
+
20
+ property_supported :domain do
21
+ if content_for_scanner =~ /Domain:\s+(.+)\n/
22
+ "#{::Regexp.last_match(1).downcase}"
23
+ end
24
+ end
25
+
26
+ property_not_supported :domain_id
27
+
28
+
29
+ property_supported :status do
30
+ if available?
31
+ :available
32
+ else
33
+ :registered
34
+ end
35
+ end
36
+
37
+ property_supported :available? do
38
+ !!(content_for_scanner =~ /Status:\s+AVAILABLE/)
39
+ end
40
+
41
+ property_supported :registered? do
42
+ !available?
43
+ end
44
+
45
+
46
+ property_not_supported :created_on
47
+
48
+ property_not_supported :updated_on
49
+
50
+ property_not_supported :expires_on
51
+
52
+
53
+ property_supported :registrar do
54
+ if content_for_scanner =~ /Registrar:\s((.+\n)+)\n/
55
+ lines = ::Regexp.last_match(1)
56
+ Parser::Registrar.new(
57
+ name: lines.slice(/Name:\s+(.+)/, 1),
58
+ url: lines.slice(/Website:\s+(.+)/, 1)
59
+ )
60
+ end
61
+ end
62
+
63
+ property_not_supported :registrant_contacts
64
+
65
+ property_not_supported :admin_contacts
66
+
67
+ # Technical Contact
68
+ #
69
+ # Technical:
70
+ # Name: DNS Admin
71
+ # Organisation: Google Inc.
72
+ # Language: en
73
+ # Phone: +1.6506234000
74
+ # Fax: +1.6506188571
75
+ # Email: dns-admin@google.com
76
+ #
77
+ property_supported :technical_contacts do
78
+ if content_for_scanner =~ /Technical:\s((.+\n)+)\n/
79
+ lines = ::Regexp.last_match(1)
80
+ Parser::Contact.new(
81
+ :type => Parser::Contact::TYPE_TECHNICAL,
82
+ :id => nil,
83
+ :name => lines.slice(/Name:\s*(.*)/, 1),
84
+ :organization => lines.slice(/Organisation:\s*(.*)/, 1),
85
+ :phone => lines.slice(/Phone:\s*(.*)/, 1),
86
+ :fax => lines.slice(/Fax:\s*(.*)/, 1),
87
+ :email => lines.slice(/Email:\s*(.*)/, 1)
88
+ )
89
+ end
90
+ end
91
+
92
+
93
+ # Nameservers are listed in the following formats:
94
+ #
95
+ # Name servers:
96
+ # dns1.servicemagic.eu
97
+ # dns2.servicemagic.eu
98
+ #
99
+ # Name servers:
100
+ # dns1.servicemagic.eu (91.121.133.61)
101
+ # dns2.servicemagic.eu (91.121.103.77)
102
+ #
103
+ property_supported :nameservers do
104
+ if content_for_scanner =~ /Name\sservers:\s((.+\n)+)\n/
105
+ ::Regexp.last_match(1).split("\n").map do |line|
106
+ if line.strip =~ /(.+) \((.+)\)/
107
+ Parser::Nameserver.new(:name => ::Regexp.last_match(1), :ipv4 => ::Regexp.last_match(2))
108
+ else
109
+ Parser::Nameserver.new(:name => line.strip)
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+
116
+ # Checks whether the response has been throttled.
117
+ #
118
+ # @return [Boolean]
119
+ #
120
+ # @example
121
+ # -1: Still in grace period, wait 7777777 seconds
122
+ #
123
+ def response_throttled?
124
+ !!(content_for_scanner =~ /Still in grace period/)
125
+ end
126
+
127
+ end
128
+
129
+ end
130
+ end
@@ -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.fi.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.fi server.
18
+ #
19
+ # @see Whois::Parsers::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisFi < Base
23
+ include Scanners::Scannable
24
+
25
+ self.scanner = Scanners::WhoisFi
26
+
27
+
28
+ property_supported :disclaimer do
29
+ node("field:disclaimer")
30
+ end
31
+
32
+
33
+ property_supported :domain do
34
+ node("domain")
35
+ end
36
+
37
+ property_not_supported :domain_id
38
+
39
+
40
+ property_supported :status do
41
+ if reserved?
42
+ :reserved
43
+ elsif registered?
44
+ case node("status", &:downcase)
45
+ when "granted"
46
+ :registered
47
+ when "registered"
48
+ :registered
49
+ when "grace period"
50
+ :registered
51
+ else
52
+ Whois::Parser.bug!(ParserError, "Unknown status `#{node('status')}'.")
53
+ end
54
+ else
55
+ :available
56
+ end
57
+ end
58
+
59
+ property_supported :available? do
60
+ !!node("status:available")
61
+ end
62
+
63
+ property_supported :registered? do
64
+ !available?
65
+ end
66
+
67
+
68
+ property_supported :created_on do
69
+ node("created") { |value| parse_time(value) }
70
+ end
71
+
72
+ property_supported :updated_on do
73
+ node("modified") { |value| parse_time(value) }
74
+ end
75
+
76
+ property_supported :expires_on do
77
+ node("expires") { |value| parse_time(value) }
78
+ end
79
+
80
+
81
+ property_not_supported :registrar
82
+
83
+ property_supported :registrant_contacts do
84
+ node("descr") do |array|
85
+ address = node("address")
86
+
87
+ Parser::Contact.new(
88
+ type: Parser::Contact::TYPE_REGISTRANT,
89
+ id: array[1],
90
+ name: address[0],
91
+ organization: array[0],
92
+ address: address[1],
93
+ zip: address[2],
94
+ city: address[3],
95
+ phone: node("phone")
96
+ )
97
+ end
98
+ end
99
+
100
+ property_not_supported :admin_contacts
101
+
102
+ property_not_supported :technical_contacts
103
+
104
+
105
+ property_supported :nameservers do
106
+ Array.wrap(node("nserver")).map do |line|
107
+ Parser::Nameserver.new(name: line.split(" ").first)
108
+ end
109
+ end
110
+
111
+ # NEWPROPERTY
112
+ def reserved?
113
+ !!content_for_scanner.match(/Domain not available/)
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,36 @@
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.gandi.net server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisGandiNet < BaseIcannCompliant
22
+
23
+ property_supported :available? do
24
+ content_for_scanner == "\n"
25
+ end
26
+
27
+ def response_unavailable?
28
+ return false if content_for_scanner == "\n"
29
+
30
+ super
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end