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