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,93 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+ require_relative 'registry_response_safety'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.co.ug server.
18
+ #
19
+ # @note This parser is just a stub and provides only a few basic methods
20
+ # to check for domain availability and get domain status.
21
+ # Please consider to contribute implementing missing methods.
22
+ #
23
+ # @see Whois::Parsers::Example
24
+ # The Example parser for the list of all available methods.
25
+ #
26
+ # @author Simone Carletti <weppos@weppos.net>
27
+ # @author Moritz Heidkamp <moritz.heidkamp@bevuta.com>
28
+ #
29
+ class WhoisCoUg < Base
30
+ include RegistryResponseSafety
31
+
32
+ property_supported :domain do
33
+ if content_for_scanner =~ /^\s*Domain name:\s+(.+)$/i
34
+ ::Regexp.last_match(1).strip.downcase
35
+ end
36
+ end
37
+
38
+ property_supported :status do
39
+ if content_for_scanner =~ /^Status:\s+(.+?)\n/
40
+ case ::Regexp.last_match(1).downcase
41
+ when 'active'
42
+ :registered
43
+ when 'unconfirmed'
44
+ :registered
45
+ else
46
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
47
+ end
48
+ elsif available?
49
+ :available
50
+ else
51
+ :unknown
52
+ end
53
+ end
54
+
55
+ property_supported :available? do
56
+ !!(content_for_scanner =~ /^% No entries found for the selected source/ ||
57
+ content_for_scanner =~ /^\s*>>> Domain not Found$/i)
58
+ end
59
+
60
+ property_supported :registered? do
61
+ status == :registered
62
+ end
63
+
64
+
65
+ property_supported :created_on do
66
+ if content_for_scanner =~ /Registered:\s+(.+)$/
67
+ parse_time(::Regexp.last_match(1))
68
+ end
69
+ end
70
+
71
+ property_supported :updated_on do
72
+ if content_for_scanner =~ /Updated:\s+(.+)$/
73
+ DateTime.strptime(::Regexp.last_match(1), '%d/%m/%Y %H:%M:%S').to_time
74
+ end
75
+ end
76
+
77
+ property_supported :expires_on do
78
+ if content_for_scanner =~ /Expiry:\s(.+)$/
79
+ parse_time(::Regexp.last_match(1))
80
+ end
81
+ end
82
+
83
+
84
+ property_supported :nameservers do
85
+ content_for_scanner.scan(/Nameserver:\s+(.+)\n/).flatten.map do |name|
86
+ Parser::Nameserver.new(:name => name.downcase)
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,113 @@
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.comlaude.com server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisComlaudeCom < Base
22
+
23
+ property_not_supported :status
24
+
25
+ # The server is contacted only in case of a registered domain.
26
+ property_supported :available? do
27
+ false
28
+ end
29
+
30
+ property_supported :registered? do
31
+ !available?
32
+ end
33
+
34
+
35
+ property_supported :created_on do
36
+ if content_for_scanner =~ /Registered: (.+)\n/
37
+ parse_time(::Regexp.last_match(1))
38
+ end
39
+ end
40
+
41
+ property_not_supported :updated_on
42
+
43
+ property_supported :expires_on do
44
+ if content_for_scanner =~ /Expires: (.+)\n/
45
+ parse_time(::Regexp.last_match(1))
46
+ end
47
+ end
48
+
49
+
50
+ property_supported :registrar do
51
+ Parser::Registrar.new(
52
+ :name => "NOM IQ LTD (DBA COM LAUDE)",
53
+ :url => "http://www.comlaude.com"
54
+ )
55
+ end
56
+
57
+ property_supported :registrant_contacts do
58
+ build_contact('Registrant Contact:', Parser::Contact::TYPE_REGISTRANT)
59
+ end
60
+
61
+ property_supported :admin_contacts do
62
+ build_contact('Admin Contact:', Parser::Contact::TYPE_ADMINISTRATIVE)
63
+ end
64
+
65
+ property_supported :technical_contacts do
66
+ build_contact('Technical Contact:', Parser::Contact::TYPE_TECHNICAL)
67
+ end
68
+
69
+
70
+ property_supported :nameservers do
71
+ if content_for_scanner =~ /Nameservers:\n((?:\s*[^\s\n]+\n)+)\n/
72
+ ::Regexp.last_match(1).split("\n").map do |line|
73
+ Parser::Nameserver.new(:name => line.strip)
74
+ end
75
+ end
76
+ end
77
+
78
+
79
+ private
80
+
81
+ def build_contact(element, type)
82
+ match = content_for_scanner.slice(/#{element}\n((.+\n)*)\n\n/, 1)
83
+ return unless match
84
+
85
+ lines = match.split("\n").map(&:strip)
86
+
87
+ # 0 Domain Manager
88
+ # 1 Nom-IQ Ltd dba Com Laude
89
+ # 28-30 Little Russell Street
90
+ # London WC1A 2HN
91
+ # United Kingdom
92
+ # Phone: +44.2074218250
93
+ # Fax: +44.8700118187
94
+ # Email: admin@comlaude.com
95
+ Parser::Contact.new(
96
+ :type => type,
97
+ :name => lines[0],
98
+ :organization => lines[1],
99
+ :address => nil,
100
+ :city => nil,
101
+ :state => nil,
102
+ :zip => nil,
103
+ :country => nil,
104
+ :phone => match.slice(/Phone: (.*)/, 1),
105
+ :email => match.slice(/Email: (.*)/, 1),
106
+ :fax => match.slice(/Fax: (.*)/, 1)
107
+ )
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+ 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.markmonitor.com server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisCorporatedomainsCom < BaseIcannCompliant
22
+ self.scanner = Scanners::BaseIcannCompliant, {
23
+ pattern_available: /^No match for/,
24
+ }
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,164 @@
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.denic.de.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.denic.de server.
18
+ #
19
+ # @author Simone Carletti <weppos@weppos.net>
20
+ # @author Aaron Mueller <mail@aaron-mueller.de>
21
+ #
22
+ class WhoisDenicDe < Base
23
+ include Scanners::Scannable
24
+
25
+ self.scanner = Scanners::WhoisDenicDe
26
+
27
+
28
+ property_supported :disclaimer do
29
+ node("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
+ case node("Status")
42
+ when "connect"
43
+ :registered
44
+ when "free"
45
+ :available
46
+ when "invalid"
47
+ :invalid
48
+ # NEWSTATUS inactive
49
+ # The domain is registered, but there is not DNS entry for it.
50
+ when "failed"
51
+ :registered
52
+ else
53
+ if response_error?
54
+ # NEWSTATUS invalid
55
+ :invalid
56
+ else
57
+ Whois::Parser.bug!(ParserError, "Unknown status `#{node('Status')}'.")
58
+ end
59
+ end
60
+ end
61
+
62
+ property_supported :available? do
63
+ !invalid? && node("Status") == "free"
64
+ end
65
+
66
+ property_supported :registered? do
67
+ !invalid? && !available?
68
+ end
69
+
70
+
71
+ property_not_supported :created_on
72
+
73
+ property_supported :updated_on do
74
+ node("Changed") { |value| parse_time(value) }
75
+ end
76
+
77
+ property_not_supported :expires_on
78
+
79
+
80
+ property_supported :registrar do
81
+ node("Zone-C") do |raw|
82
+ Parser::Registrar.new(
83
+ :id => nil,
84
+ :name => raw["name"],
85
+ :organization => raw["organization"],
86
+ :url => nil
87
+ )
88
+ end
89
+ end
90
+
91
+ property_supported :registrant_contacts do
92
+ build_contact("Holder", Parser::Contact::TYPE_REGISTRANT)
93
+ end
94
+
95
+ property_supported :admin_contacts do
96
+ build_contact("Admin-C", Parser::Contact::TYPE_ADMINISTRATIVE)
97
+ end
98
+
99
+ property_supported :technical_contacts do
100
+ build_contact("Tech-C", Parser::Contact::TYPE_TECHNICAL)
101
+ end
102
+
103
+
104
+ # Nameservers are listed in the following formats:
105
+ #
106
+ # Nserver: ns1.prodns.de. 213.160.64.75
107
+ # Nserver: ns1.prodns.de.
108
+ #
109
+ property_supported :nameservers do
110
+ node("Nserver") do |values|
111
+ values.map do |line|
112
+ name, ipv4 = line.split(/\s+/)
113
+ Parser::Nameserver.new(name: name, ipv4: ipv4)
114
+ end
115
+ end
116
+ end
117
+
118
+
119
+ # Checks whether the response has been throttled.
120
+ #
121
+ # @return [Boolean]
122
+ #
123
+ # @example
124
+ # % Error: 55000000002 Connection refused; access control limit reached.
125
+ #
126
+ def response_throttled?
127
+ !!node("response:throttled")
128
+ end
129
+
130
+ def response_error?
131
+ !!node("response:error")
132
+ end
133
+
134
+
135
+ def version
136
+ cached_properties_fetch :version do
137
+ if content_for_scanner =~ /^% Version: (.+)$/
138
+ ::Regexp.last_match(1)
139
+ end
140
+ end
141
+ end
142
+
143
+ # NEWPROPERTY invalid?
144
+ def invalid?
145
+ cached_properties_fetch :invalid? do
146
+ node("Status") == "invalid" ||
147
+ response_error?
148
+ end
149
+ end
150
+
151
+
152
+ private
153
+
154
+ def build_contact(element, type)
155
+ node(element) do |raw|
156
+ Parser::Contact.new(raw) do |c|
157
+ c.type = type
158
+ end
159
+ end
160
+ end
161
+
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,88 @@
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.dk-hostmaster.dk 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
+ # @author Simone Carletti <weppos@weppos.net>
26
+ # @author Mikkel Kristensen <mikkel@tdx.dk>
27
+ #
28
+ class WhoisDkHostmasterDk < Base
29
+
30
+ property_supported :status do
31
+ if content_for_scanner =~ /Status:\s+(.+?)\n/
32
+ case ::Regexp.last_match(1).downcase
33
+ when "active"
34
+ :registered
35
+ when "deactivated"
36
+ :expired
37
+ when "reserved"
38
+ :reserved
39
+ else
40
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
41
+ end
42
+ else
43
+ :available
44
+ end
45
+ end
46
+
47
+ property_supported :available? do
48
+ !!(content_for_scanner =~ /^No entries found for the selected source/)
49
+ end
50
+
51
+ property_supported :registered? do
52
+ !available?
53
+ end
54
+
55
+
56
+ property_supported :created_on do
57
+ if content_for_scanner =~ /Registered:\s+(.*)\n/
58
+ parse_time(::Regexp.last_match(1))
59
+ end
60
+ end
61
+
62
+ property_not_supported :updated_on
63
+
64
+ property_supported :expires_on do
65
+ if content_for_scanner =~ /Expires:\s+(.*)\n/
66
+ parse_time(::Regexp.last_match(1))
67
+ end
68
+ end
69
+
70
+
71
+ property_supported :nameservers do
72
+ content_for_scanner.scan(/Hostname:\s+(.+)\n/).flatten.map do |name|
73
+ Parser::Nameserver.new(:name => name)
74
+ end
75
+ end
76
+
77
+
78
+ # Checks whether the response has been throttled.
79
+ #
80
+ # @return [Boolean]
81
+ def response_throttled?
82
+ !!(content_for_scanner =~ /# Too many connections[.]/)
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1,120 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.dns.be 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 WhoisDnsBe < Base
26
+
27
+ property_supported :domain do
28
+ content_for_scanner.slice(/Domain:\s+(.+?)\n/, 1)
29
+ end
30
+
31
+
32
+ property_supported :status do
33
+ if content_for_scanner =~ /Status:\s+(.+?)\n/
34
+ case ::Regexp.last_match(1).downcase
35
+ when "available"
36
+ :available
37
+ when "not available"
38
+ :registered
39
+ when "quarantine"
40
+ :redemption
41
+ when "out of service"
42
+ :redemption
43
+ when "not allowed"
44
+ :invalid
45
+ else
46
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
47
+ end
48
+ else
49
+ Whois::Parser.bug!(ParserError, "Unable to parse status.")
50
+ end
51
+ end
52
+
53
+ property_supported :available? do
54
+ !invalid? && (status == :available)
55
+ end
56
+
57
+ property_supported :registered? do
58
+ !invalid? && !available?
59
+ end
60
+
61
+
62
+ property_supported :created_on do
63
+ if content_for_scanner =~ /Registered:\s+(.+)\n/
64
+ parse_time(::Regexp.last_match(1))
65
+ end
66
+ end
67
+
68
+ property_not_supported :updated_on
69
+
70
+ property_not_supported :expires_on
71
+
72
+
73
+ property_supported :registrar do
74
+ if (match = content_for_scanner.match(/Registrar:\s+Name:(.+?)\s*Website:(.+?)\n/))
75
+ name, url = match.to_a[1..2]
76
+ Parser::Registrar.new(name: name.strip, url: url.strip)
77
+ end
78
+ end
79
+
80
+
81
+ property_supported :nameservers do
82
+ if content_for_scanner =~ /Nameservers:\s((.+\n)+)\n/
83
+ ::Regexp.last_match(1).split("\n").map do |line|
84
+ if line.strip =~ /(.+) \((.+)\)/
85
+ Parser::Nameserver.new(:name => ::Regexp.last_match(1), :ipv4 => ::Regexp.last_match(2))
86
+ else
87
+ Parser::Nameserver.new(:name => line.strip)
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+
94
+ # Checks whether the response has been throttled.
95
+ #
96
+ # @return [Boolean]
97
+ def response_throttled?
98
+ !!(content_for_scanner =~ /^% (Excessive querying|Maximum queries per hour reached)/) ||
99
+ response_blocked?
100
+ end
101
+
102
+ # Checks whether the server has been blocked.
103
+ #
104
+ # @return [Boolean]
105
+ def response_blocked?
106
+ !!(content_for_scanner =~ /^-3: IP address blocked/)
107
+ end
108
+
109
+
110
+ # NEWPROPERTY
111
+ def invalid?
112
+ cached_properties_fetch(:invalid?) do
113
+ status == :invalid
114
+ end
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+ end