whois-parser 0.0.1 → 1.0.0.pre.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/CHANGELOG.md +20 -0
  4. data/CONTRIBUTING.md +40 -0
  5. data/LICENSE.txt +17 -18
  6. data/README.md +6 -24
  7. data/lib/whois/parser/contact.rb +56 -0
  8. data/lib/whois/parser/errors.rb +46 -0
  9. data/lib/whois/parser/nameserver.rb +39 -0
  10. data/lib/whois/parser/registrar.rb +25 -0
  11. data/lib/whois/parser/super_struct.rb +53 -0
  12. data/lib/whois/parser/version.rb +3 -2
  13. data/lib/whois/parser.rb +407 -3
  14. data/lib/whois/parser_extensions/whois.rb +78 -0
  15. data/lib/whois/parser_extensions/whois_record.rb +222 -0
  16. data/lib/whois/parser_extensions.rb +9 -0
  17. data/lib/whois/parsers/base.rb +412 -0
  18. data/lib/whois/parsers/base_afilias.rb +139 -0
  19. data/lib/whois/parsers/base_afilias2.rb +140 -0
  20. data/lib/whois/parsers/base_cocca.rb +97 -0
  21. data/lib/whois/parsers/base_cocca2.rb +91 -0
  22. data/lib/whois/parsers/base_icann_compliant.rb +150 -0
  23. data/lib/whois/parsers/base_icb.rb +92 -0
  24. data/lib/whois/parsers/base_iisse.rb +113 -0
  25. data/lib/whois/parsers/base_nic_fr.rb +169 -0
  26. data/lib/whois/parsers/base_shared1.rb +108 -0
  27. data/lib/whois/parsers/base_shared2.rb +127 -0
  28. data/lib/whois/parsers/base_shared3.rb +127 -0
  29. data/lib/whois/parsers/base_verisign.rb +106 -0
  30. data/lib/whois/parsers/base_whoisd.rb +145 -0
  31. data/lib/whois/parsers/blank.rb +35 -0
  32. data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
  33. data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
  34. data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
  35. data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
  36. data/lib/whois/parsers/example.rb +163 -0
  37. data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
  38. data/lib/whois/parsers/kero.yachay.pe.rb +86 -0
  39. data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
  40. data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
  41. data/lib/whois/parsers/whois.1und1.info.rb +28 -0
  42. data/lib/whois/parsers/whois.35.com.rb +23 -0
  43. data/lib/whois/parsers/whois.aeda.net.ae.rb +64 -0
  44. data/lib/whois/parsers/whois.aero.rb +58 -0
  45. data/lib/whois/parsers/whois.afilias-grs.info.rb +21 -0
  46. data/lib/whois/parsers/whois.afilias.net.rb +41 -0
  47. data/lib/whois/parsers/whois.ai.rb +62 -0
  48. data/lib/whois/parsers/whois.amnic.net.rb +79 -0
  49. data/lib/whois/parsers/whois.ascio.com.rb +29 -0
  50. data/lib/whois/parsers/whois.ati.tn.rb +116 -0
  51. data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
  52. data/lib/whois/parsers/whois.ax.rb +64 -0
  53. data/lib/whois/parsers/whois.biz.rb +25 -0
  54. data/lib/whois/parsers/whois.bnnic.bn.rb +75 -0
  55. data/lib/whois/parsers/whois.cat.rb +75 -0
  56. data/lib/whois/parsers/whois.cctld.by.rb +94 -0
  57. data/lib/whois/parsers/whois.cctld.uz.rb +79 -0
  58. data/lib/whois/parsers/whois.centralnic.com.rb +140 -0
  59. data/lib/whois/parsers/whois.cira.ca.rb +192 -0
  60. data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
  61. data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
  62. data/lib/whois/parsers/whois.co.ca.rb +74 -0
  63. data/lib/whois/parsers/whois.co.pl.rb +82 -0
  64. data/lib/whois/parsers/whois.co.ug.rb +82 -0
  65. data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
  66. data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
  67. data/lib/whois/parsers/whois.denic.de.rb +164 -0
  68. data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
  69. data/lib/whois/parsers/whois.dns.be.rb +120 -0
  70. data/lib/whois/parsers/whois.dns.hr.rb +97 -0
  71. data/lib/whois/parsers/whois.dns.lu.rb +126 -0
  72. data/lib/whois/parsers/whois.dns.pl.rb +151 -0
  73. data/lib/whois/parsers/whois.dns.pt.rb +77 -0
  74. data/lib/whois/parsers/whois.domain-registry.nl.rb +123 -0
  75. data/lib/whois/parsers/whois.domain.kg.rb +76 -0
  76. data/lib/whois/parsers/whois.domainregistry.ie.rb +121 -0
  77. data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
  78. data/lib/whois/parsers/whois.donuts.co.rb +61 -0
  79. data/lib/whois/parsers/whois.dot.cf.rb +71 -0
  80. data/lib/whois/parsers/whois.dot.tk.rb +70 -0
  81. data/lib/whois/parsers/whois.dotgov.gov.rb +61 -0
  82. data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
  83. data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
  84. data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
  85. data/lib/whois/parsers/whois.educause.edu.rb +200 -0
  86. data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
  87. data/lib/whois/parsers/whois.enom.com.rb +34 -0
  88. data/lib/whois/parsers/whois.eu.org.rb +58 -0
  89. data/lib/whois/parsers/whois.eu.rb +130 -0
  90. data/lib/whois/parsers/whois.fi.rb +117 -0
  91. data/lib/whois/parsers/whois.gandi.net.rb +30 -0
  92. data/lib/whois/parsers/whois.gg.rb +31 -0
  93. data/lib/whois/parsers/whois.godaddy.com.rb +112 -0
  94. data/lib/whois/parsers/whois.gov.za.rb +60 -0
  95. data/lib/whois/parsers/whois.hkirc.hk.rb +70 -0
  96. data/lib/whois/parsers/whois.iana.org.rb +102 -0
  97. data/lib/whois/parsers/whois.iis.nu.rb +26 -0
  98. data/lib/whois/parsers/whois.iis.se.rb +26 -0
  99. data/lib/whois/parsers/whois.in.ua.rb +75 -0
  100. data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
  101. data/lib/whois/parsers/whois.isnic.is.rb +70 -0
  102. data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
  103. data/lib/whois/parsers/whois.ja.net.rb +75 -0
  104. data/lib/whois/parsers/whois.je.rb +25 -0
  105. data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
  106. data/lib/whois/parsers/whois.kenic.or.ke.rb +91 -0
  107. data/lib/whois/parsers/whois.kr.rb +79 -0
  108. data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
  109. data/lib/whois/parsers/whois.monic.mo.rb +83 -0
  110. data/lib/whois/parsers/whois.museum.rb +79 -0
  111. data/lib/whois/parsers/whois.mynic.my.rb +72 -0
  112. data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
  113. data/lib/whois/parsers/whois.nc.rb +122 -0
  114. data/lib/whois/parsers/whois.netcom.cm.rb +26 -0
  115. data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
  116. data/lib/whois/parsers/whois.nic.ac.rb +25 -0
  117. data/lib/whois/parsers/whois.nic.af.rb +25 -0
  118. data/lib/whois/parsers/whois.nic.ag.rb +21 -0
  119. data/lib/whois/parsers/whois.nic.as.rb +63 -0
  120. data/lib/whois/parsers/whois.nic.asia.rb +107 -0
  121. data/lib/whois/parsers/whois.nic.at.rb +64 -0
  122. data/lib/whois/parsers/whois.nic.bj.rb +126 -0
  123. data/lib/whois/parsers/whois.nic.bo.rb +73 -0
  124. data/lib/whois/parsers/whois.nic.cd.rb +34 -0
  125. data/lib/whois/parsers/whois.nic.ch.rb +109 -0
  126. data/lib/whois/parsers/whois.nic.ci.rb +70 -0
  127. data/lib/whois/parsers/whois.nic.cl.rb +71 -0
  128. data/lib/whois/parsers/whois.nic.co.rb +25 -0
  129. data/lib/whois/parsers/whois.nic.college.rb +25 -0
  130. data/lib/whois/parsers/whois.nic.coop.rb +70 -0
  131. data/lib/whois/parsers/whois.nic.cx.rb +25 -0
  132. data/lib/whois/parsers/whois.nic.cz.rb +42 -0
  133. data/lib/whois/parsers/whois.nic.design.rb +25 -0
  134. data/lib/whois/parsers/whois.nic.dm.rb +25 -0
  135. data/lib/whois/parsers/whois.nic.dz.rb +58 -0
  136. data/lib/whois/parsers/whois.nic.ec.rb +34 -0
  137. data/lib/whois/parsers/whois.nic.es.rb +105 -0
  138. data/lib/whois/parsers/whois.nic.fo.rb +43 -0
  139. data/lib/whois/parsers/whois.nic.fr.rb +25 -0
  140. data/lib/whois/parsers/whois.nic.gd.rb +31 -0
  141. data/lib/whois/parsers/whois.nic.gl.rb +25 -0
  142. data/lib/whois/parsers/whois.nic.gs.rb +31 -0
  143. data/lib/whois/parsers/whois.nic.hn.rb +25 -0
  144. data/lib/whois/parsers/whois.nic.ht.rb +25 -0
  145. data/lib/whois/parsers/whois.nic.hu.rb +78 -0
  146. data/lib/whois/parsers/whois.nic.im.rb +66 -0
  147. data/lib/whois/parsers/whois.nic.io.rb +48 -0
  148. data/lib/whois/parsers/whois.nic.ir.rb +66 -0
  149. data/lib/whois/parsers/whois.nic.it.rb +159 -0
  150. data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
  151. data/lib/whois/parsers/whois.nic.ki.rb +25 -0
  152. data/lib/whois/parsers/whois.nic.kz.rb +67 -0
  153. data/lib/whois/parsers/whois.nic.la.rb +25 -0
  154. data/lib/whois/parsers/whois.nic.li.rb +64 -0
  155. data/lib/whois/parsers/whois.nic.lk.rb +109 -0
  156. data/lib/whois/parsers/whois.nic.lv.rb +65 -0
  157. data/lib/whois/parsers/whois.nic.ly.rb +76 -0
  158. data/lib/whois/parsers/whois.nic.md.rb +94 -0
  159. data/lib/whois/parsers/whois.nic.me.rb +85 -0
  160. data/lib/whois/parsers/whois.nic.mg.rb +31 -0
  161. data/lib/whois/parsers/whois.nic.ms.rb +25 -0
  162. data/lib/whois/parsers/whois.nic.mu.rb +25 -0
  163. data/lib/whois/parsers/whois.nic.mx.rb +79 -0
  164. data/lib/whois/parsers/whois.nic.name.rb +68 -0
  165. data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
  166. data/lib/whois/parsers/whois.nic.net.sa.rb +70 -0
  167. data/lib/whois/parsers/whois.nic.net.sb.rb +31 -0
  168. data/lib/whois/parsers/whois.nic.nf.rb +25 -0
  169. data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
  170. data/lib/whois/parsers/whois.nic.pm.rb +25 -0
  171. data/lib/whois/parsers/whois.nic.pr.rb +84 -0
  172. data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
  173. data/lib/whois/parsers/whois.nic.pw.rb +25 -0
  174. data/lib/whois/parsers/whois.nic.re.rb +25 -0
  175. data/lib/whois/parsers/whois.nic.sh.rb +25 -0
  176. data/lib/whois/parsers/whois.nic.sl.rb +76 -0
  177. data/lib/whois/parsers/whois.nic.sm.rb +76 -0
  178. data/lib/whois/parsers/whois.nic.sn.rb +113 -0
  179. data/lib/whois/parsers/whois.nic.so.rb +70 -0
  180. data/lib/whois/parsers/whois.nic.space.rb +25 -0
  181. data/lib/whois/parsers/whois.nic.st.rb +72 -0
  182. data/lib/whois/parsers/whois.nic.tc.rb +25 -0
  183. data/lib/whois/parsers/whois.nic.tech.rb +25 -0
  184. data/lib/whois/parsers/whois.nic.tel.rb +25 -0
  185. data/lib/whois/parsers/whois.nic.tl.rb +25 -0
  186. data/lib/whois/parsers/whois.nic.tm.rb +31 -0
  187. data/lib/whois/parsers/whois.nic.tr.rb +159 -0
  188. data/lib/whois/parsers/whois.nic.travel.rb +25 -0
  189. data/lib/whois/parsers/whois.nic.uk.rb +177 -0
  190. data/lib/whois/parsers/whois.nic.us.rb +25 -0
  191. data/lib/whois/parsers/whois.nic.ve.rb +87 -0
  192. data/lib/whois/parsers/whois.nic.wf.rb +25 -0
  193. data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
  194. data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
  195. data/lib/whois/parsers/whois.norid.no.rb +61 -0
  196. data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
  197. data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
  198. data/lib/whois/parsers/whois.pir.org.rb +90 -0
  199. data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
  200. data/lib/whois/parsers/whois.register.bg.rb +83 -0
  201. data/lib/whois/parsers/whois.register.com.rb +30 -0
  202. data/lib/whois/parsers/whois.register.si.rb +73 -0
  203. data/lib/whois/parsers/whois.registre.ma.rb +63 -0
  204. data/lib/whois/parsers/whois.registro.br.rb +73 -0
  205. data/lib/whois/parsers/whois.registry.gy.rb +25 -0
  206. data/lib/whois/parsers/whois.registry.hm.rb +72 -0
  207. data/lib/whois/parsers/whois.registry.net.za.rb +139 -0
  208. data/lib/whois/parsers/whois.registry.om.rb +40 -0
  209. data/lib/whois/parsers/whois.registry.qa.rb +25 -0
  210. data/lib/whois/parsers/whois.ripe.net.rb +68 -0
  211. data/lib/whois/parsers/whois.rnids.rs.rb +134 -0
  212. data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
  213. data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
  214. data/lib/whois/parsers/whois.safenames.net.rb +48 -0
  215. data/lib/whois/parsers/whois.schlund.info.rb +34 -0
  216. data/lib/whois/parsers/whois.sgnic.sg.rb +87 -0
  217. data/lib/whois/parsers/whois.sk-nic.sk.rb +101 -0
  218. data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
  219. data/lib/whois/parsers/whois.srs.net.nz.rb +159 -0
  220. data/lib/whois/parsers/whois.sx.rb +127 -0
  221. data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
  222. data/lib/whois/parsers/whois.thnic.co.th.rb +79 -0
  223. data/lib/whois/parsers/whois.tld.ee.rb +134 -0
  224. data/lib/whois/parsers/whois.tld.sy.rb +34 -0
  225. data/lib/whois/parsers/whois.tonic.to.rb +86 -0
  226. data/lib/whois/parsers/whois.tucows.com.rb +28 -0
  227. data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
  228. data/lib/whois/parsers/whois.tznic.or.tz.rb +25 -0
  229. data/lib/whois/parsers/whois.ua.rb +240 -0
  230. data/lib/whois/parsers/whois.udag.net.rb +28 -0
  231. data/lib/whois/parsers/whois.uniregistry.net.rb +61 -0
  232. data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
  233. data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
  234. data/lib/whois/parsers/whois.website.ws.rb +74 -0
  235. data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
  236. data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
  237. data/lib/whois/parsers/whois.za.net.rb +72 -0
  238. data/lib/whois/parsers/whois.za.org.rb +72 -0
  239. data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
  240. data/lib/whois/parsers/za_central_registry.rb +68 -0
  241. data/lib/whois/parsers.rb +4 -0
  242. data/lib/whois/safe_record.rb +169 -0
  243. data/lib/whois/scanners/base.rb +116 -0
  244. data/lib/whois/scanners/base_afilias.rb +51 -0
  245. data/lib/whois/scanners/base_cocca2.rb +43 -0
  246. data/lib/whois/scanners/base_icann_compliant.rb +45 -0
  247. data/lib/whois/scanners/base_iisse.rb +36 -0
  248. data/lib/whois/scanners/base_shared1.rb +31 -0
  249. data/lib/whois/scanners/base_shared2.rb +35 -0
  250. data/lib/whois/scanners/base_shared3.rb +37 -0
  251. data/lib/whois/scanners/base_whoisd.rb +44 -0
  252. data/lib/whois/scanners/iana.rb +89 -0
  253. data/lib/whois/scanners/scannable.rb +65 -0
  254. data/lib/whois/scanners/verisign.rb +100 -0
  255. data/lib/whois/scanners/whois.ati.tn.rb +32 -0
  256. data/lib/whois/scanners/whois.audns.net.au.rb +25 -0
  257. data/lib/whois/scanners/whois.cctld.by.rb +35 -0
  258. data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
  259. data/lib/whois/scanners/whois.cira.ca.rb +72 -0
  260. data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
  261. data/lib/whois/scanners/whois.denic.de.rb +96 -0
  262. data/lib/whois/scanners/whois.dns.hr.rb +25 -0
  263. data/lib/whois/scanners/whois.domainregistry.ie.rb +46 -0
  264. data/lib/whois/scanners/whois.fi.rb +39 -0
  265. data/lib/whois/scanners/whois.nc.rb +32 -0
  266. data/lib/whois/scanners/whois.nic.cz.rb +22 -0
  267. data/lib/whois/scanners/whois.nic.it.rb +92 -0
  268. data/lib/whois/scanners/whois.pir.org.rb +17 -0
  269. data/lib/whois/scanners/whois.registry.net.za.rb +92 -0
  270. data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
  271. data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
  272. data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
  273. data/lib/whois/scanners/whois.sx.rb +37 -0
  274. data/lib/whois/scanners/whois.tld.ee.rb +47 -0
  275. data/lib/whois/scanners/whois.tucows.com.rb +23 -0
  276. data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
  277. data/lib/whois-parser.rb +10 -0
  278. data/whois-parser.gemspec +37 -19
  279. metadata +318 -20
  280. data/.gitignore +0 -14
  281. data/Gemfile +0 -4
  282. data/Rakefile +0 -2
@@ -0,0 +1,126 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 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.lu 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 WhoisDnsLu < Base
26
+
27
+ property_supported :status do
28
+ if content_for_scanner =~ /domaintype:\s+(.+)\n/
29
+ case $1.downcase
30
+ when "active"
31
+ :registered
32
+ else
33
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
34
+ end
35
+ else
36
+ :available
37
+ end
38
+ end
39
+
40
+ property_supported :available? do
41
+ !!(content_for_scanner =~ /% No such domain/)
42
+ end
43
+
44
+ property_supported :registered? do
45
+ !available?
46
+ end
47
+
48
+
49
+ property_supported :created_on do
50
+ if content_for_scanner =~ /registered:\s+(.*)\n/
51
+ # Force the parser to use the dd/mm/yyyy format.
52
+ Time.utc(*$1.split("/").reverse)
53
+ end
54
+ end
55
+
56
+ property_not_supported :updated_on
57
+
58
+ property_not_supported :expires_on
59
+
60
+
61
+ property_supported :registrar do
62
+ if name = value_for_key('registrar-name')
63
+ Parser::Registrar.new(
64
+ name: name,
65
+ url: value_for_key('registrar-url'),
66
+ )
67
+ end
68
+ end
69
+
70
+ property_supported :registrant_contacts do
71
+ build_contact('org', Parser::Contact::TYPE_REGISTRANT)
72
+ end
73
+
74
+ property_supported :admin_contacts do
75
+ build_contact('adm', Parser::Contact::TYPE_ADMINISTRATIVE)
76
+ end
77
+
78
+ property_supported :technical_contacts do
79
+ build_contact('tec', Parser::Contact::TYPE_TECHNICAL)
80
+ end
81
+
82
+
83
+ property_supported :nameservers do
84
+ values_for_key('nserver').map do |line|
85
+ if line =~ /(.+) \[(.+)\]/
86
+ Parser::Nameserver.new(name: $1, ipv4: $2)
87
+ else
88
+ Parser::Nameserver.new(name: line)
89
+ end
90
+ end
91
+ end
92
+
93
+
94
+ private
95
+
96
+ def build_contact(element, type)
97
+ if name = value_for_key('%s-name' % element)
98
+ Parser::Contact.new(
99
+ type: type,
100
+ id: nil,
101
+ name: name,
102
+ address: value_for_key('%s-address' % element),
103
+ city: value_for_key('%s-city' % element),
104
+ zip: value_for_key('%s-zipcode' % element),
105
+ country_code: value_for_key('%s-country' % element),
106
+ email: value_for_key('%s-email' % element)
107
+ )
108
+ end
109
+ end
110
+
111
+ def value_for_key(key)
112
+ values = values_for_key(key)
113
+ if values.size > 1
114
+ values.join(', ')
115
+ else
116
+ values.first
117
+ end
118
+ end
119
+
120
+ def values_for_key(key)
121
+ content_for_scanner.scan(/#{key}:\s+(.+)\n/).flatten
122
+ end
123
+
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,151 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.dns.pl server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisDnsPl < Base
22
+
23
+ property_supported :domain do
24
+ if content_for_scanner =~ /DOMAIN NAME:\s+(.+)\n/
25
+ $1
26
+ end
27
+ end
28
+
29
+ property_not_supported :domain_id
30
+
31
+
32
+ property_supported :status do
33
+ if available?
34
+ :available
35
+ else
36
+ :registered
37
+ end
38
+ end
39
+
40
+ property_supported :available? do
41
+ !!(content_for_scanner =~ /^No information available about domain name/)
42
+ end
43
+
44
+ property_supported :registered? do
45
+ !available?
46
+ end
47
+
48
+
49
+ property_supported :created_on do
50
+ if content_for_scanner =~ /created:\s+(.+?)\n/
51
+ parse_time($1)
52
+ end
53
+ end
54
+
55
+ property_supported :updated_on do
56
+ if content_for_scanner =~ /last modified:\s+(.+?)\n/
57
+ parse_time($1)
58
+ end
59
+ end
60
+
61
+ property_supported :expires_on do
62
+ if content_for_scanner =~ /renewal date:\s+(.+?)\n/ && $1 != "not defined"
63
+ parse_time($1)
64
+ end
65
+ end
66
+
67
+
68
+ property_supported :registrar do
69
+ match = content_for_scanner.slice(/REGISTRAR:\n((.+\n)+)\n/, 1)
70
+ return unless match
71
+
72
+ lines = match.split("\n")
73
+ Parser::Registrar.new(
74
+ :name => lines[0]
75
+ )
76
+ end
77
+
78
+ property_not_supported :registrant_contacts
79
+
80
+ property_not_supported :admin_contacts
81
+
82
+ property_supported :technical_contacts do
83
+ build_contact("TECHNICAL CONTACT", Parser::Contact::TYPE_TECHNICAL)
84
+ end
85
+
86
+
87
+ property_supported :nameservers do
88
+ content_for_scanner.scan(/nameservers:\s+(.+)\n(.+)\n/).flatten.map do |line|
89
+ line.strip!
90
+ if line =~ /(.+) \[(.+)\]/
91
+ Parser::Nameserver.new(:name => $1.chomp("."), :ipv4 => $2)
92
+ else
93
+ Parser::Nameserver.new(:name => line.chomp("."))
94
+ end
95
+ end
96
+ end
97
+
98
+ # Checks whether the response has been throttled.
99
+ #
100
+ # @return [Boolean]
101
+ #
102
+ # @example
103
+ # Looup quota exceeded.
104
+ #
105
+ def response_throttled?
106
+ !!(content_for_scanner =~ /^request limit exceeded for/)
107
+ end
108
+
109
+
110
+ private
111
+
112
+ def build_contact(element, type)
113
+ match = content_for_scanner.slice(/#{element}:\n((.+\n)+)\n/, 1)
114
+ return unless match
115
+
116
+ values = parse_contact_block(match.split("\n"))
117
+ zip, city = values["city"].match(/(.+?) (.+)/)[1..2]
118
+
119
+ Parser::Contact.new(
120
+ :type => type,
121
+ :id => values["handle"],
122
+ :name => nil,
123
+ :organization => values["company"],
124
+ :address => values["street"],
125
+ :city => city,
126
+ :zip => zip,
127
+ :state => nil,
128
+ :country_code => values["location"],
129
+ :phone => values["phone"],
130
+ :fax => values["fax"],
131
+ :email => nil
132
+ )
133
+ end
134
+
135
+ def parse_contact_block(lines)
136
+ key = nil
137
+ hash = {}
138
+ lines.each do |line|
139
+ if line =~ /(.+):(.+)/
140
+ hash[key = $1] = $2.strip
141
+ else
142
+ hash[key] += "\n#{line.strip}"
143
+ end
144
+ end
145
+ hash
146
+ end
147
+
148
+ end
149
+
150
+ end
151
+ end
@@ -0,0 +1,77 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.dns.pt server.
17
+ #
18
+ # @note This parser is just a stub and provides only a few basic methods
19
+ # to check for domain availability and get domain status.
20
+ # Please consider to contribute implementing missing methods.
21
+ #
22
+ # @see Whois::Parsers::Example
23
+ # The Example parser for the list of all available methods.
24
+ #
25
+ class WhoisDnsPt < Base
26
+
27
+ property_supported :status do
28
+ if content_for_scanner =~ /^Estado \/ Status:\s+(.+)\n/
29
+ case $1.downcase
30
+ when "active"
31
+ :registered
32
+ when "reserved"
33
+ :reserved
34
+ when "tech-pro"
35
+ :inactive
36
+ else
37
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
38
+ end
39
+ else
40
+ :available
41
+ end
42
+ end
43
+
44
+ property_supported :available? do
45
+ !!(content_for_scanner =~ /^.* no match$/)
46
+ end
47
+
48
+ property_supported :registered? do
49
+ !available?
50
+ end
51
+
52
+
53
+ property_supported :created_on do
54
+ if content_for_scanner =~ / Creation Date .+?:\s+(.+)\n/
55
+ Time.utc(*$1.split("/").reverse)
56
+ end
57
+ end
58
+
59
+ property_not_supported :updated_on
60
+
61
+ property_supported :expires_on do
62
+ if content_for_scanner =~ / Expiration Date .+?:\s+(.+)\n/
63
+ Time.utc(*$1.split("/").reverse)
64
+ end
65
+ end
66
+
67
+
68
+ property_supported :nameservers do
69
+ content_for_scanner.scan(/Nameserver:\s+(?:.*)\s+NS\s+(.+?)\.\n/).flatten.map do |name|
70
+ Parser::Nameserver.new(:name => name)
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,123 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.domain-registry.nl server.
17
+ #
18
+ # @note This parser is just a stub and provides only a few basic methods
19
+ # to check for domain availability and get domain status.
20
+ # Please consider to contribute implementing missing methods.
21
+ #
22
+ # @see Whois::Parsers::Example
23
+ # The Example parser for the list of all available methods.
24
+ #
25
+ class WhoisDomainRegistryNl < Base
26
+
27
+ # == Values for Status
28
+ #
29
+ # - free: the .nl domain name is still available for registration
30
+ # - withdrawn: the .nl domain name is barred from registration
31
+ # - excluded: the .nl domain name is excluded from registration
32
+ # - requested: an application for the .nl domain name is being processed
33
+ # - active: the .nl domain name has already been registered. (If you want to know who has registered the name, tick the ‘Extended search’ box. You will then be shown more information about whoever has registered the name.)
34
+ # - inactive: the .nl domain name has already been registered, but has not yet been added to the .nl zone file. (If you want to know who has registered the name, tick the ‘Extended search’ box. You will then be shown more information about whoever has registered the name.)
35
+ # - in quarantine: this .nl domain name's registration has been cancelled. Following cancellation, a domain name is placed in quarantine for forty days.
36
+ #
37
+ # @see https://www.sidn.nl/en/whois/
38
+ # @see https://www.sidn.nl/en/about-nl/whois/looking-up-a-domain-name/
39
+ #
40
+ property_supported :status do
41
+ if content_for_scanner =~ /Status:\s+(.+?)\n/
42
+ case $1.downcase
43
+ when "active"
44
+ :registered
45
+ when "in quarantine"
46
+ :redemption
47
+ when "inactive"
48
+ :inactive
49
+ else
50
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
51
+ end
52
+ else
53
+ :available
54
+ end
55
+ end
56
+
57
+ property_supported :available? do
58
+ status == :available
59
+ end
60
+
61
+ property_supported :registered? do
62
+ status != :available
63
+ end
64
+
65
+
66
+ property_supported :created_on do
67
+ if content_for_scanner =~ /Date registered:\s+(.+)\n/
68
+ parse_time($1)
69
+ end
70
+ end
71
+
72
+ property_supported :updated_on do
73
+ if content_for_scanner =~ /Record last updated:\s+(.+)\n/
74
+ parse_time($1)
75
+ end
76
+ end
77
+
78
+ property_not_supported :expires_on
79
+
80
+
81
+ property_supported :nameservers do
82
+ if content_for_scanner =~ /Domain nameservers:\n((.+\n)+)\n/
83
+ $1.split("\n").map do |line|
84
+ name, ipv4 = line.strip.split(/\s+/)
85
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+ # Checks whether the response has been throttled.
92
+ #
93
+ # @return [Boolean]
94
+ #
95
+ # @example
96
+ # whois.domain-registry.nl: only 1 request per second allowed, try again later
97
+ #
98
+ # @example
99
+ # whois.domain-registry.nl: daily whois-limit exceeded
100
+ #
101
+ def response_throttled?
102
+ case content_for_scanner
103
+ when /^#{Regexp.escape("whois.domain-registry.nl: only 1 request per second allowed, try again later")}/
104
+ true
105
+ when /^#{Regexp.escape("whois.domain-registry.nl: daily whois-limit exceeded")}/
106
+ true
107
+ else
108
+ false
109
+ end
110
+ end
111
+
112
+ # Checks whether this response contains a message
113
+ # that can be reconducted to a "WHOIS Server Unavailable" status.
114
+ #
115
+ # @return [Boolean]
116
+ def response_unavailable?
117
+ !!(content_for_scanner =~ /Server too busy, try again later/)
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+ end
@@ -0,0 +1,76 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ #
17
+ # = whois.domain.kg
18
+ #
19
+ # Parser for the whois.domain.kg 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 WhoisDomainKg < 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 =~ /This domain is available for registration/)
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: (.+?)\n/
48
+ parse_time($1)
49
+ end
50
+ end
51
+
52
+ property_supported :updated_on do
53
+ if content_for_scanner =~ /Record last updated on (.+?)\n/
54
+ parse_time($1)
55
+ end
56
+ end
57
+
58
+ property_supported :expires_on do
59
+ if content_for_scanner =~ /Record expires on (.+?)\n/
60
+ parse_time($1)
61
+ end
62
+ end
63
+
64
+
65
+ property_supported :nameservers do
66
+ if content_for_scanner =~ /Name servers in the listed order:\n\n((.+\n)+)\n/
67
+ $1.split("\n").map do |name|
68
+ Parser::Nameserver.new(:name => name.downcase)
69
+ end
70
+ end
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,121 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2015 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+ require 'whois/scanners/whois.domainregistry.ie.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.domainregistry.ie server.
18
+ #
19
+ # @see Whois::Parsers::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisDomainregistryIe < Base
23
+ include Scanners::Scannable
24
+
25
+ self.scanner = Scanners::WhoisDomainregistryIe
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
+ case node("ren-status", &:downcase)
42
+ when /^active/
43
+ :registered
44
+ when nil
45
+ if node("status:pending")
46
+ :registered
47
+ else
48
+ :available
49
+ end
50
+ else
51
+ Whois.bug!(ParserError, "Unknown status `#{node("status")}'.")
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
+ node("registration") { |value| parse_time(value) }
66
+ end
67
+
68
+ property_not_supported :updated_on
69
+
70
+ property_supported :expires_on do
71
+ node("renewal") { |value| parse_time(value) }
72
+ end
73
+
74
+
75
+ property_not_supported :registrar
76
+
77
+
78
+ property_supported :registrant_contacts do
79
+ node("descr") do |array|
80
+ Parser::Contact.new(
81
+ :type => Parser::Contact::TYPE_REGISTRANT,
82
+ :id => nil,
83
+ :name => array[0]
84
+ )
85
+ end
86
+ end
87
+
88
+ property_supported :admin_contacts do
89
+ build_contact("admin-c", Parser::Contact::TYPE_ADMINISTRATIVE)
90
+ end
91
+
92
+ property_supported :technical_contacts do
93
+ build_contact("tech-c", Parser::Contact::TYPE_TECHNICAL)
94
+ end
95
+
96
+
97
+ property_supported :nameservers do
98
+ Array.wrap(node("nserver")).map do |line|
99
+ name, ipv4 = line.split(/\s+/)
100
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
101
+ end
102
+ end
103
+
104
+
105
+ private
106
+
107
+ def build_contact(element, type)
108
+ Array.wrap(node(element)).map do |id|
109
+ next unless (contact = node("field:#{id}"))
110
+ Parser::Contact.new(
111
+ :type => type,
112
+ :id => id,
113
+ :name => contact["person"]
114
+ )
115
+ end.compact
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+ end