whoops
authorzapata <zapata>
Mon, 25 Dec 2006 21:47:37 +0000 (21:47 +0000)
committerzapata <zapata>
Mon, 25 Dec 2006 21:47:37 +0000 (21:47 +0000)
source/mir/module/EntityNotFoundExc.java [new file with mode: 0644]
source/mircoders/abuse/URLBlacklistFilterType.java [new file with mode: 0644]

diff --git a/source/mir/module/EntityNotFoundExc.java b/source/mir/module/EntityNotFoundExc.java
new file mode 100644 (file)
index 0000000..7a2f9c4
--- /dev/null
@@ -0,0 +1,38 @@
+/*\r
+ * Copyright (C) 2001-2006 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with  any library licensed under the Apache Software License,\r
+ * and distribute linked combinations including the two.  You must obey the\r
+ * GNU General Public License in all respects for all of the code used other than\r
+ * the above mentioned libraries.  If you modify this file, you may extend this\r
+ * exception to your version of the file, but you are not obligated to do so.\r
+ * If you do not wish to do so, delete this exception statement from your version.\r
+ */\r
+\r
+package mir.module;\r
+\r
+/**\r
+ * Exception thrown when an entity did not exist (but what expected to)\r
+ */\r
+public class EntityNotFoundExc extends ModuleExc {\r
+  public EntityNotFoundExc(String aMessage) {\r
+    super(aMessage);\r
+  }\r
+}\r
diff --git a/source/mircoders/abuse/URLBlacklistFilterType.java b/source/mircoders/abuse/URLBlacklistFilterType.java
new file mode 100644 (file)
index 0000000..1bb8b03
--- /dev/null
@@ -0,0 +1,374 @@
+package mircoders.abuse;\r
+\r
+import mir.entity.Entity;\r
+import mir.session.Request;\r
+import org.apache.oro.text.regex.MalformedPatternException;\r
+import org.apache.oro.text.regex.MatchResult;\r
+import org.apache.oro.text.regex.Pattern;\r
+import org.apache.oro.text.regex.PatternMatcherInput;\r
+import org.apache.oro.text.regex.Perl5Compiler;\r
+import org.apache.oro.text.regex.Perl5Matcher;\r
+\r
+import java.net.InetAddress;\r
+import java.net.UnknownHostException;\r
+import java.util.Arrays;\r
+import java.util.Collection;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+/**\r
+ * URL Blacklist filter type. Will perform a DNS request on URLs contained\r
+ * in a posting appended by the filter expression. An existing domain will\r
+ * cause in a positive filter outcome.\r
+ */\r
+public class URLBlacklistFilterType extends AbstractFilterType {\r
+  public URLBlacklistFilterType(String aName, Collection aWhiteList) {\r
+    super(aName);\r
+\r
+    whiteList = new HashSet(aWhiteList);\r
+  }\r
+\r
+  /**\r
+   *\r
+   */\r
+  public boolean validate(String anExpression) {\r
+    return anExpression.trim().length() > 0;\r
+  }\r
+\r
+  public FilterInstance constructFilterInstance(final String anExpression) throws AbuseExc {\r
+    return new FilterInstance() {\r
+      public boolean test(Entity anEntity, Request aRequest) {\r
+        Set domains = new HashSet();\r
+\r
+        Iterator i = anEntity.getFieldNames().iterator();\r
+\r
+        while (i.hasNext()) {\r
+          String field = anEntity.getFieldValue( (String) i.next());\r
+          if (field != null) {\r
+            harvestURLDomains(field, domains);\r
+          }\r
+        }\r
+\r
+        domains.removeAll(whiteList);\r
+\r
+        i = domains.iterator();\r
+        while (i.hasNext()) {\r
+          String domain = (String) i.next();\r
+\r
+          try {\r
+            InetAddress.getByName(domain + "." + anExpression);\r
+\r
+            return true;\r
+          }\r
+          catch (UnknownHostException e) {\r
+            // intentionally empty: the domain was not found, so the domain isn't blacklisted\r
+          }\r
+        }\r
+\r
+        return false;\r
+      }\r
+\r
+      public String status() {\r
+        return "";\r
+      }\r
+    };\r
+  }\r
+\r
+  public static void main(String[] someArguments) {\r
+    HashSet set = new HashSet();\r
+    harvestURLDomains("[URL]https://www.nel9la41.org/informatica[/URL] [URL]http://www.ceud.org/liberi[/URL] [URL]http://www.e6tate.org/danni[/URL] [URL]http://www.e6tate.org/shakira[/URL] [URL]http://www.ceud.org/musica[/URL] [URL]http://www.nel9la41.org/troie[/URL] [URL]http://www.nel9la41.org/corriere-della-sera[/URL] [URL]http://www.e6tate.org/serie-a[/URL] [URL]http://www.nel9la41.org/calciomercato[/URL] [URL]http://www.e6tate.org/vita[/URL] [URL]http://www.e6tate.org/pene[/URL] [URL]http://www.e6tate.org/barzellette[/URL] [URL]http://www.ceud.org/pagine-bianche[/URL] [URL]http://www.e6tate.org/playboy[/URL] [URL]http://www.nel9la41.org/totti[/URL] [URL]http://www.e6tate.org/trenitalia[/URL] [URL]http://www.ceud.org/bambini[/URL] [URL]http://www.ceud.org/pornografia[/URL] [URL]http://www.e6tate.org/corriere-della-sera[/URL] [URL]http://www.nel9la41.org/musica[/URL] [URL]http://www.ceud.org/serie-a[/URL] [URL]http://www.nel9la41.org/barzellette[/URL] [URL]http://www.ceud.org/turismo[/URL] [URL]http://www.ceud.org/del-piero[/URL] [URL]http://www.nel9la41.org/calcio[/URL] [URL]http://www.nel9la41.org/google[/URL] [URL]http://www.e6tate.org/sesso[/URL] [URL]http://www.nel9la41.org/jesse-mccartney[/URL]", set);\r
+    Iterator i = set.iterator();\r
+    while (i.hasNext()) {\r
+      System.out.println(i.next());\r
+    }\r
+  }\r
+\r
+\r
+  private static void harvestURLDomains(String someText, Set someResult) {\r
+    Perl5Matcher matcher = new Perl5Matcher();\r
+\r
+    PatternMatcherInput input =\r
+        new PatternMatcherInput(someText);\r
+\r
+    while(matcher.contains(input, URL_EXPRESSION)) {\r
+      MatchResult match = matcher.getMatch();\r
+      String domain = match.group(5);\r
+      if (domain!=null) {\r
+        someResult.add(stripDomain(domain));\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Turns a domain (e.g. www.indymedia.org) into its domain just above the top level (e.g. indymedia.org)\r
+   */\r
+  private static String stripDomain(String aDomain) {\r
+    String result = aDomain;\r
+    int pos = aDomain.lastIndexOf('.');\r
+    if (pos >= 0) {\r
+      pos = aDomain.lastIndexOf('.', pos-1);\r
+\r
+      // note: pos may be -1\r
+      result = aDomain.substring(pos+1);\r
+      if (TWO_PART_TOP_LEVEL_DOMAINS.contains(result)) {\r
+        pos = aDomain.lastIndexOf('.', pos-1);\r
+\r
+        // note: pos may be -1\r
+        result = aDomain.substring(pos+1);\r
+      }\r
+\r
+      return result;\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  static {\r
+    Perl5Compiler compiler = new Perl5Compiler();\r
+    try {\r
+        URL_EXPRESSION =\r
+            compiler.compile("((https://)|(http://)|(ftp://)){1}([a-zA-Z0-9_-]+.[a-zA-Z0-9_.:-]+)", Perl5Compiler.READ_ONLY_MASK);\r
+    }\r
+    catch (MalformedPatternException e) {\r
+      //\r
+    }\r
+  }\r
+\r
+\r
+  private Set whiteList;\r
+\r
+  private static Pattern URL_EXPRESSION;\r
+  private static Set TWO_PART_TOP_LEVEL_DOMAINS = new HashSet(\r
+      Arrays.asList(new String[] {"com.ac", "edu.ac", "gov.ac", "net.ac", "mil.ac", "org.ac",\r
+"com.ae", "net.ae", "org.ae", "gov.ae", "ac.ae", "co.ae",\r
+"sch.ae", "pro.ae", "com.ai", "org.ai", "edu.ai", "gov.ai",\r
+"com.ar", "net.ar", "org.ar", "gov.ar", "mil.ar", "edu.ar",\r
+"int.ar", "co.at", "ac.at", "or.at", "gv.at", "priv.at",\r
+"com.au", "gov.au", "org.au", "edu.au", "id.au", "oz.au",\r
+"info.au", "net.au", "asn.au", "csiro.au", "telememo.au",\r
+"conf.au", "otc.au", "id.au", "com.az", "net.az", "org.az",\r
+"com.bb", "net.bb", "org.bb", "ac.be", "belgie.be",\r
+"dns.be", "fgov.be", "com.bh", "gov.bh", "net.bh", "edu.bh",\r
+"org.bh", "com.bm", "edu.bm", "gov.bm", "org.bm", "net.bm",\r
+"adm.br", "adv.br", "agr.br", "am.br", "arq.br", "art.br",\r
+"ato.br", "bio.br", "bmd.br", "cim.br", "cng.br", "cnt.br",\r
+"com.br", "coop.br", "ecn.br", "edu.br", "eng.br", "esp.br",\r
+"etc.br", "eti.br", "far.br", "fm.br", "fnd.br", "fot.br",\r
+"fst.br", "g12.br", "ggf.br", "gov.br", "imb.br", "ind.br",\r
+"inf.br", "jor.br", "lel.br", "mat.br", "med.br", "mil.br",\r
+"mus.br", "net.br", "nom.br", "not.br", "ntr.br", "odo.br",\r
+"org.br", "ppg.br", "pro.br", "psc.br", "psi.br", "qsl.br",\r
+"rec.br", "slg.br", "srv.br", "tmp.br", "trd.br", "tur.br",\r
+"tv.br", "vet.br", "zlg.br", "com.bs", "net.bs", "org.bs",\r
+"com.bz", "net.bz", "org.bz", "ab.ca", "bc.ca", "mb.ca",\r
+"nb.ca", "nf.ca", "nl.ca", "ns.ca", "nt.ca", "nu.ca",\r
+"on.ca", "pe.ca", "qc.ca", "sk.ca", "yk.ca", "gc.ca",\r
+"co.ck", "net.ck", "org.ck", "edu.ck", "gov.ck", "com.cn",\r
+"edu.cn", "gov.cn", "net.cn", "org.cn", "ac.cn", "ah.cn",\r
+"bj.cn", "cq.cn", "gd.cn", "gs.cn", "gx.cn", "gz.cn",\r
+"hb.cn", "he.cn", "hi.cn", "hk.cn", "hl.cn", "hn.cn",\r
+"jl.cn", "js.cn", "ln.cn", "mo.cn", "nm.cn", "nx.cn",\r
+"qh.cn", "sc.cn", "sn.cn", "sh.cn", "sx.cn", "tj.cn",\r
+"tw.cn", "xj.cn", "xz.cn", "yn.cn", "zj.cn", "arts.co",\r
+"com.co", "edu.co", "firm.co", "gov.co", "info.co",\r
+"int.co", "nom.co", "mil.co", "org.co", "rec.co",\r
+"store.co", "web.co", "ac.cr", "co.cr", "ed.cr", "fi.cr",\r
+"go.cr", "or.cr", "sa.cr", "com.cu", "net.cu", "org.cu",\r
+"ac.cy", "com.cy", "gov.cy", "net.cy", "org.cy", "co.dk",\r
+"art.do", "com.do", "edu.do", "gov.do", "gob.do", "org.do",\r
+"mil.do", "net.do", "sld.do", "web.do", "com.dz", "org.dz",\r
+"net.dz", "gov.dz", "edu.dz", "ass.dz", "pol.dz", "art.dz",\r
+"com.ec", "k12.ec", "edu.ec", "fin.ec", "med.ec", "gov.ec",\r
+"mil.ec", "org.ec", "net.ec", "com.ee", "pri.ee", "fie.ee",\r
+"org.ee", "med.ee", "com.eg", "edu.eg", "eun.eg", "gov.eg",\r
+"net.eg", "org.eg", "sci.eg", "com.er", "net.er", "org.er",\r
+"edu.er", "mil.er", "gov.er", "ind.er", "com.es", "org.es",\r
+"gob.es", "edu.es", "nom.es", "com.et", "gov.et", "org.et",\r
+"edu.et", "net.et", "biz.et", "name.et", "info.et", "ac.fj",\r
+"com.fj", "gov.fj", "id.fj", "org.fj", "school.fj",\r
+"com.fk", "ac.fk", "gov.fk", "net.fk", "nom.fk", "org.fk",\r
+"asso.fr", "nom.fr", "barreau.fr", "com.fr", "prd.fr",\r
+"presse.fr", "tm.fr", "aeroport.fr", "assedic.fr",\r
+"avocat.fr", "avoues.fr", "cci.fr", "chambagri.fr",\r
+"chirurgiens-dentistes.fr", "experts-comptables.fr",\r
+"geometre-expert.fr", "gouv.fr", "greta.fr",\r
+"huissier-justice.fr", "medecin.fr", "notaires.fr", "pharmacien.fr",\r
+"port.fr", "veterinaire.fr", "com.ge", "edu.ge", "gov.ge",\r
+"mil.ge", "net.ge", "org.ge", "pvt.ge", "co.gg", "org.gg",\r
+"sch.gg", "ac.gg", "gov.gg", "ltd.gg", "ind.gg", "net.gg",\r
+"alderney.gg", "guernsey.gg", "sark.gg", "com.gr", "edu.gr",\r
+"gov.gr", "net.gr", "org.gr", "com.gt", "edu.gt", "net.gt",\r
+"gob.gt", "org.gt", "mil.gt", "ind.gt", "com.gu", "edu.gu",\r
+"net.gu", "org.gu", "gov.gu", "mil.gu", "com.hk", "net.hk",\r
+"org.hk", "idv.hk", "gov.hk", "edu.hk", "co.hu", "2000.hu",\r
+"erotika.hu", "jogasz.hu", "sex.hu", "video.hu", "info.hu",\r
+"agrar.hu", "film.hu", "konyvelo.hu", "shop.hu", "org.hu",\r
+"bolt.hu", "forum.hu", "lakas.hu", "suli.hu", "priv.hu",\r
+"casino.hu", "games.hu", "media.hu", "szex.hu", "sport.hu",\r
+"city.hu", "hotel.hu", "news.hu", "tozsde.hu", "tm.hu",\r
+"erotica.hu", "ingatlan.hu", "reklam.hu", "utazas.hu",\r
+"ac.id", "co.id", "go.id", "mil.id", "net.id", "or.id",\r
+"co.il", "net.il", "org.il", "ac.il", "gov.il", "k12.il",\r
+"muni.il", "idf.il", "co.im", "net.im", "org.im", "ac.im",\r
+"lkd.co.im", "gov.im", "nic.im", "plc.co.im", "co.in",\r
+"net.in", "ac.in", "ernet.in", "gov.in", "nic.in", "res.in",\r
+"gen.in", "firm.in", "mil.in", "org.in", "ind.in", "ac.ir",\r
+"co.ir", "gov.ir", "id.ir", "net.ir", "org.ir", "sch.ir",\r
+"ac.je", "co.je", "net.je", "org.je", "gov.je", "ind.je",\r
+"jersey.je", "ltd.je", "sch.je", "com.jo", "org.jo",\r
+"net.jo", "gov.jo", "edu.jo", "mil.jo", "ad.jp", "ac.jp",\r
+"co.jp", "go.jp", "or.jp", "ne.jp", "gr.jp", "ed.jp",\r
+"lg.jp", "net.jp", "org.jp", "gov.jp", "hokkaido.jp",\r
+"aomori.jp", "iwate.jp", "miyagi.jp", "akita.jp",\r
+"yamagata.jp", "fukushima.jp", "ibaraki.jp", "tochigi.jp",\r
+"gunma.jp", "saitama.jp", "chiba.jp", "tokyo.jp",\r
+"kanagawa.jp", "niigata.jp", "toyama.jp", "ishikawa.jp",\r
+"fukui.jp", "yamanashi.jp", "nagano.jp", "gifu.jp",\r
+"shizuoka.jp", "aichi.jp", "mie.jp", "shiga.jp", "kyoto.jp",\r
+"osaka.jp", "hyogo.jp", "nara.jp", "wakayama.jp",\r
+"tottori.jp", "shimane.jp", "okayama.jp", "hiroshima.jp",\r
+"yamaguchi.jp", "tokushima.jp", "kagawa.jp", "ehime.jp",\r
+"kochi.jp", "fukuoka.jp", "saga.jp", "nagasaki.jp",\r
+"kumamoto.jp", "oita.jp", "miyazaki.jp", "kagoshima.jp",\r
+"okinawa.jp", "sapporo.jp", "sendai.jp", "yokohama.jp",\r
+"kawasaki.jp", "nagoya.jp", "kobe.jp", "kitakyushu.jp",\r
+"utsunomiya.jp", "kanazawa.jp", "takamatsu.jp",\r
+"matsuyama.jp", "com.kg", "net.kg", "org.kg", "edu.kg",\r
+"gov.kg", "mil.kg", "com.kh", "net.kh", "org.kh", "per.kh",\r
+"edu.kh", "gov.kh", "mil.kh", "ac.kr", "co.kr", "go.kr",\r
+"ne.kr", "or.kr", "pe.kr", "re.kr", "seoul.kr",\r
+"kyonggi.kr", "com.kw", "net.kw", "org.kw", "edu.kw",\r
+"gov.kw", "com.la", "net.la", "org.la", "com.lb", "org.lb",\r
+"net.lb", "edu.lb", "gov.lb", "mil.lb", "com.lc", "edu.lc",\r
+"gov.lc", "net.lc", "org.lc", "com.lv", "net.lv", "org.lv",\r
+"edu.lv", "gov.lv", "mil.lv", "id.lv", "asn.lv", "conf.lv",\r
+"com.ly", "net.ly", "org.ly", "co.ma", "net.ma", "org.ma",\r
+"press.ma", "ac.ma", "com.mk", "com.mm", "net.mm", "org.mm",\r
+"edu.mm", "gov.mm", "com.mn", "org.mn", "edu.mn", "gov.mn",\r
+"museum.mn", "com.mo", "net.mo", "org.mo", "edu.mo",\r
+"gov.mo", "com.mt", "net.mt", "org.mt", "edu.mt", "tm.mt",\r
+"uu.mt", "com.mx", "net.mx", "org.mx", "gob.mx", "edu.mx",\r
+"com.my", "org.my", "gov.my", "edu.my", "net.my", "com.na",\r
+"org.na", "net.na", "alt.na", "edu.na", "cul.na", "unam.na",\r
+"telecom.na", "com.nc", "net.nc", "org.nc", "ac.ng",\r
+"edu.ng", "sch.ng", "com.ng", "gov.ng", "org.ng", "net.ng",\r
+"gob.ni", "com.ni", "net.ni", "edu.ni", "nom.ni", "org.ni",\r
+"com.np", "net.np", "org.np", "gov.np", "edu.np", "ac.nz",\r
+"co.nz", "cri.nz", "gen.nz", "geek.nz", "govt.nz", "iwi.nz",\r
+"maori.nz", "mil.nz", "net.nz", "org.nz", "school.nz",\r
+"com.om", "co.om", "edu.om", "ac.om", "gov.om", "net.om",\r
+"org.om", "mod.om", "museum.om", "biz.om", "pro.om",\r
+"med.om", "com.pa", "net.pa", "org.pa", "edu.pa", "ac.pa",\r
+"gob.pa", "sld.pa", "edu.pe", "gob.pe", "nom.pe", "mil.pe",\r
+"org.pe", "com.pe", "net.pe", "com.pg", "net.pg", "ac.pg",\r
+"com.ph", "net.ph", "org.ph", "mil.ph", "ngo.ph", "aid.pl",\r
+"agro.pl", "atm.pl", "auto.pl", "biz.pl", "com.pl",\r
+"edu.pl", "gmina.pl", "gsm.pl", "info.pl", "mail.pl",\r
+"miasta.pl", "media.pl", "mil.pl", "net.pl",\r
+"nieruchomosci.pl", "nom.pl", "org.pl", "pc.pl",\r
+"powiat.pl", "priv.pl", "realestate.pl", "rel.pl", "sex.pl",\r
+"shop.pl", "sklep.pl", "sos.pl", "szkola.pl", "targi.pl",\r
+"tm.pl", "tourism.pl", "travel.pl", "turystyka.pl",\r
+"com.pk", "net.pk", "edu.pk", "org.pk", "fam.pk", "biz.pk",\r
+"web.pk", "gov.pk", "gob.pk", "gok.pk", "gon.pk", "gop.pk",\r
+"gos.pk", "edu.ps", "gov.ps", "plo.ps", "sec.ps", "com.pt",\r
+"edu.pt", "gov.pt", "int.pt", "net.pt", "nome.pt", "org.pt",\r
+"publ.pt", "com.py", "net.py", "org.py", "edu.py", "com.qa",\r
+"net.qa", "org.qa", "edu.qa", "gov.qa", "asso.re", "com.re",\r
+"nom.re", "com.ro", "org.ro", "tm.ro", "nt.ro", "nom.ro",\r
+"info.ro", "rec.ro", "arts.ro", "firm.ro", "store.ro",\r
+"www.ro", "ac.ru", "adygeya.ru", "altai.ru", "amur.ru",\r
+"amursk.ru", "arkhangelsk.ru", "astrakhan.ru", "baikal.ru",\r
+"bashkiria.ru", "belgorod.ru", "bir.ru", "bryansk.ru",\r
+"buryatia.ru", "cbg.ru", "chel.ru", "chelyabinsk.ru",\r
+"chita.ru", "chukotka.ru", "chuvashia.ru", "cmw.ru",\r
+"com.ru", "dagestan.ru", "dudinka.ru", "e-burg.ru",\r
+"edu.ru", "fareast.ru", "gov.ru", "grozny.ru", "int.ru",\r
+"irkutsk.ru", "ivanovo.ru", "izhevsk.ru", "jamal.ru",\r
+"jar.ru", "joshkar-ola.ru", "k-uralsk.ru", "kalmykia.ru",\r
+"kaluga.ru", "kamchatka.ru", "karelia.ru", "kazan.ru",\r
+"kchr.ru", "kemerovo.ru", "khabarovsk.ru", "khakassia.ru",\r
+"khv.ru", "kirov.ru", "kms.ru", "koenig.ru", "komi.ru",\r
+"kostroma.ru", "krasnoyarsk.ru", "kuban.ru", "kurgan.ru",\r
+"kursk.ru", "kustanai.ru", "kuzbass.ru", "lipetsk.ru",\r
+"magadan.ru", "magnitka.ru", "mari-el.ru", "mari.ru",\r
+"marine.ru", "mil.ru", "mordovia.ru", "mosreg.ru", "msk.ru",\r
+"murmansk.ru", "mytis.ru", "nakhodka.ru", "nalchik.ru",\r
+"net.ru", "nkz.ru", "nnov.ru", "norilsk.ru", "nov.ru",\r
+"novosibirsk.ru", "nsk.ru", "omsk.ru", "orenburg.ru",\r
+"org.ru", "oryol.ru", "oskol.ru", "palana.ru", "penza.ru",\r
+"perm.ru", "pp.ru", "pskov.ru", "ptz.ru", "pyatigorsk.ru",\r
+"rnd.ru", "rubtsovsk.ru", "ryazan.ru", "sakhalin.ru",\r
+"samara.ru", "saratov.ru", "simbirsk.ru", "smolensk.ru",\r
+"snz.ru", "spb.ru", "stavropol.ru", "stv.ru", "surgut.ru",\r
+"syzran.ru", "tambov.ru", "tatarstan.ru", "test.ru",\r
+"tom.ru", "tomsk.ru", "tsaritsyn.ru", "tsk.ru", "tula.ru",\r
+"tuva.ru", "tver.ru", "tyumen.ru", "udm.ru", "udmurtia.ru",\r
+"ulan-ude.ru", "vdonsk.ru", "vladikavkaz.ru", "vladimir.ru",\r
+"vladivostok.ru", "volgograd.ru", "vologda.ru",\r
+"voronezh.ru", "vrn.ru", "vyatka.ru", "yakutia.ru",\r
+"yamal.ru", "yaroslavl.ru", "yekaterinburg.ru",\r
+"yuzhno-sakhalinsk.ru", "zgrad.ru", "com.sa", "edu.sa", "sch.sa",\r
+"med.sa", "gov.sa", "net.sa", "org.sa", "pub.sa", "com.sb",\r
+"net.sb", "org.sb", "edu.sb", "gov.sb", "com.sd", "net.sd",\r
+"org.sd", "edu.sd", "sch.sd", "med.sd", "gov.sd", "tm.se",\r
+"press.se", "parti.se", "brand.se", "fh.se", "fhsk.se",\r
+"fhv.se", "komforb.se", "kommunalforbund.se", "komvux.se",\r
+"lanarb.se", "lanbib.se", "naturbruksgymn.se", "sshn.se",\r
+"org.se", "pp.se", "com.sg", "net.sg", "org.sg", "edu.sg",\r
+"gov.sg", "per.sg", "com.sh", "net.sh", "org.sh", "edu.sh",\r
+"gov.sh", "mil.sh", "gov.st", "saotome.st", "principe.st",\r
+"consulado.st", "embaixada.st", "org.st", "edu.st",\r
+"net.st", "com.st", "store.st", "mil.st", "co.st", "com.sv",\r
+"org.sv", "edu.sv", "gob.sv", "red.sv", "com.sy", "net.sy",\r
+"org.sy", "gov.sy", "ac.th", "co.th", "go.th", "net.th",\r
+"or.th", "com.tn", "net.tn", "org.tn", "edunet.tn",\r
+"gov.tn", "ens.tn", "fin.tn", "nat.tn", "ind.tn", "info.tn",\r
+"intl.tn", "rnrt.tn", "rnu.tn", "rns.tn", "tourism.tn",\r
+"com.tr", "net.tr", "org.tr", "edu.tr", "gov.tr", "mil.tr",\r
+"bbs.tr", "k12.tr", "gen.tr", "co.tt", "com.tt", "org.tt",\r
+"net.tt", "biz.tt", "info.tt", "pro.tt", "int.tt",\r
+"coop.tt", "jobs.tt", "mobi.tt", "travel.tt", "museum.tt",\r
+"aero.tt", "name.tt", "gov.tt", "edu.tt", "nic.tt", "us.tt",\r
+"uk.tt", "ca.tt", "eu.tt", "es.tt", "fr.tt", "it.tt",\r
+"se.tt", "dk.tt", "be.tt", "de.tt", "at.tt", "au.tt",\r
+"co.tv", "com.tw", "net.tw", "org.tw", "edu.tw", "idv.tw",\r
+"gov.tw", "com.ua", "gov.ua", "net.ua", "edu.ua", "org.ua",\r
+"in.ua", "cherkassy.ua", "ck.ua", "chernigov.ua", "cn.ua",\r
+"chernovtsy.ua", "cv.ua", "crimea.ua", "dnepropetrovsk.ua",\r
+"dp.ua", "donetsk.ua", "dn.ua", "ivano-frankivsk.ua",\r
+"if.ua", "kharkov.ua", "kh.ua", "kherson.ua", "ks.ua",\r
+"khmelnitskiy.ua", "km.ua", "kiev.ua", "kv.ua",\r
+"kirovograd.ua", "kr.ua", "lugansk.ua", "lg.ua", "lutsk.ua",\r
+"lviv.ua", "nikolaev.ua", "mk.ua", "odessa.ua", "od.ua",\r
+"poltava.ua", "pl.ua", "rovno.ua", "rv.ua", "sebastopol.ua",\r
+"sumy.ua", "ternopil.ua", "te.ua", "uzhgorod.ua",\r
+"vinnica.ua", "vn.ua", "zaporizhzhe.ua", "zp.ua",\r
+"zhitomir.ua", "zt.ua", "ac.ug", "co.ug", "or.ug", "go.ug",\r
+"co.uk", "me.uk", "org.uk", "edu.uk", "ltd.uk", "plc.uk",\r
+"net.uk", "sch.uk", "nic.uk", "ac.uk", "gov.uk", "nhs.uk",\r
+"police.uk", "mod.uk", "dni.us", "fed.us", "com.uy",\r
+"edu.uy", "net.uy", "org.uy", "gub.uy", "mil.uy", "com.ve",\r
+"net.ve", "org.ve", "co.ve", "edu.ve", "gov.ve", "mil.ve",\r
+"arts.ve", "bib.ve", "firm.ve", "info.ve", "int.ve",\r
+"nom.ve", "rec.ve", "store.ve", "tec.ve", "web.ve", "co.vi",\r
+"net.vi", "org.vi", "com.vn", "biz.vn", "edu.vn", "gov.vn",\r
+"net.vn", "org.vn", "int.vn", "ac.vn", "pro.vn", "info.vn",\r
+"health.vn", "name.vn", "com.vu", "edu.vu", "net.vu",\r
+"org.vu", "de.vu", "ch.vu", "fr.vu", "com.ws", "net.ws",\r
+"org.ws", "gov.ws", "edu.ws", "ac.yu", "co.yu", "edu.yu",\r
+"org.yu", "com.ye", "net.ye", "org.ye", "gov.ye", "edu.ye",\r
+"mil.ye", "ac.za", "alt.za", "bourse.za", "city.za",\r
+"co.za", "edu.za", "gov.za", "law.za", "mil.za", "net.za",\r
+"ngo.za", "nom.za", "org.za", "school.za", "tm.za",\r
+"web.za", "co.zw", "ac.zw", "org.zw", "gov.zw", "eu.org",\r
+"au.com", "br.com", "cn.com", "de.com", "de.net", "eu.com",\r
+"gb.com", "gb.net", "hu.com", "no.com", "qc.com", "ru.com",\r
+"sa.com", "se.com", "uk.com", "uk.net", "us.com", "uy.com",\r
+"za.com", "dk.org", "tel.no", "fax.nr", "mob.nr",\r
+"mobil.nr", "mobile.nr", "tel.nr", "tlf.nr", "e164.arpa"\r
+      })\r
+  );\r
+}\r
+\r