diff --git a/README.md b/README.md
index 37a9d6f..851e72e 100644
--- a/README.md
+++ b/README.md
@@ -2,18 +2,25 @@
# Zoraxy
-General purpose request (reverse) proxy and forwarding tool for low power devices. Now written in Go!
+General purpose request (reverse) proxy and forwarding tool for networking noobs. Now written in Go!
+
+*Zoraxy v3 HTTP proxy config is not compatible with the older v2. If you are looking for the legacy version of Zoraxy, take a look at the [v2 branch](https://github.com/tobychui/zoraxy/tree/v2)*
### Features
- Simple to use interface with detail in-system instructions
- Reverse Proxy
- - Subdomain Reverse Proxy
- - Virtual Directory Reverse Proxy
+ - Virtual Directory
+ - Basic Auth
+ - Custom Headers
- Redirection Rules
- TLS / SSL setup and deploy
-- Blacklist by country or IP address (single IP, CIDR or wildcard for beginners)
+ - ACME features like auto-renew to serve your sites in http**s**
+ - SNI support (one certificate contains multiple host names)
+
+- Blacklist / Whitelist by country or IP address (single IP, CIDR or wildcard for beginners)
- Global Area Network Controller Web UI (ZeroTier not included)
+- TCP Tunneling / Proxy
- Integrated Up-time Monitor
- Web-SSH Terminal
- Utilities
@@ -83,8 +90,6 @@ Usage of zoraxy:
Disable authentication for management interface
-port string
Management web interface listening port (default ":8000")
- -rpt string
- Reserved
-sshlb
Allow loopback web ssh connection (DANGER)
-version
@@ -109,45 +114,12 @@ If you already have an upstream reverse proxy server in place with permission ma
*Note: For security reaons, you should only enable no-auth if you are running Zoraxy in a trusted environment or with another authentication management proxy in front.*
-#### Use with ArozOS
-
-The [ArozOS](https://arozos.com) subservice is a built-in, permission-managed, reverse proxy server. To use Zoraxy with ArozOS, connect to your ArozOS host via SSH and use the following command to install Zoraxy:
-
-```bash
-# cd into your ArozOS subservice folder. Sometimes it is under ~/arozos/src/subservice.
-cd ~/arozos/subservices
-mkdir zoraxy
-cd ./zoraxy
-
-# Download the release binary from Github release.
-wget {binary executable link from release page}
-
-# Set permission. Change this if required.
-sudo chmod 775 -R ./
-
-# Start zoraxy to see if the downloaded arch is correct.
-./zoraxy
-
-# After unzipping, press Ctrl + C to kill it.
-# Rename it to validate the ArozOS subservice binary format.
-mv ./zoraxy zoraxy_linux_amd64
-
-# If you are using SBCs with a different CPU arch, use the following names:
-# mv ./zoraxy zoraxy_linux_arm
-# mv ./zoraxy zoraxy_linux_arm64
-
-# Restart ArozOS
-sudo systemctl restart arozos
-```
-
-To start the module, go to System Settings > Modules > Subservice and enable it in the menu. You should be able to see a new module named "Zoraxy" pop up in the start menu.
-
## Screenshots
-
-

+
+
More screenshots on the wikipage [Screenshots](https://github.com/tobychui/zoraxy/wiki/Screenshots)!
## FAQ
@@ -194,5 +166,5 @@ If you like the project and want to support us, please consider a donation. You
## License
-This project is open-sourced under AGPL. I open-sourced this project so everyone can check for security issues and benefit all users. **If you plan to use this project in a commercial environment (which violate the AGPL terms), please contact toby@imuslab.com for an alternative commercial license.**
+This project is open-sourced under AGPL. I open-sourced this project so everyone can check for security issues and benefit all users. **If you plan to use this project in a commercial environment (which violate the AGPL terms), please contact toby@imuslab.com for an alternative license.**
diff --git a/docker/Dockerfile b/docker/Dockerfile
index eb2b15b..8ffd402 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -3,8 +3,6 @@ FROM docker.io/golang:alpine
ARG VERSION
RUN apk add --no-cache bash netcat-openbsd sudo
-# Alternatives for security
-RUN apk add --no-cache openssl=3.1.4-r1
RUN mkdir -p /opt/zoraxy/source/ &&\
mkdir -p /opt/zoraxy/config/ &&\
diff --git a/img/screenshots/0_1.png b/img/screenshots/0_1.png
deleted file mode 100644
index d01f12f..0000000
Binary files a/img/screenshots/0_1.png and /dev/null differ
diff --git a/img/screenshots/0_2.png b/img/screenshots/0_2.png
deleted file mode 100644
index 072d3bc..0000000
Binary files a/img/screenshots/0_2.png and /dev/null differ
diff --git a/img/screenshots/1.png b/img/screenshots/1.png
index 4704cb1..f12e238 100644
Binary files a/img/screenshots/1.png and b/img/screenshots/1.png differ
diff --git a/img/screenshots/10_1.png b/img/screenshots/10_1.png
deleted file mode 100644
index 97509c8..0000000
Binary files a/img/screenshots/10_1.png and /dev/null differ
diff --git a/img/screenshots/10_2.png b/img/screenshots/10_2.png
deleted file mode 100644
index 6945614..0000000
Binary files a/img/screenshots/10_2.png and /dev/null differ
diff --git a/img/screenshots/2.png b/img/screenshots/2.png
index 2f50df3..06a03ef 100644
Binary files a/img/screenshots/2.png and b/img/screenshots/2.png differ
diff --git a/img/screenshots/3.png b/img/screenshots/3.png
deleted file mode 100644
index aadf70d..0000000
Binary files a/img/screenshots/3.png and /dev/null differ
diff --git a/img/screenshots/4.png b/img/screenshots/4.png
deleted file mode 100644
index 08ea14e..0000000
Binary files a/img/screenshots/4.png and /dev/null differ
diff --git a/img/screenshots/5.png b/img/screenshots/5.png
deleted file mode 100644
index 5ae638c..0000000
Binary files a/img/screenshots/5.png and /dev/null differ
diff --git a/img/screenshots/6.png b/img/screenshots/6.png
deleted file mode 100644
index 6cb5290..0000000
Binary files a/img/screenshots/6.png and /dev/null differ
diff --git a/img/screenshots/7.png b/img/screenshots/7.png
deleted file mode 100644
index 8a1f9cf..0000000
Binary files a/img/screenshots/7.png and /dev/null differ
diff --git a/img/screenshots/8.png b/img/screenshots/8.png
deleted file mode 100644
index 21b8b6c..0000000
Binary files a/img/screenshots/8.png and /dev/null differ
diff --git a/img/screenshots/9.png b/img/screenshots/9.png
deleted file mode 100644
index 26a8158..0000000
Binary files a/img/screenshots/9.png and /dev/null differ
diff --git a/src/accesslist.go b/src/accesslist.go
index dc26fb4..a52d878 100644
--- a/src/accesslist.go
+++ b/src/accesslist.go
@@ -4,6 +4,8 @@ import (
"encoding/json"
"net/http"
+ strip "github.com/grokify/html-strip-tags-go"
+ "imuslab.com/zoraxy/mod/geodb"
"imuslab.com/zoraxy/mod/utils"
)
@@ -115,7 +117,7 @@ func handleListWhitelisted(w http.ResponseWriter, r *http.Request) {
bltype = "country"
}
- resulst := []string{}
+ resulst := []*geodb.WhitelistEntry{}
if bltype == "country" {
resulst = geodbStore.GetAllWhitelistedCountryCode()
} else if bltype == "ip" {
@@ -134,7 +136,10 @@ func handleCountryWhitelistAdd(w http.ResponseWriter, r *http.Request) {
return
}
- geodbStore.AddCountryCodeToWhitelist(countryCode)
+ comment, _ := utils.PostPara(r, "comment")
+ comment = strip.StripTags(comment)
+
+ geodbStore.AddCountryCodeToWhitelist(countryCode, comment)
utils.SendOK(w)
}
@@ -158,7 +163,10 @@ func handleIpWhitelistAdd(w http.ResponseWriter, r *http.Request) {
return
}
- geodbStore.AddIPToWhiteList(ipAddr)
+ comment, _ := utils.PostPara(r, "comment")
+ comment = strip.StripTags(comment)
+
+ geodbStore.AddIPToWhiteList(ipAddr, comment)
}
func handleIpWhitelistRemove(w http.ResponseWriter, r *http.Request) {
diff --git a/src/acme.go b/src/acme.go
index cdd04dc..fb328b8 100644
--- a/src/acme.go
+++ b/src/acme.go
@@ -103,6 +103,9 @@ func AcmeCheckAndHandleRenewCertificate(w http.ResponseWriter, r *http.Request)
utils.SendErrorResponse(w, "ACME renew only support web server listening on port 80 (http) or 443 (https)")
}
+ //Add a 3 second delay to make sure everything is settle down
+ time.Sleep(3 * time.Second)
+
// Pass over to the acmeHandler to deal with the communication
acmeHandler.HandleRenewCertificate(w, r)
diff --git a/src/api.go b/src/api.go
index 5831564..14df881 100644
--- a/src/api.go
+++ b/src/api.go
@@ -56,9 +56,16 @@ func initAPIs() {
authRouter.HandleFunc("/api/proxy/useHttpsRedirect", HandleUpdateHttpsRedirect)
authRouter.HandleFunc("/api/proxy/listenPort80", HandleUpdatePort80Listener)
authRouter.HandleFunc("/api/proxy/requestIsProxied", HandleManagementProxyCheck)
- //Reverse proxy root related APIs
- authRouter.HandleFunc("/api/proxy/root/listOptions", HandleRootRouteOptionList)
- authRouter.HandleFunc("/api/proxy/root/updateOptions", HandleRootRouteOptionsUpdate)
+ authRouter.HandleFunc("/api/proxy/developmentMode", HandleDevelopmentModeChange)
+ //Reverse proxy virtual directory APIs
+ authRouter.HandleFunc("/api/proxy/vdir/list", ReverseProxyListVdir)
+ authRouter.HandleFunc("/api/proxy/vdir/add", ReverseProxyAddVdir)
+ authRouter.HandleFunc("/api/proxy/vdir/del", ReverseProxyDeleteVdir)
+ authRouter.HandleFunc("/api/proxy/vdir/edit", ReverseProxyEditVdir)
+ //Reverse proxy user define header apis
+ authRouter.HandleFunc("/api/proxy/header/list", HandleCustomHeaderList)
+ authRouter.HandleFunc("/api/proxy/header/add", HandleCustomHeaderAdd)
+ authRouter.HandleFunc("/api/proxy/header/remove", HandleCustomHeaderRemove)
//Reverse proxy auth related APIs
authRouter.HandleFunc("/api/proxy/auth/exceptions/list", ListProxyBasicAuthExceptionPaths)
authRouter.HandleFunc("/api/proxy/auth/exceptions/add", AddProxyBasicAuthExceptionPaths)
@@ -115,6 +122,8 @@ func initAPIs() {
authRouter.HandleFunc("/api/gan/network/name", ganManager.HandleNetworkNaming)
//authRouter.HandleFunc("/api/gan/network/detail", ganManager.HandleNetworkDetails)
authRouter.HandleFunc("/api/gan/network/setRange", ganManager.HandleSetRanges)
+ authRouter.HandleFunc("/api/gan/network/join", ganManager.HandleServerJoinNetwork)
+ authRouter.HandleFunc("/api/gan/network/leave", ganManager.HandleServerLeaveNetwork)
authRouter.HandleFunc("/api/gan/members/list", ganManager.HandleMemberList)
authRouter.HandleFunc("/api/gan/members/ip", ganManager.HandleMemberIP)
authRouter.HandleFunc("/api/gan/members/name", ganManager.HandleMemberNaming)
@@ -175,7 +184,7 @@ func initAPIs() {
authRouter.HandleFunc("/api/webserv/status", staticWebServer.HandleGetStatus)
authRouter.HandleFunc("/api/webserv/start", staticWebServer.HandleStartServer)
authRouter.HandleFunc("/api/webserv/stop", staticWebServer.HandleStopServer)
- authRouter.HandleFunc("/api/webserv/setPort", staticWebServer.HandlePortChange)
+ authRouter.HandleFunc("/api/webserv/setPort", HandleStaticWebServerPortChange)
authRouter.HandleFunc("/api/webserv/setDirList", staticWebServer.SetEnableDirectoryListing)
if *allowWebFileManager {
//Web Directory Manager file operation functions
diff --git a/src/cert.go b/src/cert.go
index 567fd7c..2f70825 100644
--- a/src/cert.go
+++ b/src/cert.go
@@ -51,7 +51,7 @@ func handleListCertificate(w http.ResponseWriter, r *http.Request) {
results := []*CertInfo{}
for _, filename := range filenames {
- certFilepath := filepath.Join(tlsCertManager.CertStore, filename+".crt")
+ certFilepath := filepath.Join(tlsCertManager.CertStore, filename+".pem")
//keyFilepath := filepath.Join(tlsCertManager.CertStore, filename+".key")
fileInfo, err := os.Stat(certFilepath)
if err != nil {
@@ -248,7 +248,7 @@ func handleCertUpload(w http.ResponseWriter, r *http.Request) {
}
if keytype == "pub" {
- overWriteFilename = domain + ".crt"
+ overWriteFilename = domain + ".pem"
} else if keytype == "pri" {
overWriteFilename = domain + ".key"
} else {
@@ -287,6 +287,9 @@ func handleCertUpload(w http.ResponseWriter, r *http.Request) {
return
}
+ //Update cert list
+ tlsCertManager.UpdateLoadedCertList()
+
// send response
fmt.Fprintln(w, "File upload successful!")
}
diff --git a/src/config.go b/src/config.go
index c012467..5978769 100644
--- a/src/config.go
+++ b/src/config.go
@@ -3,6 +3,7 @@ package main
import (
"archive/zip"
"encoding/json"
+ "errors"
"fmt"
"io"
"net/http"
@@ -35,97 +36,118 @@ type Record struct {
BasicAuthExceptionRules []*dynamicproxy.BasicAuthExceptionRule
}
-// Save a reverse proxy config record to file
-func SaveReverseProxyConfigToFile(proxyConfigRecord *Record) error {
- //TODO: Make this accept new def types
- os.MkdirAll("./conf/proxy/", 0775)
- filename := getFilenameFromRootName(proxyConfigRecord.Rootname)
-
- //Generate record
- thisRecord := proxyConfigRecord
-
- //Write to file
- js, _ := json.MarshalIndent(thisRecord, "", " ")
- return os.WriteFile(filepath.Join("./conf/proxy/", filename), js, 0775)
-}
-
-// Save a running reverse proxy endpoint to file (with automatic endpoint to record conversion)
-func SaveReverseProxyEndpointToFile(proxyEndpoint *dynamicproxy.ProxyEndpoint) error {
- recordToSave, err := ConvertProxyEndpointToRecord(proxyEndpoint)
+/*
+Load Reverse Proxy Config from file and append it to current runtime proxy router
+*/
+func LoadReverseProxyConfig(configFilepath string) error {
+ //Load the config file from disk
+ endpointConfig, err := os.ReadFile(configFilepath)
if err != nil {
return err
}
- return SaveReverseProxyConfigToFile(recordToSave)
-}
-func RemoveReverseProxyConfigFile(rootname string) error {
- filename := getFilenameFromRootName(rootname)
- removePendingFile := strings.ReplaceAll(filepath.Join("./conf/proxy/", filename), "\\", "/")
- SystemWideLogger.Println("Config Removed: ", removePendingFile)
- if utils.FileExists(removePendingFile) {
- err := os.Remove(removePendingFile)
- if err != nil {
- SystemWideLogger.PrintAndLog("Proxy", "Unabel to remove config file", err)
- return err
- }
+ //Parse it into dynamic proxy endpoint
+ thisConfigEndpoint := dynamicproxy.ProxyEndpoint{}
+ err = json.Unmarshal(endpointConfig, &thisConfigEndpoint)
+ if err != nil {
+ return err
}
- //File already gone
+ //Matching domain not set. Assume root
+ if thisConfigEndpoint.RootOrMatchingDomain == "" {
+ thisConfigEndpoint.RootOrMatchingDomain = "/"
+ }
+
+ if thisConfigEndpoint.ProxyType == dynamicproxy.ProxyType_Root {
+ //This is a root config file
+ rootProxyEndpoint, err := dynamicProxyRouter.PrepareProxyRoute(&thisConfigEndpoint)
+ if err != nil {
+ return err
+ }
+
+ dynamicProxyRouter.SetProxyRouteAsRoot(rootProxyEndpoint)
+
+ } else if thisConfigEndpoint.ProxyType == dynamicproxy.ProxyType_Host {
+ //This is a host config file
+ readyProxyEndpoint, err := dynamicProxyRouter.PrepareProxyRoute(&thisConfigEndpoint)
+ if err != nil {
+ return err
+ }
+
+ dynamicProxyRouter.AddProxyRouteToRuntime(readyProxyEndpoint)
+ } else {
+ return errors.New("not supported proxy type")
+ }
+
+ SystemWideLogger.PrintAndLog("Proxy", thisConfigEndpoint.RootOrMatchingDomain+" -> "+thisConfigEndpoint.Domain+" routing rule loaded", nil)
return nil
}
-// Return ptype, rootname and proxyTarget, error if any
-func LoadReverseProxyConfig(filename string) (*Record, error) {
- thisRecord := Record{
- ProxyType: "",
- Rootname: "",
- ProxyTarget: "",
- UseTLS: false,
+func filterProxyConfigFilename(filename string) string {
+ //Filter out wildcard characters
+ filename = strings.ReplaceAll(filename, "*", "(ST)")
+ filename = strings.ReplaceAll(filename, "?", "(QM)")
+ filename = strings.ReplaceAll(filename, "[", "(OB)")
+ filename = strings.ReplaceAll(filename, "]", "(CB)")
+ filename = strings.ReplaceAll(filename, "#", "(HT)")
+ return filepath.ToSlash(filename)
+}
+
+func SaveReverseProxyConfig(endpoint *dynamicproxy.ProxyEndpoint) error {
+ //Get filename for saving
+ filename := filepath.Join("./conf/proxy/", endpoint.RootOrMatchingDomain+".config")
+ if endpoint.ProxyType == dynamicproxy.ProxyType_Root {
+ filename = "./conf/proxy/root.config"
+ }
+
+ filename = filterProxyConfigFilename(filename)
+
+ //Save config to file
+ js, err := json.MarshalIndent(endpoint, "", " ")
+ if err != nil {
+ return err
+ }
+
+ return os.WriteFile(filename, js, 0775)
+}
+
+func RemoveReverseProxyConfig(endpoint string) error {
+ filename := filepath.Join("./conf/proxy/", endpoint+".config")
+ if endpoint == "/" {
+ filename = "./conf/proxy/root.config"
+ }
+
+ filename = filterProxyConfigFilename(filename)
+
+ if !utils.FileExists(filename) {
+ return errors.New("target endpoint not exists")
+ }
+ return os.Remove(filename)
+}
+
+// Get the default root config that point to the internal static web server
+// this will be used if root config is not found (new deployment / missing root.config file)
+func GetDefaultRootConfig() (*dynamicproxy.ProxyEndpoint, error) {
+ //Default settings
+ rootProxyEndpoint, err := dynamicProxyRouter.PrepareProxyRoute(&dynamicproxy.ProxyEndpoint{
+ ProxyType: dynamicproxy.ProxyType_Root,
+ RootOrMatchingDomain: "/",
+ Domain: "127.0.0.1:" + staticWebServer.GetListeningPort(),
+ RequireTLS: false,
BypassGlobalTLS: false,
- SkipTlsValidation: false,
+ SkipCertValidations: false,
+ VirtualDirectories: []*dynamicproxy.VirtualDirectoryEndpoint{},
RequireBasicAuth: false,
BasicAuthCredentials: []*dynamicproxy.BasicAuthCredentials{},
BasicAuthExceptionRules: []*dynamicproxy.BasicAuthExceptionRule{},
- }
-
- configContent, err := os.ReadFile(filename)
+ DefaultSiteOption: dynamicproxy.DefaultSite_InternalStaticWebServer,
+ DefaultSiteValue: "",
+ })
if err != nil {
- return &thisRecord, err
+ return nil, err
}
- //Unmarshal the content into config
- err = json.Unmarshal(configContent, &thisRecord)
- if err != nil {
- return &thisRecord, err
- }
-
- //Return it
- return &thisRecord, nil
-}
-
-// Convert a running proxy endpoint object into a save-able record struct
-func ConvertProxyEndpointToRecord(targetProxyEndpoint *dynamicproxy.ProxyEndpoint) (*Record, error) {
- thisProxyConfigRecord := Record{
- ProxyType: targetProxyEndpoint.GetProxyTypeString(),
- Rootname: targetProxyEndpoint.RootOrMatchingDomain,
- ProxyTarget: targetProxyEndpoint.Domain,
- UseTLS: targetProxyEndpoint.RequireTLS,
- BypassGlobalTLS: targetProxyEndpoint.BypassGlobalTLS,
- SkipTlsValidation: targetProxyEndpoint.SkipCertValidations,
- RequireBasicAuth: targetProxyEndpoint.RequireBasicAuth,
- BasicAuthCredentials: targetProxyEndpoint.BasicAuthCredentials,
- BasicAuthExceptionRules: targetProxyEndpoint.BasicAuthExceptionRules,
- }
-
- return &thisProxyConfigRecord, nil
-}
-
-func getFilenameFromRootName(rootname string) string {
- //Generate a filename for this rootname
- filename := strings.ReplaceAll(rootname, ".", "_")
- filename = strings.ReplaceAll(filename, "/", "-")
- filename = filename + ".config"
- return filename
+ return rootProxyEndpoint, nil
}
/*
diff --git a/src/go.mod b/src/go.mod
index ad9214f..ce1c3b7 100644
--- a/src/go.mod
+++ b/src/go.mod
@@ -10,9 +10,11 @@ require (
github.com/gorilla/sessions v1.2.1
github.com/gorilla/websocket v1.5.0
github.com/grandcat/zeroconf v1.0.0
+ github.com/grokify/html-strip-tags-go v0.1.0
github.com/likexian/whois v1.15.1
github.com/microcosm-cc/bluemonday v1.0.25
golang.org/x/net v0.14.0
golang.org/x/sys v0.11.0
+ golang.org/x/text v0.12.0
golang.org/x/tools v0.12.0 // indirect
)
diff --git a/src/go.sum b/src/go.sum
index e984002..cad7eab 100644
--- a/src/go.sum
+++ b/src/go.sum
@@ -740,6 +740,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE=
github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs=
+github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
+github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
diff --git a/src/main.go b/src/main.go
index ae49a91..d8be86f 100644
--- a/src/main.go
+++ b/src/main.go
@@ -13,7 +13,6 @@ import (
"github.com/google/uuid"
"imuslab.com/zoraxy/mod/acme"
- "imuslab.com/zoraxy/mod/aroz"
"imuslab.com/zoraxy/mod/auth"
"imuslab.com/zoraxy/mod/database"
"imuslab.com/zoraxy/mod/dynamicproxy/redirection"
@@ -35,6 +34,7 @@ import (
)
// General flags
+var webUIPort = flag.String("port", ":8000", "Management web interface listening port")
var noauth = flag.Bool("noauth", false, "Disable authentication for management interface")
var showver = flag.Bool("version", false, "Show version of this server")
var allowSshLoopback = flag.Bool("sshlb", false, "Allow loopback web ssh connection (DANGER)")
@@ -49,7 +49,7 @@ var logOutputToFile = flag.Bool("log", true, "Log terminal output to file")
var (
name = "Zoraxy"
- version = "2.6.8"
+ version = "3.0.0"
nodeUUID = "generic"
development = false //Set this to false to use embedded web fs
bootTime = time.Now().Unix()
@@ -63,7 +63,6 @@ var (
/*
Handler Modules
*/
- handler *aroz.ArozHandler //Handle arozos managed permission system
sysdb *database.Database //System database
authAgent *auth.AuthAgent //Authentication agent
tlsCertManager *tlscert.Manager //TLS / SSL management
@@ -128,20 +127,8 @@ func ShutdownSeq() {
}
func main() {
- //Start the aoModule pipeline (which will parse the flags as well). Pass in the module launch information
- handler = aroz.HandleFlagParse(aroz.ServiceInfo{
- Name: name,
- Desc: "Dynamic Reverse Proxy Server",
- Group: "Network",
- IconPath: "zoraxy/img/small_icon.png",
- Version: version,
- StartDir: "zoraxy/index.html",
- SupportFW: true,
- LaunchFWDir: "zoraxy/index.html",
- SupportEmb: false,
- InitFWSize: []int{1080, 580},
- })
-
+ //Parse startup flags
+ flag.Parse()
if *showver {
fmt.Println(name + " - Version " + version)
os.Exit(0)
@@ -166,7 +153,7 @@ func main() {
startupSequence()
//Initiate management interface APIs
- requireAuth = !(*noauth || handler.IsUsingExternalPermissionManager())
+ requireAuth = !(*noauth)
initAPIs()
//Start the reverse proxy server in go routine
@@ -179,8 +166,8 @@ func main() {
//Start the finalize sequences
finalSequence()
- SystemWideLogger.Println("Zoraxy started. Visit control panel at http://localhost" + handler.Port)
- err = http.ListenAndServe(handler.Port, nil)
+ SystemWideLogger.Println("Zoraxy started. Visit control panel at http://localhost" + *webUIPort)
+ err = http.ListenAndServe(*webUIPort, nil)
if err != nil {
log.Fatal(err)
diff --git a/src/mod/acme/acme.go b/src/mod/acme/acme.go
index efbd325..665541c 100644
--- a/src/mod/acme/acme.go
+++ b/src/mod/acme/acme.go
@@ -163,7 +163,7 @@ func (a *ACMEHandler) ObtainCert(domains []string, certificateName string, email
// Each certificate comes back with the cert bytes, the bytes of the client's
// private key, and a certificate URL.
- err = os.WriteFile("./conf/certs/"+certificateName+".crt", certificates.Certificate, 0777)
+ err = os.WriteFile("./conf/certs/"+certificateName+".pem", certificates.Certificate, 0777)
if err != nil {
log.Println(err)
return false, err
diff --git a/src/mod/dynamicproxy/Server.go b/src/mod/dynamicproxy/Server.go
index c446277..7676210 100644
--- a/src/mod/dynamicproxy/Server.go
+++ b/src/mod/dynamicproxy/Server.go
@@ -1,9 +1,6 @@
package dynamicproxy
import (
- _ "embed"
- "errors"
- "log"
"net/http"
"net/url"
"os"
@@ -26,11 +23,6 @@ import (
- Vitrual Directory Routing
*/
-var (
- //go:embed tld.json
- rawTldMap []byte
-)
-
func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
/*
Special Routing Rules, bypass most of the limitations
@@ -53,10 +45,12 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
+ //Inject headers
+ w.Header().Set("x-proxy-by", "zoraxy/"+h.Parent.Option.HostVersion)
+
/*
General Access Check
*/
-
respWritten := h.handleAccessRouting(w, r)
if respWritten {
return
@@ -80,38 +74,45 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
/*
- Subdomain Routing
+ Host Routing
*/
- if strings.Contains(r.Host, ".") {
- //This might be a subdomain. See if there are any subdomain proxy router for this
- sep := h.Parent.getSubdomainProxyEndpointFromHostname(domainOnly)
- if sep != nil {
- if sep.RequireBasicAuth {
- err := h.handleBasicAuthRouting(w, r, sep)
- if err != nil {
- return
- }
- }
- h.subdomainRequest(w, r, sep)
- return
- }
- }
- /*
- Virtual Directory Routing
- */
- //Clean up the request URI
- proxyingPath := strings.TrimSpace(r.RequestURI)
- targetProxyEndpoint := h.Parent.getTargetProxyEndpointFromRequestURI(proxyingPath)
- if targetProxyEndpoint != nil {
- if targetProxyEndpoint.RequireBasicAuth {
- err := h.handleBasicAuthRouting(w, r, targetProxyEndpoint)
+ sep := h.Parent.getProxyEndpointFromHostname(domainOnly)
+ if sep != nil && !sep.Disabled {
+ if sep.RequireBasicAuth {
+ err := h.handleBasicAuthRouting(w, r, sep)
if err != nil {
return
}
}
- h.proxyRequest(w, r, targetProxyEndpoint)
- } else if !strings.HasSuffix(proxyingPath, "/") {
+
+ //Check if any virtual directory rules matches
+ proxyingPath := strings.TrimSpace(r.RequestURI)
+ targetProxyEndpoint := sep.GetVirtualDirectoryHandlerFromRequestURI(proxyingPath)
+ if targetProxyEndpoint != nil && !targetProxyEndpoint.Disabled {
+ //Virtual directory routing rule found. Route via vdir mode
+ h.vdirRequest(w, r, targetProxyEndpoint)
+ return
+ } else if !strings.HasSuffix(proxyingPath, "/") && sep.ProxyType != ProxyType_Root {
+ potentialProxtEndpoint := sep.GetVirtualDirectoryHandlerFromRequestURI(proxyingPath + "/")
+ if potentialProxtEndpoint != nil && !targetProxyEndpoint.Disabled {
+ //Missing tailing slash. Redirect to target proxy endpoint
+ http.Redirect(w, r, r.RequestURI+"/", http.StatusTemporaryRedirect)
+ return
+ }
+ }
+
+ //Fallback to handle by the host proxy forwarder
+ h.hostRequest(w, r, sep)
+ return
+ }
+
+ /*
+ Root Router Handling
+ */
+ //Clean up the request URI
+ proxyingPath := strings.TrimSpace(r.RequestURI)
+ if !strings.HasSuffix(proxyingPath, "/") {
potentialProxtEndpoint := h.Parent.getTargetProxyEndpointFromRequestURI(proxyingPath + "/")
if potentialProxtEndpoint != nil {
//Missing tailing slash. Redirect to target proxy endpoint
@@ -136,52 +137,63 @@ Once entered this routing segment, the root routing options will take over
for the routing logic.
*/
func (h *ProxyHandler) handleRootRouting(w http.ResponseWriter, r *http.Request) {
+
domainOnly := r.Host
if strings.Contains(r.Host, ":") {
hostPath := strings.Split(r.Host, ":")
domainOnly = hostPath[0]
}
- if h.Parent.RootRoutingOptions.EnableRedirectForUnsetRules {
- //Route to custom domain
- if h.Parent.RootRoutingOptions.UnsetRuleRedirectTarget == "" {
- //Not set. Redirect to first level of domain redirectable
- fld, err := h.getTopLevelRedirectableDomain(domainOnly)
- if err != nil {
- //Redirect to proxy root
- h.proxyRequest(w, r, h.Parent.Root)
- } else {
- log.Println("[Router] Redirecting request from " + domainOnly + " to " + fld)
- h.logRequest(r, false, 307, "root-redirect", domainOnly)
- http.Redirect(w, r, fld, http.StatusTemporaryRedirect)
- }
+ //Get the proxy root config
+ proot := h.Parent.Root
+ switch proot.DefaultSiteOption {
+ case DefaultSite_InternalStaticWebServer:
+ fallthrough
+ case DefaultSite_ReverseProxy:
+ //They both share the same behavior
+
+ //Check if any virtual directory rules matches
+ proxyingPath := strings.TrimSpace(r.RequestURI)
+ targetProxyEndpoint := proot.GetVirtualDirectoryHandlerFromRequestURI(proxyingPath)
+ if targetProxyEndpoint != nil && !targetProxyEndpoint.Disabled {
+ //Virtual directory routing rule found. Route via vdir mode
+ h.vdirRequest(w, r, targetProxyEndpoint)
return
- } else if h.isTopLevelRedirectableDomain(domainOnly) {
- //This is requesting a top level private domain that should be serving root
- h.proxyRequest(w, r, h.Parent.Root)
- } else {
- //Validate the redirection target URL
- parsedURL, err := url.Parse(h.Parent.RootRoutingOptions.UnsetRuleRedirectTarget)
- if err != nil {
- //Error when parsing target. Send to root
- h.proxyRequest(w, r, h.Parent.Root)
+ } else if !strings.HasSuffix(proxyingPath, "/") && proot.ProxyType != ProxyType_Root {
+ potentialProxtEndpoint := proot.GetVirtualDirectoryHandlerFromRequestURI(proxyingPath + "/")
+ if potentialProxtEndpoint != nil && !targetProxyEndpoint.Disabled {
+ //Missing tailing slash. Redirect to target proxy endpoint
+ http.Redirect(w, r, r.RequestURI+"/", http.StatusTemporaryRedirect)
return
}
- hostname := parsedURL.Hostname()
- if domainOnly != hostname {
- //Redirect to target
- h.logRequest(r, false, 307, "root-redirect", domainOnly)
- http.Redirect(w, r, h.Parent.RootRoutingOptions.UnsetRuleRedirectTarget, http.StatusTemporaryRedirect)
- return
- } else {
- //Loopback request due to bad settings (Shd leave it empty)
- //Forward it to root proxy
- h.proxyRequest(w, r, h.Parent.Root)
- }
}
- } else {
- //Route to root
- h.proxyRequest(w, r, h.Parent.Root)
+
+ //No vdir match. Route via root router
+ h.hostRequest(w, r, h.Parent.Root)
+ case DefaultSite_Redirect:
+ redirectTarget := strings.TrimSpace(proot.DefaultSiteValue)
+ if redirectTarget == "" {
+ redirectTarget = "about:blank"
+ }
+
+ //Check if it is an infinite loopback redirect
+ parsedURL, err := url.Parse(proot.DefaultSiteValue)
+ if err != nil {
+ //Error when parsing target. Send to root
+ h.hostRequest(w, r, h.Parent.Root)
+ return
+ }
+ hostname := parsedURL.Hostname()
+ if hostname == domainOnly {
+ h.logRequest(r, false, 500, "root-redirect", domainOnly)
+ http.Error(w, "Loopback redirects due to invalid settings", 500)
+ return
+ }
+
+ h.logRequest(r, false, 307, "root-redirect", domainOnly)
+ http.Redirect(w, r, redirectTarget, http.StatusTemporaryRedirect)
+ case DefaultSite_NotFoundPage:
+ http.NotFound(w, r)
}
}
@@ -219,44 +231,3 @@ func (h *ProxyHandler) handleAccessRouting(w http.ResponseWriter, r *http.Reques
return false
}
-
-// Return if the given host is already topped (e.g. example.com or example.co.uk) instead of
-// a host with subdomain (e.g. test.example.com)
-func (h *ProxyHandler) isTopLevelRedirectableDomain(requestHost string) bool {
- parts := strings.Split(requestHost, ".")
- if len(parts) > 2 {
- //Cases where strange tld is used like .co.uk or .com.hk
- _, ok := h.Parent.tldMap[strings.Join(parts[1:], ".")]
- if ok {
- //Already topped
- return true
- }
- } else {
- //Already topped
- return true
- }
-
- return false
-}
-
-// GetTopLevelRedirectableDomain returns the toppest level of domain
-// that is redirectable. E.g. a.b.c.example.co.uk will return example.co.uk
-func (h *ProxyHandler) getTopLevelRedirectableDomain(unsetSubdomainHost string) (string, error) {
- parts := strings.Split(unsetSubdomainHost, ".")
- if h.isTopLevelRedirectableDomain(unsetSubdomainHost) {
- //Already topped
- return "", errors.New("already at top level domain")
- }
-
- for i := 0; i < len(parts); i++ {
- possibleTld := parts[i:]
- _, ok := h.Parent.tldMap[strings.Join(possibleTld, ".")]
- if ok {
- //This is tld length
- tld := strings.Join(parts[i-1:], ".")
- return "//" + tld, nil
- }
- }
-
- return "", errors.New("unsupported top level domain given")
-}
diff --git a/src/mod/dynamicproxy/basicAuth.go b/src/mod/dynamicproxy/basicAuth.go
index 8c8b5c3..d4dab2a 100644
--- a/src/mod/dynamicproxy/basicAuth.go
+++ b/src/mod/dynamicproxy/basicAuth.go
@@ -26,10 +26,6 @@ func (h *ProxyHandler) handleBasicAuthRouting(w http.ResponseWriter, r *http.Req
}
}
- proxyType := "vdir-auth"
- if pe.ProxyType == ProxyType_Subdomain {
- proxyType = "subd-auth"
- }
u, p, ok := r.BasicAuth()
if !ok {
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
@@ -48,7 +44,7 @@ func (h *ProxyHandler) handleBasicAuthRouting(w http.ResponseWriter, r *http.Req
}
if !matchingFound {
- h.logRequest(r, false, 401, proxyType, pe.Domain)
+ h.logRequest(r, false, 401, "host", pe.Domain)
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
w.WriteHeader(401)
return errors.New("unauthorized")
diff --git a/src/mod/dynamicproxy/dpcore/dpcore.go b/src/mod/dynamicproxy/dpcore/dpcore.go
index 1b1b11a..321f031 100644
--- a/src/mod/dynamicproxy/dpcore/dpcore.go
+++ b/src/mod/dynamicproxy/dpcore/dpcore.go
@@ -60,6 +60,7 @@ type ResponseRewriteRuleSet struct {
ProxyDomain string
OriginalHost string
UseTLS bool
+ NoCache bool
PathPrefix string //Vdir prefix for root, / will be rewrite to this
}
@@ -243,7 +244,7 @@ func (p *ReverseProxy) logf(format string, args ...interface{}) {
}
}
-func removeHeaders(header http.Header) {
+func removeHeaders(header http.Header, noCache bool) {
// Remove hop-by-hop headers listed in the "Connection" header.
if c := header.Get("Connection"); c != "" {
for _, f := range strings.Split(c, ",") {
@@ -260,9 +261,16 @@ func removeHeaders(header http.Header) {
}
}
- if header.Get("A-Upgrade") != "" {
- header.Set("Upgrade", header.Get("A-Upgrade"))
- header.Del("A-Upgrade")
+ //Restore the Upgrade header if any
+ if header.Get("Zr-Origin-Upgrade") != "" {
+ header.Set("Upgrade", header.Get("Zr-Origin-Upgrade"))
+ header.Del("Zr-Origin-Upgrade")
+ }
+
+ //Disable cache if nocache is set
+ if noCache {
+ header.Del("Cache-Control")
+ header.Set("Cache-Control", "no-store")
}
}
@@ -281,6 +289,11 @@ func addXForwardedForHeader(req *http.Request) {
req.Header.Set("X-Forwarded-Proto", "http")
}
+ if req.Header.Get("X-Real-Ip") == "" {
+ //Not exists. Fill it in with client IP
+ req.Header.Set("X-Real-Ip", clientIP)
+ }
+
}
}
@@ -323,7 +336,7 @@ func (p *ReverseProxy) ProxyHTTP(rw http.ResponseWriter, req *http.Request, rrr
copyHeader(outreq.Header, req.Header)
// Remove hop-by-hop headers listed in the "Connection" header, Remove hop-by-hop headers.
- removeHeaders(outreq.Header)
+ removeHeaders(outreq.Header, rrr.NoCache)
// Add X-Forwarded-For Header.
addXForwardedForHeader(outreq)
@@ -339,7 +352,7 @@ func (p *ReverseProxy) ProxyHTTP(rw http.ResponseWriter, req *http.Request, rrr
}
// Remove hop-by-hop headers listed in the "Connection" header of the response, Remove hop-by-hop headers.
- removeHeaders(res.Header)
+ removeHeaders(res.Header, rrr.NoCache)
if p.ModifyResponse != nil {
if err := p.ModifyResponse(res); err != nil {
diff --git a/src/mod/dynamicproxy/dynamicproxy.go b/src/mod/dynamicproxy/dynamicproxy.go
index d5f5d07..07b4347 100644
--- a/src/mod/dynamicproxy/dynamicproxy.go
+++ b/src/mod/dynamicproxy/dynamicproxy.go
@@ -22,27 +22,19 @@ import (
func NewDynamicProxy(option RouterOption) (*Router, error) {
proxyMap := sync.Map{}
- domainMap := sync.Map{}
thisRouter := Router{
- Option: &option,
- ProxyEndpoints: &proxyMap,
- SubdomainEndpoint: &domainMap,
- Running: false,
- server: nil,
- routingRules: []*RoutingRule{},
- tldMap: map[string]int{},
+ Option: &option,
+ ProxyEndpoints: &proxyMap,
+ Running: false,
+ server: nil,
+ routingRules: []*RoutingRule{},
+ tldMap: map[string]int{},
}
thisRouter.mux = &ProxyHandler{
Parent: &thisRouter,
}
- //Prase the tld map for tld redirection in main router
- //See Server.go declarations
- if len(rawTldMap) > 0 {
- json.Unmarshal(rawTldMap, &thisRouter.tldMap)
- }
-
return &thisRouter, nil
}
@@ -76,21 +68,14 @@ func (router *Router) UpdateHttpToHttpsRedirectSetting(useRedirect bool) {
func (router *Router) StartProxyService() error {
//Create a new server object
if router.server != nil {
- return errors.New("Reverse proxy server already running")
+ return errors.New("reverse proxy server already running")
}
//Check if root route is set
if router.Root == nil {
- return errors.New("Reverse proxy router root not set")
+ return errors.New("reverse proxy router root not set")
}
- //Load root options from file
- loadedRootOption, err := loadRootRoutingOptionsFromFile()
- if err != nil {
- return err
- }
- router.RootRoutingOptions = loadedRootOption
-
minVersion := tls.VersionTLS10
if router.Option.ForceTLSLatest {
minVersion = tls.VersionTLS12
@@ -101,16 +86,6 @@ func (router *Router) StartProxyService() error {
}
if router.Option.UseTls {
- /*
- //Serve with TLS mode
- ln, err := tls.Listen("tcp", ":"+strconv.Itoa(router.Option.Port), config)
- if err != nil {
- log.Println(err)
- router.Running = false
- return err
- }
- router.tlsListener = ln
- */
router.server = &http.Server{
Addr: ":" + strconv.Itoa(router.Option.Port),
Handler: router.mux,
@@ -129,7 +104,7 @@ func (router *Router) StartProxyService() error {
hostPath := strings.Split(r.Host, ":")
domainOnly = hostPath[0]
}
- sep := router.getSubdomainProxyEndpointFromHostname(domainOnly)
+ sep := router.getProxyEndpointFromHostname(domainOnly)
if sep != nil && sep.BypassGlobalTLS {
//Allow routing via non-TLS handler
originalHostHeader := r.Host
@@ -140,7 +115,7 @@ func (router *Router) StartProxyService() error {
r.URL, _ = url.Parse(originalHostHeader)
}
- sep.Proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
+ sep.proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
ProxyDomain: sep.Domain,
OriginalHost: originalHostHeader,
UseTLS: sep.RequireTLS,
@@ -225,7 +200,7 @@ func (router *Router) StartProxyService() error {
func (router *Router) StopProxyService() error {
if router.server == nil {
- return errors.New("Reverse proxy server already stopped")
+ return errors.New("reverse proxy server already stopped")
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
@@ -253,13 +228,13 @@ func (router *Router) StopProxyService() error {
// Restart the current router if it is running.
func (router *Router) Restart() error {
//Stop the router if it is already running
- var err error = nil
if router.Running {
err := router.StopProxyService()
if err != nil {
return err
}
+ time.Sleep(300 * time.Millisecond)
// Start the server
err = router.StartProxyService()
if err != nil {
@@ -267,7 +242,7 @@ func (router *Router) Restart() error {
}
}
- return err
+ return nil
}
/*
@@ -280,128 +255,17 @@ func (router *Router) IsProxiedSubdomain(r *http.Request) bool {
hostname = r.Host
}
hostname = strings.Split(hostname, ":")[0]
- subdEndpoint := router.getSubdomainProxyEndpointFromHostname(hostname)
+ subdEndpoint := router.getProxyEndpointFromHostname(hostname)
return subdEndpoint != nil
}
-/*
-Add an URL into a custom proxy services
-*/
-func (router *Router) AddVirtualDirectoryProxyService(options *VdirOptions) error {
- domain := options.Domain
- if domain[len(domain)-1:] == "/" {
- domain = domain[:len(domain)-1]
- }
-
- /*
- if rootname[len(rootname)-1:] == "/" {
- rootname = rootname[:len(rootname)-1]
- }
- */
-
- webProxyEndpoint := domain
- if options.RequireTLS {
- webProxyEndpoint = "https://" + webProxyEndpoint
- } else {
- webProxyEndpoint = "http://" + webProxyEndpoint
- }
- //Create a new proxy agent for this root
- path, err := url.Parse(webProxyEndpoint)
- if err != nil {
- return err
- }
-
- proxy := dpcore.NewDynamicProxyCore(path, options.RootName, options.SkipCertValidations)
-
- endpointObject := ProxyEndpoint{
- ProxyType: ProxyType_Vdir,
- RootOrMatchingDomain: options.RootName,
- Domain: domain,
- RequireTLS: options.RequireTLS,
- SkipCertValidations: options.SkipCertValidations,
- RequireBasicAuth: options.RequireBasicAuth,
- BasicAuthCredentials: options.BasicAuthCredentials,
- BasicAuthExceptionRules: options.BasicAuthExceptionRules,
- Proxy: proxy,
- }
-
- router.ProxyEndpoints.Store(options.RootName, &endpointObject)
-
- log.Println("Registered Proxy Rule: ", options.RootName+" to "+domain)
- return nil
-}
-
/*
Load routing from RP
*/
-func (router *Router) LoadProxy(ptype string, key string) (*ProxyEndpoint, error) {
- if ptype == "vdir" {
- proxy, ok := router.ProxyEndpoints.Load(key)
- if !ok {
- return nil, errors.New("target proxy not found")
- }
-
- targetProxy := proxy.(*ProxyEndpoint)
- targetProxy.parent = router
- return targetProxy, nil
- } else if ptype == "subd" {
- proxy, ok := router.SubdomainEndpoint.Load(key)
- if !ok {
- return nil, errors.New("target proxy not found")
- }
-
- targetProxy := proxy.(*ProxyEndpoint)
- targetProxy.parent = router
- return targetProxy, nil
- }
-
- return nil, errors.New("unsupported ptype")
-}
-
-/*
-Add an default router for the proxy server
-*/
-func (router *Router) SetRootProxy(options *RootOptions) error {
- proxyLocation := options.ProxyLocation
- if proxyLocation[len(proxyLocation)-1:] == "/" {
- proxyLocation = proxyLocation[:len(proxyLocation)-1]
- }
-
- webProxyEndpoint := proxyLocation
- if options.RequireTLS {
- webProxyEndpoint = "https://" + webProxyEndpoint
- } else {
- webProxyEndpoint = "http://" + webProxyEndpoint
- }
- //Create a new proxy agent for this root
- path, err := url.Parse(webProxyEndpoint)
- if err != nil {
- return err
- }
-
- proxy := dpcore.NewDynamicProxyCore(path, "", options.SkipCertValidations)
-
- rootEndpoint := ProxyEndpoint{
- ProxyType: ProxyType_Vdir,
- RootOrMatchingDomain: "/",
- Domain: proxyLocation,
- RequireTLS: options.RequireTLS,
- SkipCertValidations: options.SkipCertValidations,
- RequireBasicAuth: options.RequireBasicAuth,
- BasicAuthCredentials: options.BasicAuthCredentials,
- BasicAuthExceptionRules: options.BasicAuthExceptionRules,
- Proxy: proxy,
- }
-
- router.Root = &rootEndpoint
- return nil
-}
-
-// Helpers to export the syncmap for easier processing
-func (r *Router) GetSDProxyEndpointsAsMap() map[string]*ProxyEndpoint {
- m := make(map[string]*ProxyEndpoint)
- r.SubdomainEndpoint.Range(func(key, value interface{}) bool {
- k, ok := key.(string)
+func (router *Router) LoadProxy(matchingDomain string) (*ProxyEndpoint, error) {
+ var targetProxyEndpoint *ProxyEndpoint
+ router.ProxyEndpoints.Range(func(key, value interface{}) bool {
+ key, ok := key.(string)
if !ok {
return true
}
@@ -409,13 +273,32 @@ func (r *Router) GetSDProxyEndpointsAsMap() map[string]*ProxyEndpoint {
if !ok {
return true
}
- m[k] = v
+
+ if key == matchingDomain {
+ targetProxyEndpoint = v
+ }
return true
})
- return m
+
+ if targetProxyEndpoint == nil {
+ return nil, errors.New("target routing rule not found")
+ }
+
+ return targetProxyEndpoint, nil
}
-func (r *Router) GetVDProxyEndpointsAsMap() map[string]*ProxyEndpoint {
+// Deep copy a proxy endpoint, excluding runtime paramters
+func CopyEndpoint(endpoint *ProxyEndpoint) *ProxyEndpoint {
+ js, _ := json.Marshal(endpoint)
+ newProxyEndpoint := ProxyEndpoint{}
+ err := json.Unmarshal(js, &newProxyEndpoint)
+ if err != nil {
+ return nil
+ }
+ return &newProxyEndpoint
+}
+
+func (r *Router) GetProxyEndpointsAsMap() map[string]*ProxyEndpoint {
m := make(map[string]*ProxyEndpoint)
r.ProxyEndpoints.Range(func(key, value interface{}) bool {
k, ok := key.(string)
diff --git a/src/mod/dynamicproxy/endpoints.go b/src/mod/dynamicproxy/endpoints.go
new file mode 100644
index 0000000..a0f80fb
--- /dev/null
+++ b/src/mod/dynamicproxy/endpoints.go
@@ -0,0 +1,158 @@
+package dynamicproxy
+
+import (
+ "encoding/json"
+ "errors"
+ "strings"
+
+ "golang.org/x/text/cases"
+ "golang.org/x/text/language"
+)
+
+/*
+ endpoint.go
+ author: tobychui
+
+ This script handle the proxy endpoint object actions
+ so proxyEndpoint can be handled like a proper oop object
+
+ Most of the functions are implemented in dynamicproxy.go
+*/
+
+/*
+ User Defined Header Functions
+*/
+
+// Check if a user define header exists in this endpoint, ignore case
+func (ep *ProxyEndpoint) UserDefinedHeaderExists(key string) bool {
+ for _, header := range ep.UserDefinedHeaders {
+ if strings.EqualFold(header.Key, key) {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Remvoe a user defined header from the list
+func (ep *ProxyEndpoint) RemoveUserDefinedHeader(key string) error {
+ newHeaderList := []*UserDefinedHeader{}
+ for _, header := range ep.UserDefinedHeaders {
+ if !strings.EqualFold(header.Key, key) {
+ newHeaderList = append(newHeaderList, header)
+ }
+ }
+
+ ep.UserDefinedHeaders = newHeaderList
+
+ return nil
+}
+
+// Add a user defined header to the list, duplicates will be automatically removed
+func (ep *ProxyEndpoint) AddUserDefinedHeader(key string, value string) error {
+ if ep.UserDefinedHeaderExists(key) {
+ ep.RemoveUserDefinedHeader(key)
+ }
+
+ ep.UserDefinedHeaders = append(ep.UserDefinedHeaders, &UserDefinedHeader{
+ Key: cases.Title(language.Und, cases.NoLower).String(key), //e.g. x-proxy-by -> X-Proxy-By
+ Value: value,
+ })
+
+ return nil
+}
+
+/*
+ Virtual Directory Functions
+*/
+
+// Get virtual directory handler from given URI
+func (ep *ProxyEndpoint) GetVirtualDirectoryHandlerFromRequestURI(requestURI string) *VirtualDirectoryEndpoint {
+ for _, vdir := range ep.VirtualDirectories {
+ if strings.HasPrefix(requestURI, vdir.MatchingPath) {
+ return vdir
+ }
+ }
+ return nil
+}
+
+// Get virtual directory handler by matching path (exact match required)
+func (ep *ProxyEndpoint) GetVirtualDirectoryRuleByMatchingPath(matchingPath string) *VirtualDirectoryEndpoint {
+ for _, vdir := range ep.VirtualDirectories {
+ if vdir.MatchingPath == matchingPath {
+ return vdir
+ }
+ }
+ return nil
+}
+
+// Delete a vdir rule by its matching path
+func (ep *ProxyEndpoint) RemoveVirtualDirectoryRuleByMatchingPath(matchingPath string) error {
+ entryFound := false
+ newVirtualDirectoryList := []*VirtualDirectoryEndpoint{}
+ for _, vdir := range ep.VirtualDirectories {
+ if vdir.MatchingPath == matchingPath {
+ entryFound = true
+ } else {
+ newVirtualDirectoryList = append(newVirtualDirectoryList, vdir)
+ }
+ }
+
+ if entryFound {
+ //Update the list of vdirs
+ ep.VirtualDirectories = newVirtualDirectoryList
+ return nil
+ }
+ return errors.New("target virtual directory routing rule not found")
+}
+
+// Delete a vdir rule by its matching path
+func (ep *ProxyEndpoint) AddVirtualDirectoryRule(vdir *VirtualDirectoryEndpoint) (*ProxyEndpoint, error) {
+ //Check for matching path duplicate
+ if ep.GetVirtualDirectoryRuleByMatchingPath(vdir.MatchingPath) != nil {
+ return nil, errors.New("rule with same matching path already exists")
+ }
+
+ //Append it to the list of virtual directory
+ ep.VirtualDirectories = append(ep.VirtualDirectories, vdir)
+
+ //Prepare to replace the current routing rule
+ parentRouter := ep.parent
+ readyRoutingRule, err := parentRouter.PrepareProxyRoute(ep)
+ if err != nil {
+ return nil, err
+ }
+
+ if ep.ProxyType == ProxyType_Root {
+ parentRouter.Root = readyRoutingRule
+ } else if ep.ProxyType == ProxyType_Host {
+ ep.Remove()
+ parentRouter.AddProxyRouteToRuntime(readyRoutingRule)
+ } else {
+ return nil, errors.New("unsupported proxy type")
+ }
+
+ return readyRoutingRule, nil
+}
+
+// Create a deep clone object of the proxy endpoint
+// Note the returned object is not activated. Call to prepare function before pushing into runtime
+func (ep *ProxyEndpoint) Clone() *ProxyEndpoint {
+ clonedProxyEndpoint := ProxyEndpoint{}
+ js, _ := json.Marshal(ep)
+ json.Unmarshal(js, &clonedProxyEndpoint)
+ return &clonedProxyEndpoint
+}
+
+// Remove this proxy endpoint from running proxy endpoint list
+func (ep *ProxyEndpoint) Remove() error {
+ ep.parent.ProxyEndpoints.Delete(ep.RootOrMatchingDomain)
+ return nil
+}
+
+// Write changes to runtime without respawning the proxy handler
+// use prepare -> remove -> add if you change anything in the endpoint
+// that effects the proxy routing src / dest
+func (ep *ProxyEndpoint) UpdateToRuntime() {
+ ep.parent.ProxyEndpoints.Store(ep.RootOrMatchingDomain, ep)
+}
diff --git a/src/mod/dynamicproxy/proxyEndpoint.go b/src/mod/dynamicproxy/proxyEndpoint.go
deleted file mode 100644
index 42a7de1..0000000
--- a/src/mod/dynamicproxy/proxyEndpoint.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package dynamicproxy
-
-import "errors"
-
-/*
- ProxyEndpoint.go
- author: tobychui
-
- This script handle the proxy endpoint object actions
- so proxyEndpoint can be handled like a proper oop object
-
- Most of the functions are implemented in dynamicproxy.go
-*/
-
-//Get the string version of proxy type
-func (ep *ProxyEndpoint) GetProxyTypeString() string {
- if ep.ProxyType == ProxyType_Subdomain {
- return "subd"
- } else if ep.ProxyType == ProxyType_Vdir {
- return "vdir"
- }
-
- return "unknown"
-}
-
-//Update change in the current running proxy endpoint config
-func (ep *ProxyEndpoint) UpdateToRuntime() {
- if ep.IsVdir() {
- ep.parent.ProxyEndpoints.Store(ep.RootOrMatchingDomain, ep)
-
- } else if ep.IsSubDomain() {
- ep.parent.SubdomainEndpoint.Store(ep.RootOrMatchingDomain, ep)
- }
-}
-
-//Return true if the endpoint type is virtual directory
-func (ep *ProxyEndpoint) IsVdir() bool {
- return ep.ProxyType == ProxyType_Vdir
-}
-
-//Return true if the endpoint type is subdomain
-func (ep *ProxyEndpoint) IsSubDomain() bool {
- return ep.ProxyType == ProxyType_Subdomain
-}
-
-//Remove this proxy endpoint from running proxy endpoint list
-func (ep *ProxyEndpoint) Remove() error {
- //fmt.Println(ptype, key)
- if ep.IsVdir() {
- ep.parent.ProxyEndpoints.Delete(ep.RootOrMatchingDomain)
- return nil
- } else if ep.IsSubDomain() {
- ep.parent.SubdomainEndpoint.Delete(ep.RootOrMatchingDomain)
- return nil
- }
- return errors.New("invalid or unsupported type")
-
-}
-
-//ProxyEndpoint remove provide global access by key
-func (router *Router) RemoveProxyEndpointByRootname(proxyType string, rootnameOrMatchingDomain string) error {
- targetEpt, err := router.LoadProxy(proxyType, rootnameOrMatchingDomain)
- if err != nil {
- return err
- }
-
- return targetEpt.Remove()
-}
diff --git a/src/mod/dynamicproxy/proxyRequestHandler.go b/src/mod/dynamicproxy/proxyRequestHandler.go
index 01d2858..d1e5bfc 100644
--- a/src/mod/dynamicproxy/proxyRequestHandler.go
+++ b/src/mod/dynamicproxy/proxyRequestHandler.go
@@ -6,6 +6,8 @@ import (
"net"
"net/http"
"net/url"
+ "path/filepath"
+ "sort"
"strings"
"imuslab.com/zoraxy/mod/dynamicproxy/dpcore"
@@ -28,13 +30,41 @@ func (router *Router) getTargetProxyEndpointFromRequestURI(requestURI string) *P
return targetProxyEndpoint
}
-func (router *Router) getSubdomainProxyEndpointFromHostname(hostname string) *ProxyEndpoint {
+func (router *Router) getProxyEndpointFromHostname(hostname string) *ProxyEndpoint {
var targetSubdomainEndpoint *ProxyEndpoint = nil
- ep, ok := router.SubdomainEndpoint.Load(hostname)
+ ep, ok := router.ProxyEndpoints.Load(hostname)
if ok {
targetSubdomainEndpoint = ep.(*ProxyEndpoint)
}
+ //No hit. Try with wildcard
+ matchProxyEndpoints := []*ProxyEndpoint{}
+ router.ProxyEndpoints.Range(func(k, v interface{}) bool {
+ ep := v.(*ProxyEndpoint)
+ match, err := filepath.Match(ep.RootOrMatchingDomain, hostname)
+ if err != nil {
+ //Continue
+ return true
+ }
+ if match {
+ //targetSubdomainEndpoint = ep
+ matchProxyEndpoints = append(matchProxyEndpoints, ep)
+ return true
+ }
+ return true
+ })
+
+ if len(matchProxyEndpoints) == 1 {
+ //Only 1 match
+ return matchProxyEndpoints[0]
+ } else if len(matchProxyEndpoints) > 1 {
+ //More than one match. Get the best match one
+ sort.Slice(matchProxyEndpoints, func(i, j int) bool {
+ return matchProxyEndpoints[i].RootOrMatchingDomain < matchProxyEndpoints[j].RootOrMatchingDomain
+ })
+ return matchProxyEndpoints[0]
+ }
+
return targetSubdomainEndpoint
}
@@ -54,14 +84,22 @@ func (router *Router) rewriteURL(rooturl string, requestURL string) string {
return rewrittenURL
}
-// Handle subdomain request
-func (h *ProxyHandler) subdomainRequest(w http.ResponseWriter, r *http.Request, target *ProxyEndpoint) {
+// Handle host request
+func (h *ProxyHandler) hostRequest(w http.ResponseWriter, r *http.Request, target *ProxyEndpoint) {
r.Header.Set("X-Forwarded-Host", r.Host)
r.Header.Set("X-Forwarded-Server", "zoraxy-"+h.Parent.Option.HostUUID)
+
+ //Inject custom headers
+ if len(target.UserDefinedHeaders) > 0 {
+ for _, customHeader := range target.UserDefinedHeaders {
+ r.Header.Set(customHeader.Key, customHeader.Value)
+ }
+ }
+
requestURL := r.URL.String()
if r.Header["Upgrade"] != nil && strings.ToLower(r.Header["Upgrade"][0]) == "websocket" {
//Handle WebSocket request. Forward the custom Upgrade header and rewrite origin
- r.Header.Set("A-Upgrade", "websocket")
+ r.Header.Set("Zr-Origin-Upgrade", "websocket")
wsRedirectionEndpoint := target.Domain
if wsRedirectionEndpoint[len(wsRedirectionEndpoint)-1:] != "/" {
//Append / to the end of the redirection endpoint if not exists
@@ -89,10 +127,11 @@ func (h *ProxyHandler) subdomainRequest(w http.ResponseWriter, r *http.Request,
r.URL, _ = url.Parse(originalHostHeader)
}
- err := target.Proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
+ err := target.proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
ProxyDomain: target.Domain,
OriginalHost: originalHostHeader,
UseTLS: target.RequireTLS,
+ NoCache: h.Parent.Option.NoCache,
PathPrefix: "",
})
@@ -113,15 +152,23 @@ func (h *ProxyHandler) subdomainRequest(w http.ResponseWriter, r *http.Request,
}
// Handle vdir type request
-func (h *ProxyHandler) proxyRequest(w http.ResponseWriter, r *http.Request, target *ProxyEndpoint) {
- rewriteURL := h.Parent.rewriteURL(target.RootOrMatchingDomain, r.RequestURI)
+func (h *ProxyHandler) vdirRequest(w http.ResponseWriter, r *http.Request, target *VirtualDirectoryEndpoint) {
+ rewriteURL := h.Parent.rewriteURL(target.MatchingPath, r.RequestURI)
r.URL, _ = url.Parse(rewriteURL)
r.Header.Set("X-Forwarded-Host", r.Host)
r.Header.Set("X-Forwarded-Server", "zoraxy-"+h.Parent.Option.HostUUID)
+
+ //Inject custom headers
+ if len(target.parent.UserDefinedHeaders) > 0 {
+ for _, customHeader := range target.parent.UserDefinedHeaders {
+ r.Header.Set(customHeader.Key, customHeader.Value)
+ }
+ }
+
if r.Header["Upgrade"] != nil && strings.ToLower(r.Header["Upgrade"][0]) == "websocket" {
//Handle WebSocket request. Forward the custom Upgrade header and rewrite origin
- r.Header.Set("A-Upgrade", "websocket")
+ r.Header.Set("Zr-Origin-Upgrade", "websocket")
wsRedirectionEndpoint := target.Domain
if wsRedirectionEndpoint[len(wsRedirectionEndpoint)-1:] != "/" {
wsRedirectionEndpoint = wsRedirectionEndpoint + "/"
@@ -144,11 +191,11 @@ func (h *ProxyHandler) proxyRequest(w http.ResponseWriter, r *http.Request, targ
r.URL, _ = url.Parse(originalHostHeader)
}
- err := target.Proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
+ err := target.proxy.ServeHTTP(w, r, &dpcore.ResponseRewriteRuleSet{
ProxyDomain: target.Domain,
OriginalHost: originalHostHeader,
UseTLS: target.RequireTLS,
- PathPrefix: target.RootOrMatchingDomain,
+ PathPrefix: target.MatchingPath,
})
var dnsError *net.DNSError
diff --git a/src/mod/dynamicproxy/rootRoute.go b/src/mod/dynamicproxy/rootRoute.go
deleted file mode 100644
index 7ec8daa..0000000
--- a/src/mod/dynamicproxy/rootRoute.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package dynamicproxy
-
-import (
- "encoding/json"
- "errors"
- "log"
- "os"
-
- "imuslab.com/zoraxy/mod/utils"
-)
-
-/*
- rootRoute.go
-
- This script handle special case in routing where the root proxy
- entity is involved. This also include its setting object
- RootRoutingOptions
-*/
-
-var rootConfigFilepath string = "conf/root_config.json"
-
-func loadRootRoutingOptionsFromFile() (*RootRoutingOptions, error) {
- if !utils.FileExists(rootConfigFilepath) {
- //Not found. Create a root option
- js, _ := json.MarshalIndent(RootRoutingOptions{}, "", " ")
- err := os.WriteFile(rootConfigFilepath, js, 0775)
- if err != nil {
- return nil, errors.New("Unable to write root config to file: " + err.Error())
- }
- }
- newRootOption := RootRoutingOptions{}
- rootOptionsBytes, err := os.ReadFile(rootConfigFilepath)
- if err != nil {
- log.Println("[Error] Unable to read root config file at " + rootConfigFilepath + ": " + err.Error())
- return nil, err
- }
- err = json.Unmarshal(rootOptionsBytes, &newRootOption)
- if err != nil {
- log.Println("[Error] Unable to parse root config file: " + err.Error())
- return nil, err
- }
-
- return &newRootOption, nil
-}
-
-// Save the new config to file. Note that this will not overwrite the runtime one
-func (opt *RootRoutingOptions) SaveToFile() error {
- js, _ := json.MarshalIndent(opt, "", " ")
- err := os.WriteFile(rootConfigFilepath, js, 0775)
- return err
-}
diff --git a/src/mod/dynamicproxy/router.go b/src/mod/dynamicproxy/router.go
new file mode 100644
index 0000000..5f8c741
--- /dev/null
+++ b/src/mod/dynamicproxy/router.go
@@ -0,0 +1,110 @@
+package dynamicproxy
+
+import (
+ "errors"
+ "net/url"
+ "strings"
+
+ "imuslab.com/zoraxy/mod/dynamicproxy/dpcore"
+)
+
+/*
+ Dynamic Proxy Router Functions
+
+ This script handle the proxy rules router spawning
+ and preparation
+*/
+
+// Prepare proxy route generate a proxy handler service object for your endpoint
+func (router *Router) PrepareProxyRoute(endpoint *ProxyEndpoint) (*ProxyEndpoint, error) {
+ //Filter the tailing slash if any
+ domain := endpoint.Domain
+ if domain[len(domain)-1:] == "/" {
+ domain = domain[:len(domain)-1]
+ }
+ endpoint.Domain = domain
+
+ //Parse the web proxy endpoint
+ webProxyEndpoint := domain
+ if !strings.HasPrefix("http://", domain) && !strings.HasPrefix("https://", domain) {
+ //TLS is not hardcoded in proxy target domain
+ if endpoint.RequireTLS {
+ webProxyEndpoint = "https://" + webProxyEndpoint
+ } else {
+ webProxyEndpoint = "http://" + webProxyEndpoint
+ }
+ }
+
+ //Create a new proxy agent for this root
+ path, err := url.Parse(webProxyEndpoint)
+ if err != nil {
+ return nil, err
+ }
+
+ //Create the proxy routing handler
+ proxy := dpcore.NewDynamicProxyCore(path, "", endpoint.SkipCertValidations)
+ endpoint.proxy = proxy
+ endpoint.parent = router
+
+ //Prepare proxy routing hjandler for each of the virtual directories
+ for _, vdir := range endpoint.VirtualDirectories {
+ domain := vdir.Domain
+ if domain[len(domain)-1:] == "/" {
+ domain = domain[:len(domain)-1]
+ }
+
+ //Parse the web proxy endpoint
+ webProxyEndpoint = domain
+ if !strings.HasPrefix("http://", domain) && !strings.HasPrefix("https://", domain) {
+ //TLS is not hardcoded in proxy target domain
+ if vdir.RequireTLS {
+ webProxyEndpoint = "https://" + webProxyEndpoint
+ } else {
+ webProxyEndpoint = "http://" + webProxyEndpoint
+ }
+ }
+
+ path, err := url.Parse(webProxyEndpoint)
+ if err != nil {
+ return nil, err
+ }
+
+ proxy := dpcore.NewDynamicProxyCore(path, vdir.MatchingPath, vdir.SkipCertValidations)
+ vdir.proxy = proxy
+ vdir.parent = endpoint
+ }
+
+ return endpoint, nil
+}
+
+// Add Proxy Route to current runtime. Call to PrepareProxyRoute before adding to runtime
+func (router *Router) AddProxyRouteToRuntime(endpoint *ProxyEndpoint) error {
+ if endpoint.proxy == nil {
+ //This endpoint is not prepared
+ return errors.New("proxy endpoint not ready. Use PrepareProxyRoute before adding to runtime")
+ }
+ // Push record into running subdomain endpoints
+ router.ProxyEndpoints.Store(endpoint.RootOrMatchingDomain, endpoint)
+ return nil
+}
+
+// Set given Proxy Route as Root. Call to PrepareProxyRoute before adding to runtime
+func (router *Router) SetProxyRouteAsRoot(endpoint *ProxyEndpoint) error {
+ if endpoint.proxy == nil {
+ //This endpoint is not prepared
+ return errors.New("proxy endpoint not ready. Use PrepareProxyRoute before adding to runtime")
+ }
+ // Push record into running root endpoints
+ router.Root = endpoint
+ return nil
+}
+
+// ProxyEndpoint remove provide global access by key
+func (router *Router) RemoveProxyEndpointByRootname(rootnameOrMatchingDomain string) error {
+ targetEpt, err := router.LoadProxy(rootnameOrMatchingDomain)
+ if err != nil {
+ return err
+ }
+
+ return targetEpt.Remove()
+}
diff --git a/src/mod/dynamicproxy/subdomain.go b/src/mod/dynamicproxy/subdomain.go
deleted file mode 100644
index f01e541..0000000
--- a/src/mod/dynamicproxy/subdomain.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package dynamicproxy
-
-import (
- "log"
- "net/url"
-
- "imuslab.com/zoraxy/mod/dynamicproxy/dpcore"
-)
-
-/*
- Add an URL intoa custom subdomain service
-
-*/
-
-func (router *Router) AddSubdomainRoutingService(options *SubdOptions) error {
- domain := options.Domain
- if domain[len(domain)-1:] == "/" {
- domain = domain[:len(domain)-1]
- }
-
- webProxyEndpoint := domain
- if options.RequireTLS {
- webProxyEndpoint = "https://" + webProxyEndpoint
- } else {
- webProxyEndpoint = "http://" + webProxyEndpoint
- }
-
- //Create a new proxy agent for this root
- path, err := url.Parse(webProxyEndpoint)
- if err != nil {
- return err
- }
-
- proxy := dpcore.NewDynamicProxyCore(path, "", options.SkipCertValidations)
-
- router.SubdomainEndpoint.Store(options.MatchingDomain, &ProxyEndpoint{
- RootOrMatchingDomain: options.MatchingDomain,
- Domain: domain,
- RequireTLS: options.RequireTLS,
- Proxy: proxy,
- BypassGlobalTLS: options.BypassGlobalTLS,
- SkipCertValidations: options.SkipCertValidations,
- RequireBasicAuth: options.RequireBasicAuth,
- BasicAuthCredentials: options.BasicAuthCredentials,
- BasicAuthExceptionRules: options.BasicAuthExceptionRules,
- })
-
- log.Println("Adding Subdomain Rule: ", options.MatchingDomain+" to "+domain)
- return nil
-}
diff --git a/src/mod/dynamicproxy/tld.json b/src/mod/dynamicproxy/tld.json
deleted file mode 100644
index 346b471..0000000
--- a/src/mod/dynamicproxy/tld.json
+++ /dev/null
@@ -1,9106 +0,0 @@
-{
- "!city.kawasaki.jp": 1,
- "!city.kitakyushu.jp": 1,
- "!city.kobe.jp": 1,
- "!city.nagoya.jp": 1,
- "!city.sapporo.jp": 1,
- "!city.sendai.jp": 1,
- "!city.yokohama.jp": 1,
- "!www.ck": 1,
- "*.0emm.com": 1,
- "*.advisor.ws": 1,
- "*.alces.network": 1,
- "*.awdev.ca": 1,
- "*.azurecontainer.io": 1,
- "*.backyards.banzaicloud.io": 1,
- "*.banzai.cloud": 1,
- "*.bd": 1,
- "*.beget.app": 1,
- "*.build.run": 1,
- "*.builder.code.com": 1,
- "*.bzz.dapps.earth": 1,
- "*.ck": 1,
- "*.cloud.metacentrum.cz": 1,
- "*.cloudera.site": 1,
- "*.cns.joyent.com": 1,
- "*.code.run": 1,
- "*.compute-1.amazonaws.com": 1,
- "*.compute.amazonaws.com": 1,
- "*.compute.amazonaws.com.cn": 1,
- "*.compute.estate": 1,
- "*.cryptonomic.net": 1,
- "*.customer-oci.com": 1,
- "*.dapps.earth": 1,
- "*.database.run": 1,
- "*.dev-builder.code.com": 1,
- "*.dev.adobeaemcloud.com": 1,
- "*.devcdnaccesso.com": 1,
- "*.developer.app": 1,
- "*.digitaloceanspaces.com": 1,
- "*.diher.solutions": 1,
- "*.dweb.link": 1,
- "*.elb.amazonaws.com": 1,
- "*.elb.amazonaws.com.cn": 1,
- "*.er": 1,
- "*.ex.futurecms.at": 1,
- "*.ex.ortsinfo.at": 1,
- "*.firenet.ch": 1,
- "*.fk": 1,
- "*.frusky.de": 1,
- "*.futurecms.at": 1,
- "*.gateway.dev": 1,
- "*.hosting.myjino.ru": 1,
- "*.hosting.ovh.net": 1,
- "*.in.futurecms.at": 1,
- "*.jm": 1,
- "*.kawasaki.jp": 1,
- "*.kh": 1,
- "*.kitakyushu.jp": 1,
- "*.kobe.jp": 1,
- "*.kunden.ortsinfo.at": 1,
- "*.landing.myjino.ru": 1,
- "*.lcl.dev": 1,
- "*.lclstage.dev": 1,
- "*.linodeobjects.com": 1,
- "*.magentosite.cloud": 1,
- "*.migration.run": 1,
- "*.mm": 1,
- "*.moonscale.io": 1,
- "*.nagoya.jp": 1,
- "*.nodebalancer.linode.com": 1,
- "*.nom.br": 1,
- "*.northflank.app": 1,
- "*.np": 1,
- "*.oci.customer-oci.com": 1,
- "*.ocp.customer-oci.com": 1,
- "*.ocs.customer-oci.com": 1,
- "*.on-acorn.io": 1,
- "*.on-k3s.io": 1,
- "*.on-rancher.cloud": 1,
- "*.on-rio.io": 1,
- "*.otap.co": 1,
- "*.owo.codes": 1,
- "*.paywhirl.com": 1,
- "*.pg": 1,
- "*.platformsh.site": 1,
- "*.quipelements.com": 1,
- "*.r.appspot.com": 1,
- "*.rss.my.id": 1,
- "*.s5y.io": 1,
- "*.sapporo.jp": 1,
- "*.sch.uk": 1,
- "*.sendai.jp": 1,
- "*.sensiosite.cloud": 1,
- "*.spectrum.myjino.ru": 1,
- "*.statics.cloud": 1,
- "*.stg-builder.code.com": 1,
- "*.stg.dev": 1,
- "*.stgstage.dev": 1,
- "*.stolos.io": 1,
- "*.svc.firenet.ch": 1,
- "*.sys.qcx.io": 1,
- "*.telebit.xyz": 1,
- "*.transurl.be": 1,
- "*.transurl.eu": 1,
- "*.transurl.nl": 1,
- "*.triton.zone": 1,
- "*.tst.site": 1,
- "*.uberspace.de": 1,
- "*.user.fm": 1,
- "*.user.localcert.dev": 1,
- "*.usercontent.goog": 1,
- "*.vps.myjino.ru": 1,
- "*.vultrobjects.com": 1,
- "*.webhare.dev": 1,
- "*.webpaas.ovh.net": 1,
- "*.yokohama.jp": 1,
- "0.bg": 1,
- "001www.com": 1,
- "0e.vc": 1,
- "1.azurestaticapps.net": 1,
- "1.bg": 1,
- "123hjemmeside.dk": 1,
- "123hjemmeside.no": 1,
- "123homepage.it": 1,
- "123kotisivu.fi": 1,
- "123minsida.se": 1,
- "123miweb.es": 1,
- "123paginaweb.pt": 1,
- "123sait.ru": 1,
- "123siteweb.fr": 1,
- "123webseite.at": 1,
- "123webseite.de": 1,
- "123website.be": 1,
- "123website.ch": 1,
- "123website.lu": 1,
- "123website.nl": 1,
- "12hp.at": 1,
- "12hp.ch": 1,
- "12hp.de": 1,
- "1337.pictures": 1,
- "16-b.it": 1,
- "180r.com": 1,
- "1kapp.com": 1,
- "2-d.jp": 1,
- "2.azurestaticapps.net": 1,
- "2.bg": 1,
- "2000.hu": 1,
- "2038.io": 1,
- "2ix.at": 1,
- "2ix.ch": 1,
- "2ix.de": 1,
- "3.azurestaticapps.net": 1,
- "3.bg": 1,
- "32-b.it": 1,
- "3utilities.com": 1,
- "4.bg": 1,
- "4lima.at": 1,
- "4lima.ch": 1,
- "4lima.de": 1,
- "4u.com": 1,
- "5.bg": 1,
- "5g.in": 1,
- "6.bg": 1,
- "611.to": 1,
- "64-b.it": 1,
- "6g.in": 1,
- "7.bg": 1,
- "8.bg": 1,
- "9.bg": 1,
- "9guacu.br": 1,
- "a.bg": 1,
- "a.prod.fastly.net": 1,
- "a.run.app": 1,
- "a.se": 1,
- "a.ssl.fastly.net": 1,
- "aa.no": 1,
- "aaa": 1,
- "aaa.pro": 1,
- "aarborte.no": 1,
- "aarp": 1,
- "ab.ca": 1,
- "abashiri.hokkaido.jp": 1,
- "abb": 1,
- "abbott": 1,
- "abbvie": 1,
- "abc": 1,
- "abc.br": 1,
- "abeno.osaka.jp": 1,
- "abiko.chiba.jp": 1,
- "abira.hokkaido.jp": 1,
- "abkhazia.su": 1,
- "able": 1,
- "abo.pa": 1,
- "abogado": 1,
- "abr.it": 1,
- "abruzzo.it": 1,
- "abu.yamaguchi.jp": 1,
- "abudhabi": 1,
- "ac": 1,
- "ac.ae": 1,
- "ac.at": 1,
- "ac.be": 1,
- "ac.ci": 1,
- "ac.cn": 1,
- "ac.cr": 1,
- "ac.cy": 1,
- "ac.fj": 1,
- "ac.gn": 1,
- "ac.gov.br": 1,
- "ac.id": 1,
- "ac.il": 1,
- "ac.im": 1,
- "ac.in": 1,
- "ac.ir": 1,
- "ac.jp": 1,
- "ac.ke": 1,
- "ac.kr": 1,
- "ac.leg.br": 1,
- "ac.lk": 1,
- "ac.ls": 1,
- "ac.ma": 1,
- "ac.me": 1,
- "ac.mu": 1,
- "ac.mw": 1,
- "ac.mz": 1,
- "ac.ni": 1,
- "ac.nz": 1,
- "ac.pa": 1,
- "ac.pr": 1,
- "ac.rs": 1,
- "ac.ru": 1,
- "ac.rw": 1,
- "ac.se": 1,
- "ac.sz": 1,
- "ac.th": 1,
- "ac.tj": 1,
- "ac.tz": 1,
- "ac.ug": 1,
- "ac.uk": 1,
- "ac.vn": 1,
- "ac.za": 1,
- "ac.zm": 1,
- "ac.zw": 1,
- "aca.pro": 1,
- "academia.bo": 1,
- "academy": 1,
- "accenture": 1,
- "accesscam.org": 1,
- "accident-investigation.aero": 1,
- "accident-prevention.aero": 1,
- "accountant": 1,
- "accountants": 1,
- "acct.pro": 1,
- "achi.nagano.jp": 1,
- "aco": 1,
- "act.au": 1,
- "act.edu.au": 1,
- "activetrail.biz": 1,
- "actor": 1,
- "ad": 1,
- "ad.jp": 1,
- "adachi.tokyo.jp": 1,
- "adimo.co.uk": 1,
- "adm.br": 1,
- "adobeaemcloud.com": 1,
- "adobeaemcloud.net": 1,
- "adobeio-static.net": 1,
- "adobeioruntime.net": 1,
- "ads": 1,
- "adult": 1,
- "adult.ht": 1,
- "adv.br": 1,
- "adv.mz": 1,
- "adygeya.ru": 1,
- "adygeya.su": 1,
- "ae": 1,
- "ae.org": 1,
- "aeg": 1,
- "aejrie.no": 1,
- "aero": 1,
- "aero.mv": 1,
- "aero.tt": 1,
- "aerobatic.aero": 1,
- "aeroclub.aero": 1,
- "aerodrome.aero": 1,
- "aeroport.fr": 1,
- "aetna": 1,
- "af": 1,
- "affinitylottery.org.uk": 1,
- "afjord.no": 1,
- "afl": 1,
- "africa": 1,
- "africa.bj": 1,
- "africa.com": 1,
- "ag": 1,
- "ag.it": 1,
- "aga.niigata.jp": 1,
- "agakhan": 1,
- "agano.niigata.jp": 1,
- "agdenes.no": 1,
- "agematsu.nagano.jp": 1,
- "agency": 1,
- "agents.aero": 1,
- "agr.br": 1,
- "agrar.hu": 1,
- "agric.za": 1,
- "agrigento.it": 1,
- "agro.bj": 1,
- "agro.bo": 1,
- "agro.pl": 1,
- "aguni.okinawa.jp": 1,
- "ah.cn": 1,
- "ah.no": 1,
- "ai": 1,
- "ai.in": 1,
- "ai.vn": 1,
- "aibetsu.hokkaido.jp": 1,
- "aichi.jp": 1,
- "aid.pl": 1,
- "aig": 1,
- "aikawa.kanagawa.jp": 1,
- "ainan.ehime.jp": 1,
- "aioi.hyogo.jp": 1,
- "aip.ee": 1,
- "air-surveillance.aero": 1,
- "air-traffic-control.aero": 1,
- "airbus": 1,
- "aircraft.aero": 1,
- "airforce": 1,
- "airkitapps-au.com": 1,
- "airkitapps.com": 1,
- "airkitapps.eu": 1,
- "airline.aero": 1,
- "airport.aero": 1,
- "airtel": 1,
- "airtraffic.aero": 1,
- "aisai.aichi.jp": 1,
- "aisho.shiga.jp": 1,
- "aivencloud.com": 1,
- "aizubange.fukushima.jp": 1,
- "aizumi.tokushima.jp": 1,
- "aizumisato.fukushima.jp": 1,
- "aizuwakamatsu.fukushima.jp": 1,
- "aju.br": 1,
- "ak.us": 1,
- "akabira.hokkaido.jp": 1,
- "akadns.net": 1,
- "akagi.shimane.jp": 1,
- "akaiwa.okayama.jp": 1,
- "akamai-staging.net": 1,
- "akamai.net": 1,
- "akamaiedge-staging.net": 1,
- "akamaiedge.net": 1,
- "akamaihd-staging.net": 1,
- "akamaihd.net": 1,
- "akamaiorigin-staging.net": 1,
- "akamaiorigin.net": 1,
- "akamaized-staging.net": 1,
- "akamaized.net": 1,
- "akashi.hyogo.jp": 1,
- "akdn": 1,
- "aki.kochi.jp": 1,
- "akiruno.tokyo.jp": 1,
- "akishima.tokyo.jp": 1,
- "akita.akita.jp": 1,
- "akita.jp": 1,
- "akkeshi.hokkaido.jp": 1,
- "aknoluokta.no": 1,
- "ako.hyogo.jp": 1,
- "akrehamn.no": 1,
- "aktyubinsk.su": 1,
- "akune.kagoshima.jp": 1,
- "al": 1,
- "al.eu.org": 1,
- "al.gov.br": 1,
- "al.it": 1,
- "al.leg.br": 1,
- "al.no": 1,
- "al.us": 1,
- "alaheadju.no": 1,
- "aland.fi": 1,
- "alessandria.it": 1,
- "alesund.no": 1,
- "algard.no": 1,
- "alibaba": 1,
- "alipay": 1,
- "allfinanz": 1,
- "allstate": 1,
- "ally": 1,
- "alp1.ae.flow.ch": 1,
- "alpha-myqnapcloud.com": 1,
- "alpha.bounty-full.com": 1,
- "alsace": 1,
- "alstahaug.no": 1,
- "alstom": 1,
- "alt.za": 1,
- "alta.no": 1,
- "altervista.org": 1,
- "alto-adige.it": 1,
- "altoadige.it": 1,
- "alvdal.no": 1,
- "alwaysdata.net": 1,
- "am": 1,
- "am.br": 1,
- "am.gov.br": 1,
- "am.in": 1,
- "am.leg.br": 1,
- "ama.aichi.jp": 1,
- "ama.shimane.jp": 1,
- "amagasaki.hyogo.jp": 1,
- "amakusa.kumamoto.jp": 1,
- "amami.kagoshima.jp": 1,
- "amazon": 1,
- "ambulance.aero": 1,
- "americanexpress": 1,
- "americanfamily": 1,
- "amex": 1,
- "amfam": 1,
- "ami.ibaraki.jp": 1,
- "amica": 1,
- "amli.no": 1,
- "amot.no": 1,
- "amscompute.com": 1,
- "amsterdam": 1,
- "amusement.aero": 1,
- "an.it": 1,
- "analytics": 1,
- "analytics-gateway.ap-northeast-1.amazonaws.com": 1,
- "analytics-gateway.eu-west-1.amazonaws.com": 1,
- "analytics-gateway.us-east-1.amazonaws.com": 1,
- "analytics-gateway.us-east-2.amazonaws.com": 1,
- "analytics-gateway.us-west-2.amazonaws.com": 1,
- "anamizu.ishikawa.jp": 1,
- "anan.nagano.jp": 1,
- "anan.tokushima.jp": 1,
- "anani.br": 1,
- "ancona.it": 1,
- "andasuolo.no": 1,
- "andebu.no": 1,
- "ando.nara.jp": 1,
- "andoy.no": 1,
- "andria-barletta-trani.it": 1,
- "andria-trani-barletta.it": 1,
- "andriabarlettatrani.it": 1,
- "andriatranibarletta.it": 1,
- "android": 1,
- "andøy.no": 1,
- "angiang.vn": 1,
- "angry.jp": 1,
- "anjo.aichi.jp": 1,
- "ann-arbor.mi.us": 1,
- "annaka.gunma.jp": 1,
- "anpachi.gifu.jp": 1,
- "anquan": 1,
- "anz": 1,
- "ao": 1,
- "ao.it": 1,
- "aogaki.hyogo.jp": 1,
- "aogashima.tokyo.jp": 1,
- "aoki.nagano.jp": 1,
- "aol": 1,
- "aomori.aomori.jp": 1,
- "aomori.jp": 1,
- "aosta-valley.it": 1,
- "aosta.it": 1,
- "aostavalley.it": 1,
- "aoste.it": 1,
- "ap-northeast-1.elasticbeanstalk.com": 1,
- "ap-northeast-2.elasticbeanstalk.com": 1,
- "ap-northeast-3.elasticbeanstalk.com": 1,
- "ap-south-1.elasticbeanstalk.com": 1,
- "ap-southeast-1.elasticbeanstalk.com": 1,
- "ap-southeast-2.elasticbeanstalk.com": 1,
- "ap.gov.br": 1,
- "ap.gov.pl": 1,
- "ap.it": 1,
- "ap.leg.br": 1,
- "ap.ngrok.io": 1,
- "aparecida.br": 1,
- "apartments": 1,
- "api.gov.uk": 1,
- "api.stdlib.com": 1,
- "apigee.io": 1,
- "app": 1,
- "app.banzaicloud.io": 1,
- "app.br": 1,
- "app.gp": 1,
- "app.lmpm.com": 1,
- "app.os.fedoraproject.org": 1,
- "app.os.stg.fedoraproject.org": 1,
- "app.render.com": 1,
- "appchizi.com": 1,
- "appengine.flow.ch": 1,
- "apple": 1,
- "applinzi.com": 1,
- "apps.fbsbx.com": 1,
- "apps.lair.io": 1,
- "appspacehosted.com": 1,
- "appspaceusercontent.com": 1,
- "appspot.com": 1,
- "appudo.net": 1,
- "aq": 1,
- "aq.it": 1,
- "aquarelle": 1,
- "aquila.it": 1,
- "ar": 1,
- "ar.com": 1,
- "ar.it": 1,
- "ar.us": 1,
- "arab": 1,
- "arai.shizuoka.jp": 1,
- "arakawa.saitama.jp": 1,
- "arakawa.tokyo.jp": 1,
- "aramco": 1,
- "arao.kumamoto.jp": 1,
- "archi": 1,
- "architectes.bj": 1,
- "ardal.no": 1,
- "aremark.no": 1,
- "arendal.no": 1,
- "arezzo.it": 1,
- "ariake.saga.jp": 1,
- "arida.wakayama.jp": 1,
- "aridagawa.wakayama.jp": 1,
- "arita.saga.jp": 1,
- "arkhangelsk.su": 1,
- "armenia.su": 1,
- "army": 1,
- "arna.no": 1,
- "arpa": 1,
- "arq.br": 1,
- "art": 1,
- "art.br": 1,
- "art.do": 1,
- "art.dz": 1,
- "art.ht": 1,
- "art.pl": 1,
- "art.sn": 1,
- "arte": 1,
- "arte.bo": 1,
- "arts.co": 1,
- "arts.nf": 1,
- "arts.ro": 1,
- "arts.ve": 1,
- "arvo.network": 1,
- "as": 1,
- "as.us": 1,
- "asago.hyogo.jp": 1,
- "asahi.chiba.jp": 1,
- "asahi.ibaraki.jp": 1,
- "asahi.mie.jp": 1,
- "asahi.nagano.jp": 1,
- "asahi.toyama.jp": 1,
- "asahi.yamagata.jp": 1,
- "asahikawa.hokkaido.jp": 1,
- "asaka.saitama.jp": 1,
- "asakawa.fukushima.jp": 1,
- "asakuchi.okayama.jp": 1,
- "asaminami.hiroshima.jp": 1,
- "ascoli-piceno.it": 1,
- "ascolipiceno.it": 1,
- "asda": 1,
- "aseral.no": 1,
- "ashgabad.su": 1,
- "ashibetsu.hokkaido.jp": 1,
- "ashikaga.tochigi.jp": 1,
- "ashiya.fukuoka.jp": 1,
- "ashiya.hyogo.jp": 1,
- "ashoro.hokkaido.jp": 1,
- "asia": 1,
- "asker.no": 1,
- "askim.no": 1,
- "askoy.no": 1,
- "askvoll.no": 1,
- "askøy.no": 1,
- "asn.au": 1,
- "asn.lv": 1,
- "asnes.no": 1,
- "aso.kumamoto.jp": 1,
- "ass.km": 1,
- "assabu.hokkaido.jp": 1,
- "assn.lk": 1,
- "asso.ci": 1,
- "asso.dz": 1,
- "asso.eu.org": 1,
- "asso.fr": 1,
- "asso.gp": 1,
- "asso.ht": 1,
- "asso.km": 1,
- "asso.mc": 1,
- "asso.nc": 1,
- "asso.re": 1,
- "associates": 1,
- "association.aero": 1,
- "assur.bj": 1,
- "asti.it": 1,
- "asuke.aichi.jp": 1,
- "at": 1,
- "at-band-camp.net": 1,
- "at.eu.org": 1,
- "at.it": 1,
- "at.md": 1,
- "at.vg": 1,
- "atami.shizuoka.jp": 1,
- "ath.cx": 1,
- "athleta": 1,
- "atl.jelastic.vps-host.net": 1,
- "atm.pl": 1,
- "ato.br": 1,
- "atsugi.kanagawa.jp": 1,
- "atsuma.hokkaido.jp": 1,
- "attorney": 1,
- "au": 1,
- "au.eu.org": 1,
- "au.ngrok.io": 1,
- "auction": 1,
- "audi": 1,
- "audible": 1,
- "audio": 1,
- "audnedaln.no": 1,
- "augustow.pl": 1,
- "aukra.no": 1,
- "aure.no": 1,
- "aurland.no": 1,
- "aurskog-holand.no": 1,
- "aurskog-høland.no": 1,
- "aus.basketball": 1,
- "auspost": 1,
- "austevoll.no": 1,
- "austrheim.no": 1,
- "authgear-staging.com": 1,
- "authgearapps.com": 1,
- "author": 1,
- "author.aero": 1,
- "auto": 1,
- "auto.pl": 1,
- "autocode.dev": 1,
- "autos": 1,
- "av.it": 1,
- "av.tr": 1,
- "avellino.it": 1,
- "averoy.no": 1,
- "averøy.no": 1,
- "avianca": 1,
- "avocat.fr": 1,
- "avocat.pro": 1,
- "avocats.bj": 1,
- "avoues.fr": 1,
- "aw": 1,
- "awaji.hyogo.jp": 1,
- "aws": 1,
- "awsglobalaccelerator.com": 1,
- "awsmppl.com": 1,
- "ax": 1,
- "axa": 1,
- "aya.miyazaki.jp": 1,
- "ayabe.kyoto.jp": 1,
- "ayagawa.kagawa.jp": 1,
- "ayase.kanagawa.jp": 1,
- "az": 1,
- "az.us": 1,
- "azerbaijan.su": 1,
- "azimuth.network": 1,
- "azumino.nagano.jp": 1,
- "azure": 1,
- "azure-mobile.net": 1,
- "azurestaticapps.net": 1,
- "azurewebsites.net": 1,
- "aéroport.ci": 1,
- "b-data.io": 1,
- "b.bg": 1,
- "b.br": 1,
- "b.se": 1,
- "b.ssl.fastly.net": 1,
- "ba": 1,
- "ba.gov.br": 1,
- "ba.it": 1,
- "ba.leg.br": 1,
- "babia-gora.pl": 1,
- "baby": 1,
- "babyblue.jp": 1,
- "babymilk.jp": 1,
- "bacgiang.vn": 1,
- "backan.vn": 1,
- "backdrop.jp": 1,
- "backplaneapp.io": 1,
- "baclieu.vn": 1,
- "bacninh.vn": 1,
- "badaddja.no": 1,
- "bahcavuotna.no": 1,
- "bahccavuotna.no": 1,
- "baidar.no": 1,
- "baidu": 1,
- "bajddar.no": 1,
- "balashov.su": 1,
- "balat.no": 1,
- "balena-devices.com": 1,
- "balestrand.no": 1,
- "ballangen.no": 1,
- "ballooning.aero": 1,
- "balsan-sudtirol.it": 1,
- "balsan-suedtirol.it": 1,
- "balsan-südtirol.it": 1,
- "balsan.it": 1,
- "balsfjord.no": 1,
- "bambina.jp": 1,
- "bamble.no": 1,
- "banamex": 1,
- "bananarepublic": 1,
- "band": 1,
- "bandai.fukushima.jp": 1,
- "bando.ibaraki.jp": 1,
- "bank": 1,
- "bar": 1,
- "bar.pro": 1,
- "bar0.net": 1,
- "bar1.net": 1,
- "bar2.net": 1,
- "barcelona": 1,
- "barclaycard": 1,
- "barclays": 1,
- "bardu.no": 1,
- "barefoot": 1,
- "bargains": 1,
- "bari.it": 1,
- "baria-vungtau.vn": 1,
- "barletta-trani-andria.it": 1,
- "barlettatraniandria.it": 1,
- "barrel-of-knowledge.info": 1,
- "barrell-of-knowledge.info": 1,
- "barsy.bg": 1,
- "barsy.ca": 1,
- "barsy.club": 1,
- "barsy.co.uk": 1,
- "barsy.de": 1,
- "barsy.eu": 1,
- "barsy.in": 1,
- "barsy.info": 1,
- "barsy.io": 1,
- "barsy.me": 1,
- "barsy.menu": 1,
- "barsy.mobi": 1,
- "barsy.net": 1,
- "barsy.online": 1,
- "barsy.org": 1,
- "barsy.pro": 1,
- "barsy.pub": 1,
- "barsy.ro": 1,
- "barsy.shop": 1,
- "barsy.site": 1,
- "barsy.support": 1,
- "barsy.uk": 1,
- "barsycenter.com": 1,
- "barsyonline.co.uk": 1,
- "barsyonline.com": 1,
- "barueri.br": 1,
- "barum.no": 1,
- "bas.it": 1,
- "base.ec": 1,
- "base.shop": 1,
- "baseball": 1,
- "bashkiria.ru": 1,
- "bashkiria.su": 1,
- "basicserver.io": 1,
- "basilicata.it": 1,
- "basketball": 1,
- "bato.tochigi.jp": 1,
- "batsfjord.no": 1,
- "bauhaus": 1,
- "bayern": 1,
- "bb": 1,
- "bbc": 1,
- "bbs.tr": 1,
- "bbt": 1,
- "bbva": 1,
- "bc.ca": 1,
- "bc.platform.sh": 1,
- "bcg": 1,
- "bci.dnstrace.pro": 1,
- "bcn": 1,
- "bd.se": 1,
- "be": 1,
- "be.ax": 1,
- "be.eu.org": 1,
- "be.gy": 1,
- "beagleboard.io": 1,
- "bearalvahki.no": 1,
- "bearalváhki.no": 1,
- "beardu.no": 1,
- "beats": 1,
- "beauty": 1,
- "bedzin.pl": 1,
- "beep.pl": 1,
- "beer": 1,
- "beiarn.no": 1,
- "bel.tr": 1,
- "belau.pw": 1,
- "belem.br": 1,
- "belluno.it": 1,
- "benevento.it": 1,
- "bentley": 1,
- "bentre.vn": 1,
- "beppu.oita.jp": 1,
- "berg.no": 1,
- "bergamo.it": 1,
- "bergen.no": 1,
- "berlevag.no": 1,
- "berlevåg.no": 1,
- "berlin": 1,
- "beskidy.pl": 1,
- "best": 1,
- "bestbuy": 1,
- "bet": 1,
- "bet.ar": 1,
- "beta.bounty-full.com": 1,
- "beta.tailscale.net": 1,
- "betainabox.com": 1,
- "better-than.tv": 1,
- "bf": 1,
- "bg": 1,
- "bg.eu.org": 1,
- "bg.it": 1,
- "bh": 1,
- "bharti": 1,
- "bhz.br": 1,
- "bi": 1,
- "bi.it": 1,
- "bialowieza.pl": 1,
- "bialystok.pl": 1,
- "bib.br": 1,
- "bib.ve": 1,
- "bibai.hokkaido.jp": 1,
- "bible": 1,
- "bid": 1,
- "biei.hokkaido.jp": 1,
- "bielawa.pl": 1,
- "biella.it": 1,
- "bieszczady.pl": 1,
- "bievat.no": 1,
- "bievát.no": 1,
- "bifuka.hokkaido.jp": 1,
- "bihar.in": 1,
- "bihoro.hokkaido.jp": 1,
- "bike": 1,
- "bindal.no": 1,
- "bing": 1,
- "bingo": 1,
- "binhdinh.vn": 1,
- "binhduong.vn": 1,
- "binhphuoc.vn": 1,
- "binhthuan.vn": 1,
- "bio": 1,
- "bio.br": 1,
- "bip.sh": 1,
- "bir.ru": 1,
- "biratori.hokkaido.jp": 1,
- "birkenes.no": 1,
- "bitbridge.net": 1,
- "bitbucket.io": 1,
- "bitter.jp": 1,
- "biz": 1,
- "biz.at": 1,
- "biz.az": 1,
- "biz.bb": 1,
- "biz.cy": 1,
- "biz.dk": 1,
- "biz.et": 1,
- "biz.fj": 1,
- "biz.gl": 1,
- "biz.id": 1,
- "biz.in": 1,
- "biz.ki": 1,
- "biz.ls": 1,
- "biz.mv": 1,
- "biz.mw": 1,
- "biz.my": 1,
- "biz.ni": 1,
- "biz.nr": 1,
- "biz.pk": 1,
- "biz.pl": 1,
- "biz.pr": 1,
- "biz.ss": 1,
- "biz.tj": 1,
- "biz.tr": 1,
- "biz.tt": 1,
- "biz.ua": 1,
- "biz.vn": 1,
- "biz.wf": 1,
- "biz.zm": 1,
- "bizen.okayama.jp": 1,
- "bj": 1,
- "bj.cn": 1,
- "bjarkoy.no": 1,
- "bjarkøy.no": 1,
- "bjerkreim.no": 1,
- "bjugn.no": 1,
- "bl.it": 1,
- "black": 1,
- "blackbaudcdn.net": 1,
- "blackfriday": 1,
- "blockbuster": 1,
- "blog": 1,
- "blog.bo": 1,
- "blog.br": 1,
- "blog.gt": 1,
- "blog.kg": 1,
- "blog.vu": 1,
- "blogdns.com": 1,
- "blogdns.net": 1,
- "blogdns.org": 1,
- "blogsite.org": 1,
- "blogsite.xyz": 1,
- "blogspot.ae": 1,
- "blogspot.al": 1,
- "blogspot.am": 1,
- "blogspot.ba": 1,
- "blogspot.be": 1,
- "blogspot.bg": 1,
- "blogspot.bj": 1,
- "blogspot.ca": 1,
- "blogspot.cf": 1,
- "blogspot.ch": 1,
- "blogspot.cl": 1,
- "blogspot.co.at": 1,
- "blogspot.co.id": 1,
- "blogspot.co.il": 1,
- "blogspot.co.ke": 1,
- "blogspot.co.nz": 1,
- "blogspot.co.uk": 1,
- "blogspot.co.za": 1,
- "blogspot.com": 1,
- "blogspot.com.ar": 1,
- "blogspot.com.au": 1,
- "blogspot.com.br": 1,
- "blogspot.com.by": 1,
- "blogspot.com.co": 1,
- "blogspot.com.cy": 1,
- "blogspot.com.ee": 1,
- "blogspot.com.eg": 1,
- "blogspot.com.es": 1,
- "blogspot.com.mt": 1,
- "blogspot.com.ng": 1,
- "blogspot.com.tr": 1,
- "blogspot.com.uy": 1,
- "blogspot.cv": 1,
- "blogspot.cz": 1,
- "blogspot.de": 1,
- "blogspot.dk": 1,
- "blogspot.fi": 1,
- "blogspot.fr": 1,
- "blogspot.gr": 1,
- "blogspot.hk": 1,
- "blogspot.hr": 1,
- "blogspot.hu": 1,
- "blogspot.ie": 1,
- "blogspot.in": 1,
- "blogspot.is": 1,
- "blogspot.it": 1,
- "blogspot.jp": 1,
- "blogspot.kr": 1,
- "blogspot.li": 1,
- "blogspot.lt": 1,
- "blogspot.lu": 1,
- "blogspot.md": 1,
- "blogspot.mk": 1,
- "blogspot.mr": 1,
- "blogspot.mx": 1,
- "blogspot.my": 1,
- "blogspot.nl": 1,
- "blogspot.no": 1,
- "blogspot.pe": 1,
- "blogspot.pt": 1,
- "blogspot.qa": 1,
- "blogspot.re": 1,
- "blogspot.ro": 1,
- "blogspot.rs": 1,
- "blogspot.ru": 1,
- "blogspot.se": 1,
- "blogspot.sg": 1,
- "blogspot.si": 1,
- "blogspot.sk": 1,
- "blogspot.sn": 1,
- "blogspot.td": 1,
- "blogspot.tw": 1,
- "blogspot.ug": 1,
- "blogspot.vn": 1,
- "blogsyte.com": 1,
- "bloomberg": 1,
- "bloxcms.com": 1,
- "blue": 1,
- "bluebite.io": 1,
- "blush.jp": 1,
- "bm": 1,
- "bmd.br": 1,
- "bmoattachments.org": 1,
- "bms": 1,
- "bmw": 1,
- "bn": 1,
- "bn.it": 1,
- "bnpparibas": 1,
- "bnr.la": 1,
- "bo": 1,
- "bo.it": 1,
- "bo.nordland.no": 1,
- "bo.telemark.no": 1,
- "boats": 1,
- "boavista.br": 1,
- "bodo.no": 1,
- "bodø.no": 1,
- "boehringer": 1,
- "bofa": 1,
- "bokn.no": 1,
- "boldlygoingnowhere.org": 1,
- "boleslawiec.pl": 1,
- "bolivia.bo": 1,
- "bologna.it": 1,
- "bolt.hu": 1,
- "bolzano-altoadige.it": 1,
- "bolzano.it": 1,
- "bom": 1,
- "bomlo.no": 1,
- "bona.jp": 1,
- "bond": 1,
- "boo": 1,
- "boo.jp": 1,
- "book": 1,
- "booking": 1,
- "bookonline.app": 1,
- "boomla.net": 1,
- "bosch": 1,
- "bostik": 1,
- "boston": 1,
- "bot": 1,
- "bounceme.net": 1,
- "bounty-full.com": 1,
- "boutique": 1,
- "boutir.com": 1,
- "box": 1,
- "boxfuse.io": 1,
- "boy.jp": 1,
- "boyfriend.jp": 1,
- "bozen-sudtirol.it": 1,
- "bozen-suedtirol.it": 1,
- "bozen-südtirol.it": 1,
- "bozen.it": 1,
- "bplaced.com": 1,
- "bplaced.de": 1,
- "bplaced.net": 1,
- "br": 1,
- "br.com": 1,
- "br.it": 1,
- "bradesco": 1,
- "brand.se": 1,
- "brasilia.me": 1,
- "bremanger.no": 1,
- "brescia.it": 1,
- "bridgestone": 1,
- "brindisi.it": 1,
- "broadway": 1,
- "broke-it.net": 1,
- "broker": 1,
- "broker.aero": 1,
- "bronnoy.no": 1,
- "bronnoysund.no": 1,
- "brother": 1,
- "browsersafetymark.io": 1,
- "brumunddal.no": 1,
- "brussels": 1,
- "bryansk.su": 1,
- "bryne.no": 1,
- "brønnøy.no": 1,
- "brønnøysund.no": 1,
- "bs": 1,
- "bs.it": 1,
- "bsb.br": 1,
- "bss.design": 1,
- "bt": 1,
- "bt.it": 1,
- "bu.no": 1,
- "budejju.no": 1,
- "build": 1,
- "builders": 1,
- "builtwithdark.com": 1,
- "bukhara.su": 1,
- "bulsan-sudtirol.it": 1,
- "bulsan-suedtirol.it": 1,
- "bulsan-südtirol.it": 1,
- "bulsan.it": 1,
- "bungoono.oita.jp": 1,
- "bungotakada.oita.jp": 1,
- "bunkyo.tokyo.jp": 1,
- "busan.kr": 1,
- "business": 1,
- "business.in": 1,
- "but.jp": 1,
- "buy": 1,
- "buyshop.jp": 1,
- "buyshouses.net": 1,
- "buzen.fukuoka.jp": 1,
- "buzz": 1,
- "bv": 1,
- "bw": 1,
- "by": 1,
- "bydgoszcz.pl": 1,
- "byen.site": 1,
- "bygland.no": 1,
- "bykle.no": 1,
- "bytom.pl": 1,
- "bz": 1,
- "bz.it": 1,
- "bzh": 1,
- "báhcavuotna.no": 1,
- "báhccavuotna.no": 1,
- "báidár.no": 1,
- "bájddar.no": 1,
- "bálát.no": 1,
- "bådåddjå.no": 1,
- "båtsfjord.no": 1,
- "bærum.no": 1,
- "bø.nordland.no": 1,
- "bø.telemark.no": 1,
- "bømlo.no": 1,
- "c.bg": 1,
- "c.cdn77.org": 1,
- "c.la": 1,
- "c.se": 1,
- "c66.me": 1,
- "ca": 1,
- "ca-central-1.elasticbeanstalk.com": 1,
- "ca.eu.org": 1,
- "ca.in": 1,
- "ca.it": 1,
- "ca.na": 1,
- "ca.reclaim.cloud": 1,
- "ca.us": 1,
- "caa.aero": 1,
- "caa.li": 1,
- "cab": 1,
- "cable-modem.org": 1,
- "cafe": 1,
- "cafjs.com": 1,
- "cagliari.it": 1,
- "cahcesuolo.no": 1,
- "cal": 1,
- "cal.it": 1,
- "calabria.it": 1,
- "call": 1,
- "caltanissetta.it": 1,
- "calvinklein": 1,
- "cam": 1,
- "cam.it": 1,
- "camau.vn": 1,
- "camdvr.org": 1,
- "camera": 1,
- "camp": 1,
- "campaign.gov.uk": 1,
- "campania.it": 1,
- "campidano-medio.it": 1,
- "campidanomedio.it": 1,
- "campinagrande.br": 1,
- "campinas.br": 1,
- "campobasso.it": 1,
- "candypop.jp": 1,
- "canon": 1,
- "cantho.vn": 1,
- "canva-apps.cn": 1,
- "canva-apps.com": 1,
- "caobang.vn": 1,
- "capetown": 1,
- "capital": 1,
- "capitalone": 1,
- "capoo.jp": 1,
- "car": 1,
- "caracal.mythic-beasts.com": 1,
- "caravan": 1,
- "carbonia-iglesias.it": 1,
- "carboniaiglesias.it": 1,
- "cards": 1,
- "care": 1,
- "career": 1,
- "careers": 1,
- "cargo.aero": 1,
- "carrara-massa.it": 1,
- "carraramassa.it": 1,
- "carrd.co": 1,
- "cars": 1,
- "casa": 1,
- "casacam.net": 1,
- "case": 1,
- "caserta.it": 1,
- "cash": 1,
- "casino": 1,
- "casino.hu": 1,
- "cat": 1,
- "cat.ax": 1,
- "catania.it": 1,
- "catanzaro.it": 1,
- "catering": 1,
- "catering.aero": 1,
- "catfood.jp": 1,
- "catholic": 1,
- "catholic.edu.au": 1,
- "caxias.br": 1,
- "cb.it": 1,
- "cba": 1,
- "cbg.ru": 1,
- "cbn": 1,
- "cbre": 1,
- "cbs": 1,
- "cc": 1,
- "cc.ak.us": 1,
- "cc.al.us": 1,
- "cc.ar.us": 1,
- "cc.as.us": 1,
- "cc.az.us": 1,
- "cc.ca.us": 1,
- "cc.co.us": 1,
- "cc.ct.us": 1,
- "cc.dc.us": 1,
- "cc.de.us": 1,
- "cc.fl.us": 1,
- "cc.ga.us": 1,
- "cc.gu.us": 1,
- "cc.hi.us": 1,
- "cc.hn": 1,
- "cc.ia.us": 1,
- "cc.id.us": 1,
- "cc.il.us": 1,
- "cc.in.us": 1,
- "cc.ks.us": 1,
- "cc.ky.us": 1,
- "cc.la.us": 1,
- "cc.ma.us": 1,
- "cc.md.us": 1,
- "cc.me.us": 1,
- "cc.mi.us": 1,
- "cc.mn.us": 1,
- "cc.mo.us": 1,
- "cc.ms.us": 1,
- "cc.mt.us": 1,
- "cc.na": 1,
- "cc.nc.us": 1,
- "cc.nd.us": 1,
- "cc.ne.us": 1,
- "cc.nh.us": 1,
- "cc.nj.us": 1,
- "cc.nm.us": 1,
- "cc.nv.us": 1,
- "cc.ny.us": 1,
- "cc.oh.us": 1,
- "cc.ok.us": 1,
- "cc.or.us": 1,
- "cc.pa.us": 1,
- "cc.pr.us": 1,
- "cc.ri.us": 1,
- "cc.sc.us": 1,
- "cc.sd.us": 1,
- "cc.tn.us": 1,
- "cc.tx.us": 1,
- "cc.ua": 1,
- "cc.ut.us": 1,
- "cc.va.us": 1,
- "cc.vi.us": 1,
- "cc.vt.us": 1,
- "cc.wa.us": 1,
- "cc.wi.us": 1,
- "cc.wv.us": 1,
- "cc.wy.us": 1,
- "cci.fr": 1,
- "cd": 1,
- "cd.eu.org": 1,
- "cdn-edges.net": 1,
- "cdn.prod.atlassian-dev.net": 1,
- "cdn77-ssl.net": 1,
- "ce.gov.br": 1,
- "ce.it": 1,
- "ce.leg.br": 1,
- "cechire.com": 1,
- "center": 1,
- "centralus.azurestaticapps.net": 1,
- "ceo": 1,
- "cern": 1,
- "certification.aero": 1,
- "certmgr.org": 1,
- "cesena-forli.it": 1,
- "cesena-forlì.it": 1,
- "cesenaforli.it": 1,
- "cesenaforlì.it": 1,
- "cf": 1,
- "cf-ipfs.com": 1,
- "cfa": 1,
- "cfd": 1,
- "cg": 1,
- "ch": 1,
- "ch.eu.org": 1,
- "ch.it": 1,
- "ch.tc": 1,
- "ch.trendhosting.cloud": 1,
- "chambagri.fr": 1,
- "championship.aero": 1,
- "chanel": 1,
- "channel": 1,
- "channelsdvr.net": 1,
- "charity": 1,
- "charter.aero": 1,
- "chase": 1,
- "chat": 1,
- "cheap": 1,
- "cheap.jp": 1,
- "cherkassy.ua": 1,
- "cherkasy.ua": 1,
- "chernigov.ua": 1,
- "chernihiv.ua": 1,
- "chernivtsi.ua": 1,
- "chernovtsy.ua": 1,
- "chiba.jp": 1,
- "chicappa.jp": 1,
- "chichibu.saitama.jp": 1,
- "chieti.it": 1,
- "chigasaki.kanagawa.jp": 1,
- "chihayaakasaka.osaka.jp": 1,
- "chijiwa.nagasaki.jp": 1,
- "chikugo.fukuoka.jp": 1,
- "chikuho.fukuoka.jp": 1,
- "chikuhoku.nagano.jp": 1,
- "chikujo.fukuoka.jp": 1,
- "chikuma.nagano.jp": 1,
- "chikusei.ibaraki.jp": 1,
- "chikushino.fukuoka.jp": 1,
- "chikuzen.fukuoka.jp": 1,
- "chillout.jp": 1,
- "chimkent.su": 1,
- "chino.nagano.jp": 1,
- "chintai": 1,
- "chippubetsu.hokkaido.jp": 1,
- "chips.jp": 1,
- "chirurgiens-dentistes-en-france.fr": 1,
- "chirurgiens-dentistes.fr": 1,
- "chiryu.aichi.jp": 1,
- "chita.aichi.jp": 1,
- "chitose.hokkaido.jp": 1,
- "chiyoda.gunma.jp": 1,
- "chiyoda.tokyo.jp": 1,
- "chizu.tottori.jp": 1,
- "chofu.tokyo.jp": 1,
- "chonan.chiba.jp": 1,
- "chosei.chiba.jp": 1,
- "choshi.chiba.jp": 1,
- "chowder.jp": 1,
- "choyo.kumamoto.jp": 1,
- "christmas": 1,
- "chrome": 1,
- "chtr.k12.ma.us": 1,
- "chu.jp": 1,
- "chungbuk.kr": 1,
- "chungnam.kr": 1,
- "chuo.chiba.jp": 1,
- "chuo.fukuoka.jp": 1,
- "chuo.osaka.jp": 1,
- "chuo.tokyo.jp": 1,
- "chuo.yamanashi.jp": 1,
- "church": 1,
- "ci": 1,
- "ci.it": 1,
- "ciao.jp": 1,
- "ciencia.bo": 1,
- "cieszyn.pl": 1,
- "cim.br": 1,
- "cipriani": 1,
- "circle": 1,
- "cisco": 1,
- "ciscofreak.com": 1,
- "cistron.nl": 1,
- "citadel": 1,
- "citi": 1,
- "citic": 1,
- "city": 1,
- "city.hu": 1,
- "cityeats": 1,
- "civilaviation.aero": 1,
- "ck.ua": 1,
- "cl": 1,
- "cl.it": 1,
- "claims": 1,
- "clan.rip": 1,
- "cleaning": 1,
- "clerk.app": 1,
- "clerkstage.app": 1,
- "cleverapps.io": 1,
- "click": 1,
- "clickrising.net": 1,
- "clinic": 1,
- "clinique": 1,
- "clothing": 1,
- "cloud": 1,
- "cloud-fr1.unispace.io": 1,
- "cloud.fedoraproject.org": 1,
- "cloud.goog": 1,
- "cloud.interhostsolutions.be": 1,
- "cloud.jelastic.open.tim.it": 1,
- "cloud.nospamproxy.com": 1,
- "cloud66.ws": 1,
- "cloud66.zone": 1,
- "cloudaccess.host": 1,
- "cloudaccess.net": 1,
- "cloudapp.net": 1,
- "cloudapps.digital": 1,
- "cloudcontrolapp.com": 1,
- "cloudcontrolled.com": 1,
- "cloudflare-ipfs.com": 1,
- "cloudfront.net": 1,
- "cloudfunctions.net": 1,
- "cloudjiffy.net": 1,
- "cloudns.asia": 1,
- "cloudns.biz": 1,
- "cloudns.cc": 1,
- "cloudns.club": 1,
- "cloudns.eu": 1,
- "cloudns.in": 1,
- "cloudns.info": 1,
- "cloudns.org": 1,
- "cloudns.pro": 1,
- "cloudns.pw": 1,
- "cloudns.us": 1,
- "cloudsite.builders": 1,
- "cloudycluster.net": 1,
- "club": 1,
- "club.aero": 1,
- "club.tw": 1,
- "clubmed": 1,
- "cm": 1,
- "cn": 1,
- "cn-north-1.eb.amazonaws.com.cn": 1,
- "cn-northwest-1.eb.amazonaws.com.cn": 1,
- "cn.com": 1,
- "cn.eu.org": 1,
- "cn.in": 1,
- "cn.it": 1,
- "cn.ua": 1,
- "cn.vu": 1,
- "cng.br": 1,
- "cnpy.gdn": 1,
- "cnt.br": 1,
- "co": 1,
- "co.ae": 1,
- "co.ag": 1,
- "co.am": 1,
- "co.ao": 1,
- "co.at": 1,
- "co.bb": 1,
- "co.bi": 1,
- "co.bj": 1,
- "co.bn": 1,
- "co.business": 1,
- "co.bw": 1,
- "co.ca": 1,
- "co.ci": 1,
- "co.cl": 1,
- "co.cm": 1,
- "co.com": 1,
- "co.cr": 1,
- "co.cz": 1,
- "co.dk": 1,
- "co.education": 1,
- "co.events": 1,
- "co.financial": 1,
- "co.gg": 1,
- "co.gl": 1,
- "co.gy": 1,
- "co.hu": 1,
- "co.id": 1,
- "co.il": 1,
- "co.im": 1,
- "co.in": 1,
- "co.ir": 1,
- "co.it": 1,
- "co.je": 1,
- "co.jp": 1,
- "co.ke": 1,
- "co.kr": 1,
- "co.krd": 1,
- "co.lc": 1,
- "co.ls": 1,
- "co.ma": 1,
- "co.me": 1,
- "co.mg": 1,
- "co.mu": 1,
- "co.mw": 1,
- "co.mz": 1,
- "co.na": 1,
- "co.network": 1,
- "co.ni": 1,
- "co.nl": 1,
- "co.no": 1,
- "co.nz": 1,
- "co.om": 1,
- "co.pl": 1,
- "co.place": 1,
- "co.pn": 1,
- "co.pw": 1,
- "co.ro": 1,
- "co.rs": 1,
- "co.rw": 1,
- "co.st": 1,
- "co.sz": 1,
- "co.technology": 1,
- "co.th": 1,
- "co.tj": 1,
- "co.tm": 1,
- "co.tt": 1,
- "co.tz": 1,
- "co.ua": 1,
- "co.ug": 1,
- "co.uk": 1,
- "co.us": 1,
- "co.uz": 1,
- "co.ve": 1,
- "co.vi": 1,
- "co.za": 1,
- "co.zm": 1,
- "co.zw": 1,
- "coach": 1,
- "cocotte.jp": 1,
- "codeberg.page": 1,
- "codes": 1,
- "codespot.com": 1,
- "coffee": 1,
- "cog.mi.us": 1,
- "col.ng": 1,
- "college": 1,
- "collegefan.org": 1,
- "cologne": 1,
- "com": 1,
- "com.ac": 1,
- "com.af": 1,
- "com.ag": 1,
- "com.ai": 1,
- "com.al": 1,
- "com.am": 1,
- "com.ar": 1,
- "com.au": 1,
- "com.aw": 1,
- "com.az": 1,
- "com.ba": 1,
- "com.bb": 1,
- "com.bh": 1,
- "com.bi": 1,
- "com.bj": 1,
- "com.bm": 1,
- "com.bn": 1,
- "com.bo": 1,
- "com.br": 1,
- "com.bs": 1,
- "com.bt": 1,
- "com.by": 1,
- "com.bz": 1,
- "com.ci": 1,
- "com.cm": 1,
- "com.cn": 1,
- "com.co": 1,
- "com.cu": 1,
- "com.cv": 1,
- "com.cw": 1,
- "com.cy": 1,
- "com.de": 1,
- "com.dm": 1,
- "com.do": 1,
- "com.dz": 1,
- "com.ec": 1,
- "com.ee": 1,
- "com.eg": 1,
- "com.es": 1,
- "com.et": 1,
- "com.fj": 1,
- "com.fm": 1,
- "com.fr": 1,
- "com.ge": 1,
- "com.gh": 1,
- "com.gi": 1,
- "com.gl": 1,
- "com.gn": 1,
- "com.gp": 1,
- "com.gr": 1,
- "com.gt": 1,
- "com.gu": 1,
- "com.gy": 1,
- "com.hk": 1,
- "com.hn": 1,
- "com.hr": 1,
- "com.ht": 1,
- "com.im": 1,
- "com.in": 1,
- "com.io": 1,
- "com.iq": 1,
- "com.is": 1,
- "com.jo": 1,
- "com.kg": 1,
- "com.ki": 1,
- "com.km": 1,
- "com.kp": 1,
- "com.kw": 1,
- "com.ky": 1,
- "com.kz": 1,
- "com.la": 1,
- "com.lb": 1,
- "com.lc": 1,
- "com.lk": 1,
- "com.lr": 1,
- "com.lv": 1,
- "com.ly": 1,
- "com.mg": 1,
- "com.mk": 1,
- "com.ml": 1,
- "com.mo": 1,
- "com.ms": 1,
- "com.mt": 1,
- "com.mu": 1,
- "com.mv": 1,
- "com.mw": 1,
- "com.mx": 1,
- "com.my": 1,
- "com.na": 1,
- "com.nf": 1,
- "com.ng": 1,
- "com.ni": 1,
- "com.nr": 1,
- "com.om": 1,
- "com.pa": 1,
- "com.pe": 1,
- "com.pf": 1,
- "com.ph": 1,
- "com.pk": 1,
- "com.pl": 1,
- "com.pr": 1,
- "com.ps": 1,
- "com.pt": 1,
- "com.py": 1,
- "com.qa": 1,
- "com.re": 1,
- "com.ro": 1,
- "com.ru": 1,
- "com.sa": 1,
- "com.sb": 1,
- "com.sc": 1,
- "com.sd": 1,
- "com.se": 1,
- "com.sg": 1,
- "com.sh": 1,
- "com.sl": 1,
- "com.sn": 1,
- "com.so": 1,
- "com.ss": 1,
- "com.st": 1,
- "com.sv": 1,
- "com.sy": 1,
- "com.tj": 1,
- "com.tm": 1,
- "com.tn": 1,
- "com.to": 1,
- "com.tr": 1,
- "com.tt": 1,
- "com.tw": 1,
- "com.ua": 1,
- "com.ug": 1,
- "com.uy": 1,
- "com.uz": 1,
- "com.vc": 1,
- "com.ve": 1,
- "com.vi": 1,
- "com.vn": 1,
- "com.vu": 1,
- "com.ws": 1,
- "com.ye": 1,
- "com.zm": 1,
- "comcast": 1,
- "commbank": 1,
- "commune.am": 1,
- "community": 1,
- "community-pro.de": 1,
- "community-pro.net": 1,
- "como.it": 1,
- "company": 1,
- "compare": 1,
- "computer": 1,
- "comsec": 1,
- "condos": 1,
- "conf.au": 1,
- "conf.lv": 1,
- "conf.se": 1,
- "conference.aero": 1,
- "conn.uk": 1,
- "construction": 1,
- "consulado.st": 1,
- "consultant.aero": 1,
- "consulting": 1,
- "consulting.aero": 1,
- "contact": 1,
- "contagem.br": 1,
- "contractors": 1,
- "control.aero": 1,
- "cooking": 1,
- "cool": 1,
- "coolblog.jp": 1,
- "coop": 1,
- "coop.ar": 1,
- "coop.br": 1,
- "coop.ht": 1,
- "coop.in": 1,
- "coop.km": 1,
- "coop.mv": 1,
- "coop.mw": 1,
- "coop.py": 1,
- "coop.rw": 1,
- "coop.tt": 1,
- "cooperativa.bo": 1,
- "copro.uk": 1,
- "corsica": 1,
- "cosenza.it": 1,
- "couchpotatofries.org": 1,
- "council.aero": 1,
- "country": 1,
- "coupon": 1,
- "coupons": 1,
- "courses": 1,
- "coz.br": 1,
- "cpa": 1,
- "cpa.pro": 1,
- "cq.cn": 1,
- "cr": 1,
- "cr.it": 1,
- "cr.ua": 1,
- "crafting.xyz": 1,
- "cranky.jp": 1,
- "crap.jp": 1,
- "crd.co": 1,
- "credit": 1,
- "creditcard": 1,
- "creditunion": 1,
- "cremona.it": 1,
- "crew.aero": 1,
- "cri.br": 1,
- "cri.nz": 1,
- "cricket": 1,
- "crimea.ua": 1,
- "crotone.it": 1,
- "crown": 1,
- "crs": 1,
- "cruise": 1,
- "cruises": 1,
- "cs.in": 1,
- "cs.it": 1,
- "cs.keliweb.cloud": 1,
- "csx.cc": 1,
- "ct.it": 1,
- "ct.us": 1,
- "cu": 1,
- "cuiaba.br": 1,
- "cuisinella": 1,
- "cuneo.it": 1,
- "cupcake.is": 1,
- "curitiba.br": 1,
- "curv.dev": 1,
- "cust.dev.thingdust.io": 1,
- "cust.disrec.thingdust.io": 1,
- "cust.prod.thingdust.io": 1,
- "cust.retrosnub.co.uk": 1,
- "cust.testing.thingdust.io": 1,
- "custom.metacentrum.cz": 1,
- "customer.mythic-beasts.com": 1,
- "customer.speedpartner.de": 1,
- "cutegirl.jp": 1,
- "cv": 1,
- "cv.ua": 1,
- "cw": 1,
- "cx": 1,
- "cx.ua": 1,
- "cy": 1,
- "cy.eu.org": 1,
- "cya.gg": 1,
- "cymru": 1,
- "cyon.link": 1,
- "cyon.site": 1,
- "cyou": 1,
- "cz": 1,
- "cz.eu.org": 1,
- "cz.it": 1,
- "czeladz.pl": 1,
- "czest.pl": 1,
- "d.bg": 1,
- "d.gv.vc": 1,
- "d.se": 1,
- "daa.jp": 1,
- "dabur": 1,
- "dad": 1,
- "daegu.kr": 1,
- "daejeon.kr": 1,
- "daemon.panel.gg": 1,
- "dagestan.ru": 1,
- "dagestan.su": 1,
- "daigo.ibaraki.jp": 1,
- "daisen.akita.jp": 1,
- "daito.osaka.jp": 1,
- "daiwa.hiroshima.jp": 1,
- "daklak.vn": 1,
- "daknong.vn": 1,
- "damnserver.com": 1,
- "danang.vn": 1,
- "dance": 1,
- "daplie.me": 1,
- "data": 1,
- "date": 1,
- "date.fukushima.jp": 1,
- "date.hokkaido.jp": 1,
- "dating": 1,
- "datsun": 1,
- "dattolocal.com": 1,
- "dattolocal.net": 1,
- "dattorelay.com": 1,
- "dattoweb.com": 1,
- "davvenjarga.no": 1,
- "davvenjárga.no": 1,
- "davvesiida.no": 1,
- "day": 1,
- "daynight.jp": 1,
- "dazaifu.fukuoka.jp": 1,
- "dc.us": 1,
- "dclk": 1,
- "dd-dns.de": 1,
- "ddns.me": 1,
- "ddns.net": 1,
- "ddns5.com": 1,
- "ddnsfree.com": 1,
- "ddnsgeek.com": 1,
- "ddnsking.com": 1,
- "ddnslive.com": 1,
- "ddnss.de": 1,
- "ddnss.org": 1,
- "dds": 1,
- "de": 1,
- "de.com": 1,
- "de.cool": 1,
- "de.eu.org": 1,
- "de.gt": 1,
- "de.ls": 1,
- "de.md": 1,
- "de.trendhosting.cloud": 1,
- "de.us": 1,
- "deal": 1,
- "dealer": 1,
- "deals": 1,
- "deatnu.no": 1,
- "debian.net": 1,
- "deca.jp": 1,
- "deci.jp": 1,
- "dedibox.fr": 1,
- "dedyn.io": 1,
- "def.br": 1,
- "definima.io": 1,
- "definima.net": 1,
- "degree": 1,
- "delhi.in": 1,
- "delivery": 1,
- "dell": 1,
- "dell-ogliastra.it": 1,
- "dellogliastra.it": 1,
- "deloitte": 1,
- "delta": 1,
- "demo.datacenter.fi": 1,
- "demo.datadetect.com": 1,
- "demo.jelastic.com": 1,
- "democracia.bo": 1,
- "democrat": 1,
- "demon.nl": 1,
- "deno-staging.dev": 1,
- "deno.dev": 1,
- "dental": 1,
- "dentist": 1,
- "dep.no": 1,
- "deporte.bo": 1,
- "des.br": 1,
- "desa.id": 1,
- "desi": 1,
- "design": 1,
- "design.aero": 1,
- "det.br": 1,
- "deta.app": 1,
- "deta.dev": 1,
- "dev": 1,
- "dev-myqnapcloud.com": 1,
- "dev.br": 1,
- "dev.static.land": 1,
- "dev.vu": 1,
- "development.run": 1,
- "devices.resinstaging.io": 1,
- "df.gov.br": 1,
- "df.leg.br": 1,
- "dgca.aero": 1,
- "dh.bytemark.co.uk": 1,
- "dhl": 1,
- "diadem.cloud": 1,
- "diamonds": 1,
- "dielddanuorri.no": 1,
- "dienbien.vn": 1,
- "diet": 1,
- "digick.jp": 1,
- "digital": 1,
- "direct": 1,
- "direct.quickconnect.cn": 1,
- "direct.quickconnect.to": 1,
- "directory": 1,
- "discordsays.com": 1,
- "discordsez.com": 1,
- "discount": 1,
- "discourse.group": 1,
- "discourse.team": 1,
- "discover": 1,
- "dish": 1,
- "diskstation.eu": 1,
- "diskstation.me": 1,
- "diskstation.org": 1,
- "diskussionsbereich.de": 1,
- "ditchyourip.com": 1,
- "divtasvuodna.no": 1,
- "divttasvuotna.no": 1,
- "diy": 1,
- "dj": 1,
- "dk": 1,
- "dk.eu.org": 1,
- "dlugoleka.pl": 1,
- "dm": 1,
- "dn.ua": 1,
- "dnepropetrovsk.ua": 1,
- "dni.us": 1,
- "dnipropetrovsk.ua": 1,
- "dnp": 1,
- "dnsalias.com": 1,
- "dnsalias.net": 1,
- "dnsalias.org": 1,
- "dnsdojo.com": 1,
- "dnsdojo.net": 1,
- "dnsdojo.org": 1,
- "dnsfor.me": 1,
- "dnshome.de": 1,
- "dnsiskinky.com": 1,
- "dnsking.ch": 1,
- "dnsup.net": 1,
- "dnsupdate.info": 1,
- "dnsupdater.de": 1,
- "do": 1,
- "docs": 1,
- "doctor": 1,
- "does-it.net": 1,
- "doesntexist.com": 1,
- "doesntexist.org": 1,
- "dog": 1,
- "dojin.com": 1,
- "domains": 1,
- "donetsk.ua": 1,
- "dongnai.vn": 1,
- "dongthap.vn": 1,
- "donna.no": 1,
- "dontexist.com": 1,
- "dontexist.net": 1,
- "dontexist.org": 1,
- "doomdns.com": 1,
- "doomdns.org": 1,
- "dopaas.com": 1,
- "doshi.yamanashi.jp": 1,
- "dot": 1,
- "dovre.no": 1,
- "download": 1,
- "dp.ua": 1,
- "dr.in": 1,
- "dr.na": 1,
- "dr.tr": 1,
- "drammen.no": 1,
- "drangedal.no": 1,
- "dray-dns.de": 1,
- "drayddns.com": 1,
- "draydns.de": 1,
- "dreamhosters.com": 1,
- "drive": 1,
- "drobak.no": 1,
- "drr.ac": 1,
- "drud.io": 1,
- "drud.us": 1,
- "drøbak.no": 1,
- "dscloud.biz": 1,
- "dscloud.me": 1,
- "dscloud.mobi": 1,
- "dsmynas.com": 1,
- "dsmynas.net": 1,
- "dsmynas.org": 1,
- "dst.mi.us": 1,
- "dtv": 1,
- "dubai": 1,
- "duckdns.org": 1,
- "dunlop": 1,
- "dupont": 1,
- "durban": 1,
- "dvag": 1,
- "dvr": 1,
- "dvrcam.info": 1,
- "dvrdns.org": 1,
- "dy.fi": 1,
- "dyn-berlin.de": 1,
- "dyn-ip24.de": 1,
- "dyn-o-saur.com": 1,
- "dyn-vpn.de": 1,
- "dyn.cosidns.de": 1,
- "dyn.ddnss.de": 1,
- "dyn.home-webserver.de": 1,
- "dyn53.io": 1,
- "dynalias.com": 1,
- "dynalias.net": 1,
- "dynalias.org": 1,
- "dynamic-dns.info": 1,
- "dynamisches-dns.de": 1,
- "dynathome.net": 1,
- "dyndns-at-home.com": 1,
- "dyndns-at-work.com": 1,
- "dyndns-blog.com": 1,
- "dyndns-free.com": 1,
- "dyndns-home.com": 1,
- "dyndns-ip.com": 1,
- "dyndns-mail.com": 1,
- "dyndns-office.com": 1,
- "dyndns-pics.com": 1,
- "dyndns-remote.com": 1,
- "dyndns-server.com": 1,
- "dyndns-web.com": 1,
- "dyndns-wiki.com": 1,
- "dyndns-work.com": 1,
- "dyndns.biz": 1,
- "dyndns.dappnode.io": 1,
- "dyndns.ddnss.de": 1,
- "dyndns.info": 1,
- "dyndns.org": 1,
- "dyndns.tv": 1,
- "dyndns.ws": 1,
- "dyndns1.de": 1,
- "dynns.com": 1,
- "dynserv.org": 1,
- "dynu.net": 1,
- "dynv6.net": 1,
- "dynvpn.de": 1,
- "dyroy.no": 1,
- "dyrøy.no": 1,
- "dz": 1,
- "dønna.no": 1,
- "e.bg": 1,
- "e.se": 1,
- "e12.ve": 1,
- "e164.arpa": 1,
- "e4.cz": 1,
- "earth": 1,
- "east-kazakhstan.su": 1,
- "eastasia.azurestaticapps.net": 1,
- "eastus2.azurestaticapps.net": 1,
- "easypanel.app": 1,
- "easypanel.host": 1,
- "eat": 1,
- "eating-organic.net": 1,
- "eaton.mi.us": 1,
- "ebetsu.hokkaido.jp": 1,
- "ebina.kanagawa.jp": 1,
- "ebino.miyazaki.jp": 1,
- "ebiz.tw": 1,
- "ec": 1,
- "echizen.fukui.jp": 1,
- "ecn.br": 1,
- "eco": 1,
- "eco.bj": 1,
- "eco.br": 1,
- "ecologia.bo": 1,
- "ecommerce-shop.pl": 1,
- "econo.bj": 1,
- "economia.bo": 1,
- "ed.ao": 1,
- "ed.ci": 1,
- "ed.cr": 1,
- "ed.jp": 1,
- "ed.pw": 1,
- "edeka": 1,
- "edgeapp.net": 1,
- "edgecompute.app": 1,
- "edgekey-staging.net": 1,
- "edgekey.net": 1,
- "edgestack.me": 1,
- "edgesuite-staging.net": 1,
- "edgesuite.net": 1,
- "editorx.io": 1,
- "edogawa.tokyo.jp": 1,
- "edu": 1,
- "edu.ac": 1,
- "edu.af": 1,
- "edu.al": 1,
- "edu.ar": 1,
- "edu.au": 1,
- "edu.az": 1,
- "edu.ba": 1,
- "edu.bb": 1,
- "edu.bh": 1,
- "edu.bi": 1,
- "edu.bj": 1,
- "edu.bm": 1,
- "edu.bn": 1,
- "edu.bo": 1,
- "edu.br": 1,
- "edu.bs": 1,
- "edu.bt": 1,
- "edu.bz": 1,
- "edu.ci": 1,
- "edu.cn": 1,
- "edu.co": 1,
- "edu.cu": 1,
- "edu.cv": 1,
- "edu.cw": 1,
- "edu.dm": 1,
- "edu.do": 1,
- "edu.dz": 1,
- "edu.ec": 1,
- "edu.ee": 1,
- "edu.eg": 1,
- "edu.es": 1,
- "edu.et": 1,
- "edu.eu.org": 1,
- "edu.fm": 1,
- "edu.gd": 1,
- "edu.ge": 1,
- "edu.gh": 1,
- "edu.gi": 1,
- "edu.gl": 1,
- "edu.gn": 1,
- "edu.gp": 1,
- "edu.gr": 1,
- "edu.gt": 1,
- "edu.gu": 1,
- "edu.gy": 1,
- "edu.hk": 1,
- "edu.hn": 1,
- "edu.ht": 1,
- "edu.in": 1,
- "edu.iq": 1,
- "edu.is": 1,
- "edu.it": 1,
- "edu.jo": 1,
- "edu.kg": 1,
- "edu.ki": 1,
- "edu.km": 1,
- "edu.kn": 1,
- "edu.kp": 1,
- "edu.krd": 1,
- "edu.kw": 1,
- "edu.ky": 1,
- "edu.kz": 1,
- "edu.la": 1,
- "edu.lb": 1,
- "edu.lc": 1,
- "edu.lk": 1,
- "edu.lr": 1,
- "edu.ls": 1,
- "edu.lv": 1,
- "edu.ly": 1,
- "edu.me": 1,
- "edu.mg": 1,
- "edu.mk": 1,
- "edu.ml": 1,
- "edu.mn": 1,
- "edu.mo": 1,
- "edu.ms": 1,
- "edu.mt": 1,
- "edu.mv": 1,
- "edu.mw": 1,
- "edu.mx": 1,
- "edu.my": 1,
- "edu.mz": 1,
- "edu.ng": 1,
- "edu.ni": 1,
- "edu.nr": 1,
- "edu.om": 1,
- "edu.pa": 1,
- "edu.pe": 1,
- "edu.pf": 1,
- "edu.ph": 1,
- "edu.pk": 1,
- "edu.pl": 1,
- "edu.pn": 1,
- "edu.pr": 1,
- "edu.ps": 1,
- "edu.pt": 1,
- "edu.py": 1,
- "edu.qa": 1,
- "edu.rs": 1,
- "edu.ru": 1,
- "edu.sa": 1,
- "edu.sb": 1,
- "edu.sc": 1,
- "edu.scot": 1,
- "edu.sd": 1,
- "edu.sg": 1,
- "edu.sl": 1,
- "edu.sn": 1,
- "edu.so": 1,
- "edu.ss": 1,
- "edu.st": 1,
- "edu.sv": 1,
- "edu.sy": 1,
- "edu.tj": 1,
- "edu.tm": 1,
- "edu.to": 1,
- "edu.tr": 1,
- "edu.tt": 1,
- "edu.tw": 1,
- "edu.ua": 1,
- "edu.uy": 1,
- "edu.vc": 1,
- "edu.ve": 1,
- "edu.vn": 1,
- "edu.vu": 1,
- "edu.ws": 1,
- "edu.ye": 1,
- "edu.za": 1,
- "edu.zm": 1,
- "education": 1,
- "educator.aero": 1,
- "edugit.io": 1,
- "ee": 1,
- "ee.eu.org": 1,
- "eek.jp": 1,
- "eero-stage.online": 1,
- "eero.online": 1,
- "eg": 1,
- "egersund.no": 1,
- "egoism.jp": 1,
- "ehime.jp": 1,
- "eid.no": 1,
- "eidfjord.no": 1,
- "eidsberg.no": 1,
- "eidskog.no": 1,
- "eidsvoll.no": 1,
- "eigersund.no": 1,
- "eiheiji.fukui.jp": 1,
- "ekloges.cy": 1,
- "elasticbeanstalk.com": 1,
- "elblag.pl": 1,
- "elementor.cloud": 1,
- "elementor.cool": 1,
- "elk.pl": 1,
- "elverum.no": 1,
- "email": 1,
- "emb.kw": 1,
- "embaixada.st": 1,
- "embetsu.hokkaido.jp": 1,
- "emerck": 1,
- "emergency.aero": 1,
- "emilia-romagna.it": 1,
- "emiliaromagna.it": 1,
- "emp.br": 1,
- "empresa.bo": 1,
- "emr.it": 1,
- "en-root.fr": 1,
- "en.it": 1,
- "ena.gifu.jp": 1,
- "encoreapi.com": 1,
- "encr.app": 1,
- "endofinternet.net": 1,
- "endofinternet.org": 1,
- "endoftheinternet.org": 1,
- "enebakk.no": 1,
- "energy": 1,
- "enf.br": 1,
- "eng.br": 1,
- "eng.pro": 1,
- "engerdal.no": 1,
- "engine.aero": 1,
- "engineer": 1,
- "engineer.aero": 1,
- "engineering": 1,
- "eniwa.hokkaido.jp": 1,
- "enna.it": 1,
- "ens.tn": 1,
- "enscaled.sg": 1,
- "ent.platform.sh": 1,
- "enterprisecloud.nu": 1,
- "enterprises": 1,
- "entertainment.aero": 1,
- "epson": 1,
- "equipment": 1,
- "equipment.aero": 1,
- "er.in": 1,
- "ericsson": 1,
- "erimo.hokkaido.jp": 1,
- "erni": 1,
- "erotica.hu": 1,
- "erotika.hu": 1,
- "es": 1,
- "es-1.axarnet.cloud": 1,
- "es.ax": 1,
- "es.eu.org": 1,
- "es.gov.br": 1,
- "es.kr": 1,
- "es.leg.br": 1,
- "esan.hokkaido.jp": 1,
- "esashi.hokkaido.jp": 1,
- "esp.br": 1,
- "esq": 1,
- "est-a-la-maison.com": 1,
- "est-a-la-masion.com": 1,
- "est-le-patron.com": 1,
- "est-mon-blogueur.com": 1,
- "est.pr": 1,
- "estate": 1,
- "et": 1,
- "etajima.hiroshima.jp": 1,
- "etc.br": 1,
- "eti.br": 1,
- "etisalat": 1,
- "etne.no": 1,
- "etnedal.no": 1,
- "eu": 1,
- "eu-1.evennode.com": 1,
- "eu-2.evennode.com": 1,
- "eu-3.evennode.com": 1,
- "eu-4.evennode.com": 1,
- "eu-central-1.elasticbeanstalk.com": 1,
- "eu-west-1.elasticbeanstalk.com": 1,
- "eu-west-2.elasticbeanstalk.com": 1,
- "eu-west-3.elasticbeanstalk.com": 1,
- "eu.ax": 1,
- "eu.com": 1,
- "eu.encoway.cloud": 1,
- "eu.int": 1,
- "eu.meteorapp.com": 1,
- "eu.ngrok.io": 1,
- "eu.org": 1,
- "eu.platform.sh": 1,
- "eu.pythonanywhere.com": 1,
- "eun.eg": 1,
- "eurodir.ru": 1,
- "eurovision": 1,
- "eus": 1,
- "evenassi.no": 1,
- "evenes.no": 1,
- "events": 1,
- "evenášši.no": 1,
- "evje-og-hornnes.no": 1,
- "exchange": 1,
- "exchange.aero": 1,
- "exnet.su": 1,
- "expert": 1,
- "experts-comptables.fr": 1,
- "exposed": 1,
- "express": 1,
- "express.aero": 1,
- "extraspace": 1,
- "ezproxy.kuleuven.be": 1,
- "f.bg": 1,
- "f.se": 1,
- "fage": 1,
- "fail": 1,
- "fairwinds": 1,
- "faith": 1,
- "fakefur.jp": 1,
- "fam.pk": 1,
- "family": 1,
- "familyds.com": 1,
- "familyds.net": 1,
- "familyds.org": 1,
- "fan": 1,
- "fans": 1,
- "fantasyleague.cc": 1,
- "far.br": 1,
- "farm": 1,
- "farmers": 1,
- "farsund.no": 1,
- "fashion": 1,
- "fashionstore.jp": 1,
- "fast": 1,
- "fastly-edge.com": 1,
- "fastly-terrarium.com": 1,
- "fastlylb.net": 1,
- "faststacks.net": 1,
- "fastvps-server.com": 1,
- "fastvps.host": 1,
- "fastvps.site": 1,
- "fauske.no": 1,
- "fbx-os.fr": 1,
- "fbxos.fr": 1,
- "fc.it": 1,
- "fe.it": 1,
- "fed.us": 1,
- "federation.aero": 1,
- "fedex": 1,
- "fedje.no": 1,
- "fedorainfracloud.org": 1,
- "fedorapeople.org": 1,
- "feedback": 1,
- "feira.br": 1,
- "fem.jp": 1,
- "fentiger.mythic-beasts.com": 1,
- "fermo.it": 1,
- "ferrara.it": 1,
- "ferrari": 1,
- "ferrero": 1,
- "feste-ip.net": 1,
- "fet.no": 1,
- "fetsund.no": 1,
- "fg.it": 1,
- "fh-muenster.io": 1,
- "fh.se": 1,
- "fhs.no": 1,
- "fhsk.se": 1,
- "fhv.se": 1,
- "fi": 1,
- "fi.cloudplatform.fi": 1,
- "fi.cr": 1,
- "fi.eu.org": 1,
- "fi.it": 1,
- "fidelity": 1,
- "fido": 1,
- "fie.ee": 1,
- "filegear-au.me": 1,
- "filegear-de.me": 1,
- "filegear-gb.me": 1,
- "filegear-ie.me": 1,
- "filegear-jp.me": 1,
- "filegear-sg.me": 1,
- "filegear.me": 1,
- "film": 1,
- "film.hu": 1,
- "fin.ci": 1,
- "fin.ec": 1,
- "fin.tn": 1,
- "final": 1,
- "finance": 1,
- "financial": 1,
- "finnoy.no": 1,
- "finnøy.no": 1,
- "fire": 1,
- "firebaseapp.com": 1,
- "firenze.it": 1,
- "firestone": 1,
- "firewall-gateway.com": 1,
- "firewall-gateway.de": 1,
- "firewall-gateway.net": 1,
- "firewalledreplit.co": 1,
- "fireweb.app": 1,
- "firm.co": 1,
- "firm.dk": 1,
- "firm.ht": 1,
- "firm.in": 1,
- "firm.nf": 1,
- "firm.ng": 1,
- "firm.ro": 1,
- "firm.ve": 1,
- "firmdale": 1,
- "fish": 1,
- "fishing": 1,
- "fit": 1,
- "fitjar.no": 1,
- "fitness": 1,
- "fj": 1,
- "fj.cn": 1,
- "fjaler.no": 1,
- "fjell.no": 1,
- "fl.us": 1,
- "fla.no": 1,
- "flakstad.no": 1,
- "flap.id": 1,
- "flatanger.no": 1,
- "fldrv.com": 1,
- "flekkefjord.no": 1,
- "flesberg.no": 1,
- "flickr": 1,
- "flier.jp": 1,
- "flight.aero": 1,
- "flights": 1,
- "flir": 1,
- "flog.br": 1,
- "flop.jp": 1,
- "floppy.jp": 1,
- "flora.no": 1,
- "florence.it": 1,
- "floripa.br": 1,
- "florist": 1,
- "floro.no": 1,
- "florø.no": 1,
- "flowers": 1,
- "flt.cloud.muni.cz": 1,
- "fly": 1,
- "fly.dev": 1,
- "flynnhosting.net": 1,
- "flå.no": 1,
- "fm": 1,
- "fm.br": 1,
- "fm.it": 1,
- "fm.no": 1,
- "fnc.fr-par.scw.cloud": 1,
- "fnd.br": 1,
- "fnwk.site": 1,
- "fo": 1,
- "foggia.it": 1,
- "folionetwork.site": 1,
- "folkebibl.no": 1,
- "folldal.no": 1,
- "foo": 1,
- "food": 1,
- "fool.jp": 1,
- "football": 1,
- "for-better.biz": 1,
- "for-more.biz": 1,
- "for-our.info": 1,
- "for-some.biz": 1,
- "for-the.biz": 1,
- "ford": 1,
- "forde.no": 1,
- "forex": 1,
- "forgeblocks.com": 1,
- "forgot.her.name": 1,
- "forgot.his.name": 1,
- "forli-cesena.it": 1,
- "forlicesena.it": 1,
- "forlì-cesena.it": 1,
- "forlìcesena.it": 1,
- "forsale": 1,
- "forsand.no": 1,
- "fortal.br": 1,
- "forte.id": 1,
- "forum": 1,
- "forum.hu": 1,
- "forumz.info": 1,
- "fosnes.no": 1,
- "fot.br": 1,
- "foundation": 1,
- "fox": 1,
- "foz.br": 1,
- "fr": 1,
- "fr-1.paas.massivegrid.net": 1,
- "fr-par-1.baremetal.scw.cloud": 1,
- "fr-par-2.baremetal.scw.cloud": 1,
- "fr.eu.org": 1,
- "fr.it": 1,
- "fra1-de.cloudjiffy.net": 1,
- "framer.app": 1,
- "framer.media": 1,
- "framer.photos": 1,
- "framer.website": 1,
- "framer.wiki": 1,
- "framercanvas.com": 1,
- "frana.no": 1,
- "fredrikstad.no": 1,
- "free": 1,
- "free.hr": 1,
- "freebox-os.com": 1,
- "freebox-os.fr": 1,
- "freeboxos.com": 1,
- "freeboxos.fr": 1,
- "freeddns.org": 1,
- "freeddns.us": 1,
- "freedesktop.org": 1,
- "freemyip.com": 1,
- "freesite.host": 1,
- "freetls.fastly.net": 1,
- "frei.no": 1,
- "frenchkiss.jp": 1,
- "fresenius": 1,
- "friuli-v-giulia.it": 1,
- "friuli-ve-giulia.it": 1,
- "friuli-vegiulia.it": 1,
- "friuli-venezia-giulia.it": 1,
- "friuli-veneziagiulia.it": 1,
- "friuli-vgiulia.it": 1,
- "friuliv-giulia.it": 1,
- "friulive-giulia.it": 1,
- "friulivegiulia.it": 1,
- "friulivenezia-giulia.it": 1,
- "friuliveneziagiulia.it": 1,
- "friulivgiulia.it": 1,
- "frl": 1,
- "frogans": 1,
- "frogn.no": 1,
- "froland.no": 1,
- "from-ak.com": 1,
- "from-al.com": 1,
- "from-ar.com": 1,
- "from-az.net": 1,
- "from-ca.com": 1,
- "from-co.net": 1,
- "from-ct.com": 1,
- "from-dc.com": 1,
- "from-de.com": 1,
- "from-fl.com": 1,
- "from-ga.com": 1,
- "from-hi.com": 1,
- "from-ia.com": 1,
- "from-id.com": 1,
- "from-il.com": 1,
- "from-in.com": 1,
- "from-ks.com": 1,
- "from-ky.com": 1,
- "from-la.net": 1,
- "from-ma.com": 1,
- "from-md.com": 1,
- "from-me.org": 1,
- "from-mi.com": 1,
- "from-mn.com": 1,
- "from-mo.com": 1,
- "from-ms.com": 1,
- "from-mt.com": 1,
- "from-nc.com": 1,
- "from-nd.com": 1,
- "from-ne.com": 1,
- "from-nh.com": 1,
- "from-nj.com": 1,
- "from-nm.com": 1,
- "from-nv.com": 1,
- "from-ny.net": 1,
- "from-oh.com": 1,
- "from-ok.com": 1,
- "from-or.com": 1,
- "from-pa.com": 1,
- "from-pr.com": 1,
- "from-ri.com": 1,
- "from-sc.com": 1,
- "from-sd.com": 1,
- "from-tn.com": 1,
- "from-tx.com": 1,
- "from-ut.com": 1,
- "from-va.com": 1,
- "from-vt.com": 1,
- "from-wa.com": 1,
- "from-wi.com": 1,
- "from-wv.com": 1,
- "from-wy.com": 1,
- "from.hr": 1,
- "from.tv": 1,
- "frontdoor": 1,
- "frontier": 1,
- "frosinone.it": 1,
- "frosta.no": 1,
- "froya.no": 1,
- "fræna.no": 1,
- "frøya.no": 1,
- "fst.br": 1,
- "ftpaccess.cc": 1,
- "ftr": 1,
- "fuchu.hiroshima.jp": 1,
- "fuchu.tokyo.jp": 1,
- "fuchu.toyama.jp": 1,
- "fudai.iwate.jp": 1,
- "fuefuki.yamanashi.jp": 1,
- "fuel.aero": 1,
- "fuettertdasnetz.de": 1,
- "fuji.shizuoka.jp": 1,
- "fujieda.shizuoka.jp": 1,
- "fujiidera.osaka.jp": 1,
- "fujikawa.shizuoka.jp": 1,
- "fujikawa.yamanashi.jp": 1,
- "fujikawaguchiko.yamanashi.jp": 1,
- "fujimi.nagano.jp": 1,
- "fujimi.saitama.jp": 1,
- "fujimino.saitama.jp": 1,
- "fujinomiya.shizuoka.jp": 1,
- "fujioka.gunma.jp": 1,
- "fujisato.akita.jp": 1,
- "fujisawa.iwate.jp": 1,
- "fujisawa.kanagawa.jp": 1,
- "fujishiro.ibaraki.jp": 1,
- "fujitsu": 1,
- "fujiyoshida.yamanashi.jp": 1,
- "fukagawa.hokkaido.jp": 1,
- "fukaya.saitama.jp": 1,
- "fukuchi.fukuoka.jp": 1,
- "fukuchiyama.kyoto.jp": 1,
- "fukudomi.saga.jp": 1,
- "fukui.fukui.jp": 1,
- "fukui.jp": 1,
- "fukumitsu.toyama.jp": 1,
- "fukuoka.jp": 1,
- "fukuroi.shizuoka.jp": 1,
- "fukusaki.hyogo.jp": 1,
- "fukushima.fukushima.jp": 1,
- "fukushima.hokkaido.jp": 1,
- "fukushima.jp": 1,
- "fukuyama.hiroshima.jp": 1,
- "fun": 1,
- "funabashi.chiba.jp": 1,
- "funagata.yamagata.jp": 1,
- "funahashi.toyama.jp": 1,
- "functions.fnc.fr-par.scw.cloud": 1,
- "fund": 1,
- "fuoisku.no": 1,
- "fuossko.no": 1,
- "furano.hokkaido.jp": 1,
- "furniture": 1,
- "furubira.hokkaido.jp": 1,
- "furudono.fukushima.jp": 1,
- "furukawa.miyagi.jp": 1,
- "fusa.no": 1,
- "fuso.aichi.jp": 1,
- "fussa.tokyo.jp": 1,
- "futaba.fukushima.jp": 1,
- "futbol": 1,
- "futsu.nagasaki.jp": 1,
- "futtsu.chiba.jp": 1,
- "futurehosting.at": 1,
- "futuremailing.at": 1,
- "fvg.it": 1,
- "fyi": 1,
- "fylkesbibl.no": 1,
- "fyresdal.no": 1,
- "førde.no": 1,
- "g.bg": 1,
- "g.se": 1,
- "g.vbrplsbx.io": 1,
- "g12.br": 1,
- "ga": 1,
- "ga.us": 1,
- "gaivuotna.no": 1,
- "gal": 1,
- "gallery": 1,
- "gallo": 1,
- "gallup": 1,
- "galsa.no": 1,
- "gamagori.aichi.jp": 1,
- "game": 1,
- "game-host.org": 1,
- "game-server.cc": 1,
- "game.tw": 1,
- "games": 1,
- "games.hu": 1,
- "gamo.shiga.jp": 1,
- "gamvik.no": 1,
- "gangaviika.no": 1,
- "gangwon.kr": 1,
- "gap": 1,
- "garden": 1,
- "gaular.no": 1,
- "gausdal.no": 1,
- "gay": 1,
- "gb": 1,
- "gb.net": 1,
- "gbiz": 1,
- "gc.ca": 1,
- "gd": 1,
- "gd.cn": 1,
- "gda.pl": 1,
- "gdansk.pl": 1,
- "gdn": 1,
- "gdynia.pl": 1,
- "ge": 1,
- "ge.it": 1,
- "gea": 1,
- "geek.nz": 1,
- "geekgalaxy.com": 1,
- "gehirn.ne.jp": 1,
- "geisei.kochi.jp": 1,
- "gen.in": 1,
- "gen.mi.us": 1,
- "gen.ng": 1,
- "gen.nz": 1,
- "gen.tr": 1,
- "genkai.saga.jp": 1,
- "genoa.it": 1,
- "genova.it": 1,
- "gent": 1,
- "gentapps.com": 1,
- "genting": 1,
- "gentlentapis.com": 1,
- "geo.br": 1,
- "geometre-expert.fr": 1,
- "george": 1,
- "georgia.su": 1,
- "getmyip.com": 1,
- "gets-it.net": 1,
- "gf": 1,
- "gg": 1,
- "gg.ax": 1,
- "ggee": 1,
- "ggf.br": 1,
- "gh": 1,
- "ghost.io": 1,
- "gi": 1,
- "gialai.vn": 1,
- "giehtavuoatna.no": 1,
- "gift": 1,
- "gifts": 1,
- "gifu.gifu.jp": 1,
- "gifu.jp": 1,
- "giize.com": 1,
- "gildeskal.no": 1,
- "gildeskål.no": 1,
- "ginan.gifu.jp": 1,
- "ginowan.okinawa.jp": 1,
- "ginoza.okinawa.jp": 1,
- "girlfriend.jp": 1,
- "girly.jp": 1,
- "giske.no": 1,
- "git-pages.rit.edu": 1,
- "git-repos.de": 1,
- "gitapp.si": 1,
- "github.io": 1,
- "githubpreview.dev": 1,
- "githubusercontent.com": 1,
- "gitlab.io": 1,
- "gitpage.si": 1,
- "gives": 1,
- "giving": 1,
- "gjemnes.no": 1,
- "gjerdrum.no": 1,
- "gjerstad.no": 1,
- "gjesdal.no": 1,
- "gjovik.no": 1,
- "gjøvik.no": 1,
- "gl": 1,
- "glass": 1,
- "gle": 1,
- "gleeze.com": 1,
- "gliding.aero": 1,
- "glitch.me": 1,
- "gliwice.pl": 1,
- "global": 1,
- "global.prod.fastly.net": 1,
- "global.ssl.fastly.net": 1,
- "globo": 1,
- "glogow.pl": 1,
- "gloomy.jp": 1,
- "gloppen.no": 1,
- "glug.org.uk": 1,
- "gm": 1,
- "gmail": 1,
- "gmbh": 1,
- "gmina.pl": 1,
- "gmo": 1,
- "gmx": 1,
- "gn": 1,
- "gniezno.pl": 1,
- "go.ci": 1,
- "go.cr": 1,
- "go.dyndns.org": 1,
- "go.gov.br": 1,
- "go.id": 1,
- "go.it": 1,
- "go.jp": 1,
- "go.ke": 1,
- "go.kr": 1,
- "go.leg.br": 1,
- "go.pw": 1,
- "go.th": 1,
- "go.tj": 1,
- "go.tz": 1,
- "go.ug": 1,
- "gob.ar": 1,
- "gob.bo": 1,
- "gob.cl": 1,
- "gob.do": 1,
- "gob.ec": 1,
- "gob.es": 1,
- "gob.gt": 1,
- "gob.hn": 1,
- "gob.mx": 1,
- "gob.ni": 1,
- "gob.pa": 1,
- "gob.pe": 1,
- "gob.pk": 1,
- "gob.sv": 1,
- "gob.ve": 1,
- "gobo.wakayama.jp": 1,
- "godaddy": 1,
- "godo.gifu.jp": 1,
- "goiania.br": 1,
- "goip.de": 1,
- "gojome.akita.jp": 1,
- "gok.pk": 1,
- "gokase.miyazaki.jp": 1,
- "gol.no": 1,
- "gold": 1,
- "goldpoint": 1,
- "golf": 1,
- "golffan.us": 1,
- "gon.pk": 1,
- "gonna.jp": 1,
- "gonohe.aomori.jp": 1,
- "goo": 1,
- "goodyear": 1,
- "goog": 1,
- "google": 1,
- "googleapis.com": 1,
- "googlecode.com": 1,
- "gop": 1,
- "gop.pk": 1,
- "gorizia.it": 1,
- "gorlice.pl": 1,
- "gos.pk": 1,
- "gose.nara.jp": 1,
- "gosen.niigata.jp": 1,
- "goshiki.hyogo.jp": 1,
- "got": 1,
- "gotdns.ch": 1,
- "gotdns.com": 1,
- "gotdns.org": 1,
- "gotemba.shizuoka.jp": 1,
- "goto.nagasaki.jp": 1,
- "gotpantheon.com": 1,
- "gotsu.shimane.jp": 1,
- "goupile.fr": 1,
- "gouv.ci": 1,
- "gouv.fr": 1,
- "gouv.ht": 1,
- "gouv.km": 1,
- "gouv.ml": 1,
- "gouv.sn": 1,
- "gov": 1,
- "gov.ac": 1,
- "gov.ae": 1,
- "gov.af": 1,
- "gov.al": 1,
- "gov.ar": 1,
- "gov.as": 1,
- "gov.au": 1,
- "gov.az": 1,
- "gov.ba": 1,
- "gov.bb": 1,
- "gov.bf": 1,
- "gov.bh": 1,
- "gov.bm": 1,
- "gov.bn": 1,
- "gov.br": 1,
- "gov.bs": 1,
- "gov.bt": 1,
- "gov.by": 1,
- "gov.bz": 1,
- "gov.cd": 1,
- "gov.cl": 1,
- "gov.cm": 1,
- "gov.cn": 1,
- "gov.co": 1,
- "gov.cu": 1,
- "gov.cx": 1,
- "gov.cy": 1,
- "gov.dm": 1,
- "gov.do": 1,
- "gov.dz": 1,
- "gov.ec": 1,
- "gov.ee": 1,
- "gov.eg": 1,
- "gov.et": 1,
- "gov.fj": 1,
- "gov.gd": 1,
- "gov.ge": 1,
- "gov.gh": 1,
- "gov.gi": 1,
- "gov.gn": 1,
- "gov.gr": 1,
- "gov.gu": 1,
- "gov.gy": 1,
- "gov.hk": 1,
- "gov.ie": 1,
- "gov.il": 1,
- "gov.in": 1,
- "gov.iq": 1,
- "gov.ir": 1,
- "gov.is": 1,
- "gov.it": 1,
- "gov.jo": 1,
- "gov.kg": 1,
- "gov.ki": 1,
- "gov.km": 1,
- "gov.kn": 1,
- "gov.kp": 1,
- "gov.kw": 1,
- "gov.kz": 1,
- "gov.la": 1,
- "gov.lb": 1,
- "gov.lc": 1,
- "gov.lk": 1,
- "gov.lr": 1,
- "gov.ls": 1,
- "gov.lt": 1,
- "gov.lv": 1,
- "gov.ly": 1,
- "gov.ma": 1,
- "gov.me": 1,
- "gov.mg": 1,
- "gov.mk": 1,
- "gov.ml": 1,
- "gov.mn": 1,
- "gov.mo": 1,
- "gov.mr": 1,
- "gov.ms": 1,
- "gov.mu": 1,
- "gov.mv": 1,
- "gov.mw": 1,
- "gov.my": 1,
- "gov.mz": 1,
- "gov.nc.tr": 1,
- "gov.ng": 1,
- "gov.nl": 1,
- "gov.nr": 1,
- "gov.om": 1,
- "gov.ph": 1,
- "gov.pk": 1,
- "gov.pl": 1,
- "gov.pn": 1,
- "gov.pr": 1,
- "gov.ps": 1,
- "gov.pt": 1,
- "gov.py": 1,
- "gov.qa": 1,
- "gov.rs": 1,
- "gov.ru": 1,
- "gov.rw": 1,
- "gov.sa": 1,
- "gov.sb": 1,
- "gov.sc": 1,
- "gov.scot": 1,
- "gov.sd": 1,
- "gov.sg": 1,
- "gov.sh": 1,
- "gov.sl": 1,
- "gov.so": 1,
- "gov.ss": 1,
- "gov.sx": 1,
- "gov.sy": 1,
- "gov.tj": 1,
- "gov.tl": 1,
- "gov.tm": 1,
- "gov.tn": 1,
- "gov.to": 1,
- "gov.tr": 1,
- "gov.tt": 1,
- "gov.tw": 1,
- "gov.ua": 1,
- "gov.uk": 1,
- "gov.vc": 1,
- "gov.ve": 1,
- "gov.vn": 1,
- "gov.ws": 1,
- "gov.ye": 1,
- "gov.za": 1,
- "gov.zm": 1,
- "gov.zw": 1,
- "government.aero": 1,
- "govt.nz": 1,
- "gp": 1,
- "gq": 1,
- "gr": 1,
- "gr.com": 1,
- "gr.eu.org": 1,
- "gr.it": 1,
- "gr.jp": 1,
- "grainger": 1,
- "grajewo.pl": 1,
- "gran.no": 1,
- "grane.no": 1,
- "granvin.no": 1,
- "graphics": 1,
- "graphox.us": 1,
- "gratangen.no": 1,
- "gratis": 1,
- "greater.jp": 1,
- "green": 1,
- "greta.fr": 1,
- "grimstad.no": 1,
- "gripe": 1,
- "griw.gov.pl": 1,
- "grocery": 1,
- "groks-the.info": 1,
- "groks-this.info": 1,
- "grondar.za": 1,
- "grong.no": 1,
- "grosseto.it": 1,
- "groundhandling.aero": 1,
- "group": 1,
- "group.aero": 1,
- "grozny.ru": 1,
- "grozny.su": 1,
- "grp.lk": 1,
- "gru.br": 1,
- "grue.no": 1,
- "gs": 1,
- "gs.aa.no": 1,
- "gs.ah.no": 1,
- "gs.bu.no": 1,
- "gs.cn": 1,
- "gs.fm.no": 1,
- "gs.hl.no": 1,
- "gs.hm.no": 1,
- "gs.jan-mayen.no": 1,
- "gs.mr.no": 1,
- "gs.nl.no": 1,
- "gs.nt.no": 1,
- "gs.of.no": 1,
- "gs.ol.no": 1,
- "gs.oslo.no": 1,
- "gs.rl.no": 1,
- "gs.sf.no": 1,
- "gs.st.no": 1,
- "gs.svalbard.no": 1,
- "gs.tm.no": 1,
- "gs.tr.no": 1,
- "gs.va.no": 1,
- "gs.vf.no": 1,
- "gsj.bz": 1,
- "gsm.pl": 1,
- "gt": 1,
- "gu": 1,
- "gu.us": 1,
- "guam.gu": 1,
- "guardian": 1,
- "gub.uy": 1,
- "gucci": 1,
- "guge": 1,
- "guide": 1,
- "guitars": 1,
- "gujarat.in": 1,
- "gujo.gifu.jp": 1,
- "gulen.no": 1,
- "gunma.jp": 1,
- "guovdageaidnu.no": 1,
- "guru": 1,
- "gushikami.okinawa.jp": 1,
- "gv.ao": 1,
- "gv.at": 1,
- "gv.vc": 1,
- "gw": 1,
- "gwangju.kr": 1,
- "gx.cn": 1,
- "gy": 1,
- "gyeongbuk.kr": 1,
- "gyeonggi.kr": 1,
- "gyeongnam.kr": 1,
- "gyokuto.kumamoto.jp": 1,
- "gz.cn": 1,
- "gáivuotna.no": 1,
- "gálsá.no": 1,
- "gáŋgaviika.no": 1,
- "günstigbestellen.de": 1,
- "günstigliefern.de": 1,
- "h.bg": 1,
- "h.se": 1,
- "ha.cn": 1,
- "ha.no": 1,
- "habikino.osaka.jp": 1,
- "habmer.no": 1,
- "haboro.hokkaido.jp": 1,
- "hacca.jp": 1,
- "hachijo.tokyo.jp": 1,
- "hachinohe.aomori.jp": 1,
- "hachioji.tokyo.jp": 1,
- "hachirogata.akita.jp": 1,
- "hadano.kanagawa.jp": 1,
- "hadsel.no": 1,
- "haebaru.okinawa.jp": 1,
- "haga.tochigi.jp": 1,
- "hagebostad.no": 1,
- "hagi.yamaguchi.jp": 1,
- "hagiang.vn": 1,
- "haibara.shizuoka.jp": 1,
- "haiduong.vn": 1,
- "haiphong.vn": 1,
- "hair": 1,
- "hakata.fukuoka.jp": 1,
- "hakodate.hokkaido.jp": 1,
- "hakone.kanagawa.jp": 1,
- "hakuba.nagano.jp": 1,
- "hakui.ishikawa.jp": 1,
- "hakusan.ishikawa.jp": 1,
- "halden.no": 1,
- "half.host": 1,
- "halfmoon.jp": 1,
- "halsa.no": 1,
- "ham-radio-op.net": 1,
- "hamada.shimane.jp": 1,
- "hamamatsu.shizuoka.jp": 1,
- "hamar.no": 1,
- "hamaroy.no": 1,
- "hamatama.saga.jp": 1,
- "hamatonbetsu.hokkaido.jp": 1,
- "hamburg": 1,
- "hammarfeasta.no": 1,
- "hammerfest.no": 1,
- "hamura.tokyo.jp": 1,
- "hanam.vn": 1,
- "hanamaki.iwate.jp": 1,
- "hanamigawa.chiba.jp": 1,
- "hanawa.fukushima.jp": 1,
- "handa.aichi.jp": 1,
- "handcrafted.jp": 1,
- "hanggliding.aero": 1,
- "hangout": 1,
- "hannan.osaka.jp": 1,
- "hanno.saitama.jp": 1,
- "hanoi.vn": 1,
- "hanyu.saitama.jp": 1,
- "hapmir.no": 1,
- "happou.akita.jp": 1,
- "hara.nagano.jp": 1,
- "haram.no": 1,
- "hareid.no": 1,
- "harima.hyogo.jp": 1,
- "harstad.no": 1,
- "hasama.oita.jp": 1,
- "hasami.nagasaki.jp": 1,
- "hashbang.sh": 1,
- "hashikami.aomori.jp": 1,
- "hashima.gifu.jp": 1,
- "hashimoto.wakayama.jp": 1,
- "hasuda.saitama.jp": 1,
- "hasura-app.io": 1,
- "hasura.app": 1,
- "hasvik.no": 1,
- "hatinh.vn": 1,
- "hatogaya.saitama.jp": 1,
- "hatoyama.saitama.jp": 1,
- "hatsukaichi.hiroshima.jp": 1,
- "hattfjelldal.no": 1,
- "haugesund.no": 1,
- "haugiang.vn": 1,
- "haus": 1,
- "hayakawa.yamanashi.jp": 1,
- "hayashima.okayama.jp": 1,
- "hazu.aichi.jp": 1,
- "hb.cldmail.ru": 1,
- "hb.cn": 1,
- "hbo": 1,
- "hdfc": 1,
- "hdfcbank": 1,
- "he.cn": 1,
- "health": 1,
- "health-carereform.com": 1,
- "health.nz": 1,
- "health.vn": 1,
- "healthcare": 1,
- "heavy.jp": 1,
- "heguri.nara.jp": 1,
- "hekinan.aichi.jp": 1,
- "help": 1,
- "helsinki": 1,
- "hemne.no": 1,
- "hemnes.no": 1,
- "hemsedal.no": 1,
- "hepforge.org": 1,
- "her.jp": 1,
- "herad.no": 1,
- "here": 1,
- "here-for-more.info": 1,
- "hermes": 1,
- "herokuapp.com": 1,
- "herokussl.com": 1,
- "heroy.more-og-romsdal.no": 1,
- "heroy.nordland.no": 1,
- "herøy.møre-og-romsdal.no": 1,
- "herøy.nordland.no": 1,
- "heteml.net": 1,
- "hi.cn": 1,
- "hi.us": 1,
- "hicam.net": 1,
- "hichiso.gifu.jp": 1,
- "hida.gifu.jp": 1,
- "hidaka.hokkaido.jp": 1,
- "hidaka.kochi.jp": 1,
- "hidaka.saitama.jp": 1,
- "hidaka.wakayama.jp": 1,
- "higashi.fukuoka.jp": 1,
- "higashi.fukushima.jp": 1,
- "higashi.okinawa.jp": 1,
- "higashiagatsuma.gunma.jp": 1,
- "higashichichibu.saitama.jp": 1,
- "higashihiroshima.hiroshima.jp": 1,
- "higashiizu.shizuoka.jp": 1,
- "higashiizumo.shimane.jp": 1,
- "higashikagawa.kagawa.jp": 1,
- "higashikagura.hokkaido.jp": 1,
- "higashikawa.hokkaido.jp": 1,
- "higashikurume.tokyo.jp": 1,
- "higashimatsushima.miyagi.jp": 1,
- "higashimatsuyama.saitama.jp": 1,
- "higashimurayama.tokyo.jp": 1,
- "higashinaruse.akita.jp": 1,
- "higashine.yamagata.jp": 1,
- "higashiomi.shiga.jp": 1,
- "higashiosaka.osaka.jp": 1,
- "higashishirakawa.gifu.jp": 1,
- "higashisumiyoshi.osaka.jp": 1,
- "higashitsuno.kochi.jp": 1,
- "higashiura.aichi.jp": 1,
- "higashiyama.kyoto.jp": 1,
- "higashiyamato.tokyo.jp": 1,
- "higashiyodogawa.osaka.jp": 1,
- "higashiyoshino.nara.jp": 1,
- "hiho.jp": 1,
- "hiji.oita.jp": 1,
- "hikari.yamaguchi.jp": 1,
- "hikawa.shimane.jp": 1,
- "hikimi.shimane.jp": 1,
- "hikone.shiga.jp": 1,
- "himeji.hyogo.jp": 1,
- "himeshima.oita.jp": 1,
- "himi.toyama.jp": 1,
- "hino.tokyo.jp": 1,
- "hino.tottori.jp": 1,
- "hinode.tokyo.jp": 1,
- "hinohara.tokyo.jp": 1,
- "hioki.kagoshima.jp": 1,
- "hiphop": 1,
- "hippy.jp": 1,
- "hirado.nagasaki.jp": 1,
- "hiraizumi.iwate.jp": 1,
- "hirakata.osaka.jp": 1,
- "hiranai.aomori.jp": 1,
- "hirara.okinawa.jp": 1,
- "hirata.fukushima.jp": 1,
- "hiratsuka.kanagawa.jp": 1,
- "hiraya.nagano.jp": 1,
- "hirogawa.wakayama.jp": 1,
- "hirokawa.fukuoka.jp": 1,
- "hirono.fukushima.jp": 1,
- "hirono.iwate.jp": 1,
- "hiroo.hokkaido.jp": 1,
- "hirosaki.aomori.jp": 1,
- "hiroshima.jp": 1,
- "hisamitsu": 1,
- "hisayama.fukuoka.jp": 1,
- "hita.oita.jp": 1,
- "hitachi": 1,
- "hitachi.ibaraki.jp": 1,
- "hitachinaka.ibaraki.jp": 1,
- "hitachiomiya.ibaraki.jp": 1,
- "hitachiota.ibaraki.jp": 1,
- "hitra.no": 1,
- "hiv": 1,
- "hizen.saga.jp": 1,
- "hjartdal.no": 1,
- "hjelmeland.no": 1,
- "hk": 1,
- "hk.cn": 1,
- "hk.com": 1,
- "hk.org": 1,
- "hkt": 1,
- "hl.cn": 1,
- "hl.no": 1,
- "hlx.live": 1,
- "hlx.page": 1,
- "hlx3.page": 1,
- "hm": 1,
- "hm.no": 1,
- "hn": 1,
- "hn.cn": 1,
- "hoabinh.vn": 1,
- "hobby-site.com": 1,
- "hobby-site.org": 1,
- "hobol.no": 1,
- "hobøl.no": 1,
- "hockey": 1,
- "hof.no": 1,
- "hofu.yamaguchi.jp": 1,
- "hokkaido.jp": 1,
- "hokksund.no": 1,
- "hokuryu.hokkaido.jp": 1,
- "hokuto.hokkaido.jp": 1,
- "hokuto.yamanashi.jp": 1,
- "hol.no": 1,
- "holdings": 1,
- "hole.no": 1,
- "holiday": 1,
- "holmestrand.no": 1,
- "holtalen.no": 1,
- "holtålen.no": 1,
- "holy.jp": 1,
- "home-webserver.de": 1,
- "home.dyndns.org": 1,
- "homebuilt.aero": 1,
- "homedepot": 1,
- "homedns.org": 1,
- "homeftp.net": 1,
- "homeftp.org": 1,
- "homegoods": 1,
- "homeip.net": 1,
- "homelink.one": 1,
- "homelinux.com": 1,
- "homelinux.net": 1,
- "homelinux.org": 1,
- "homeoffice.gov.uk": 1,
- "homes": 1,
- "homesecuritymac.com": 1,
- "homesecuritypc.com": 1,
- "homesense": 1,
- "homesklep.pl": 1,
- "homeunix.com": 1,
- "homeunix.net": 1,
- "homeunix.org": 1,
- "honai.ehime.jp": 1,
- "honbetsu.hokkaido.jp": 1,
- "honda": 1,
- "honefoss.no": 1,
- "hongo.hiroshima.jp": 1,
- "honjo.akita.jp": 1,
- "honjo.saitama.jp": 1,
- "honjyo.akita.jp": 1,
- "hoplix.shop": 1,
- "hopto.me": 1,
- "hopto.org": 1,
- "hornindal.no": 1,
- "horokanai.hokkaido.jp": 1,
- "horonobe.hokkaido.jp": 1,
- "horse": 1,
- "horten.no": 1,
- "hosp.uk": 1,
- "hospital": 1,
- "host": 1,
- "hostedpi.com": 1,
- "hosting": 1,
- "hosting-cluster.nl": 1,
- "hostyhosting.io": 1,
- "hot": 1,
- "hotel.hu": 1,
- "hotel.lk": 1,
- "hotel.tz": 1,
- "hotels": 1,
- "hotelwithflight.com": 1,
- "hotmail": 1,
- "house": 1,
- "how": 1,
- "hoyanger.no": 1,
- "hoylandet.no": 1,
- "hr": 1,
- "hr.eu.org": 1,
- "hra.health": 1,
- "hs.kr": 1,
- "hs.run": 1,
- "hs.zone": 1,
- "hsbc": 1,
- "ht": 1,
- "httpbin.org": 1,
- "hu": 1,
- "hu.com": 1,
- "hu.eu.org": 1,
- "hu.net": 1,
- "hughes": 1,
- "huissier-justice.fr": 1,
- "hungry.jp": 1,
- "hungyen.vn": 1,
- "hurdal.no": 1,
- "hurum.no": 1,
- "hvaler.no": 1,
- "hyatt": 1,
- "hyllestad.no": 1,
- "hyogo.jp": 1,
- "hyuga.miyazaki.jp": 1,
- "hyundai": 1,
- "hzc.io": 1,
- "hábmer.no": 1,
- "hámmárfeasta.no": 1,
- "hápmir.no": 1,
- "häkkinen.fi": 1,
- "hå.no": 1,
- "hægebostad.no": 1,
- "hønefoss.no": 1,
- "høyanger.no": 1,
- "høylandet.no": 1,
- "i.bg": 1,
- "i.ng": 1,
- "i.ph": 1,
- "i.se": 1,
- "i234.me": 1,
- "ia.us": 1,
- "iamallama.com": 1,
- "ibara.okayama.jp": 1,
- "ibaraki.ibaraki.jp": 1,
- "ibaraki.jp": 1,
- "ibaraki.osaka.jp": 1,
- "ibestad.no": 1,
- "ibigawa.gifu.jp": 1,
- "ibm": 1,
- "ibxos.it": 1,
- "ic.gov.pl": 1,
- "icbc": 1,
- "ice": 1,
- "ichiba.tokushima.jp": 1,
- "ichihara.chiba.jp": 1,
- "ichikai.tochigi.jp": 1,
- "ichikawa.chiba.jp": 1,
- "ichikawa.hyogo.jp": 1,
- "ichikawamisato.yamanashi.jp": 1,
- "ichinohe.iwate.jp": 1,
- "ichinomiya.aichi.jp": 1,
- "ichinomiya.chiba.jp": 1,
- "ichinoseki.iwate.jp": 1,
- "icu": 1,
- "icurus.jp": 1,
- "id": 1,
- "id.au": 1,
- "id.firewalledreplit.co": 1,
- "id.forgerock.io": 1,
- "id.ir": 1,
- "id.lv": 1,
- "id.ly": 1,
- "id.repl.co": 1,
- "id.us": 1,
- "id.vn": 1,
- "ide.kyoto.jp": 1,
- "idf.il": 1,
- "idrett.no": 1,
- "idv.hk": 1,
- "idv.tw": 1,
- "ie": 1,
- "ie.eu.org": 1,
- "ie.ua": 1,
- "ieee": 1,
- "if.ua": 1,
- "ifm": 1,
- "iglesias-carbonia.it": 1,
- "iglesiascarbonia.it": 1,
- "iheya.okinawa.jp": 1,
- "iida.nagano.jp": 1,
- "iide.yamagata.jp": 1,
- "iijima.nagano.jp": 1,
- "iitate.fukushima.jp": 1,
- "iiyama.nagano.jp": 1,
- "iizuka.fukuoka.jp": 1,
- "iizuna.nagano.jp": 1,
- "ikano": 1,
- "ikaruga.nara.jp": 1,
- "ikata.ehime.jp": 1,
- "ikawa.akita.jp": 1,
- "ikeda.fukui.jp": 1,
- "ikeda.gifu.jp": 1,
- "ikeda.hokkaido.jp": 1,
- "ikeda.nagano.jp": 1,
- "ikeda.osaka.jp": 1,
- "iki.fi": 1,
- "iki.nagasaki.jp": 1,
- "ikoma.nara.jp": 1,
- "ikusaka.nagano.jp": 1,
- "il": 1,
- "il.eu.org": 1,
- "il.us": 1,
- "ilawa.pl": 1,
- "iliadboxos.it": 1,
- "ilovecollege.info": 1,
- "im": 1,
- "im.it": 1,
- "imabari.ehime.jp": 1,
- "imakane.hokkaido.jp": 1,
- "imamat": 1,
- "imari.saga.jp": 1,
- "imb.br": 1,
- "imdb": 1,
- "imizu.toyama.jp": 1,
- "immo": 1,
- "immobilien": 1,
- "imperia.it": 1,
- "impertrix.com": 1,
- "impertrixcdn.com": 1,
- "in": 1,
- "in-addr.arpa": 1,
- "in-berlin.de": 1,
- "in-brb.de": 1,
- "in-butter.de": 1,
- "in-dsl.de": 1,
- "in-dsl.net": 1,
- "in-dsl.org": 1,
- "in-the-band.net": 1,
- "in-vpn.de": 1,
- "in-vpn.net": 1,
- "in-vpn.org": 1,
- "in.eu.org": 1,
- "in.na": 1,
- "in.net": 1,
- "in.ngrok.io": 1,
- "in.ni": 1,
- "in.rs": 1,
- "in.th": 1,
- "in.ua": 1,
- "in.us": 1,
- "ina.ibaraki.jp": 1,
- "ina.nagano.jp": 1,
- "ina.saitama.jp": 1,
- "inabe.mie.jp": 1,
- "inagawa.hyogo.jp": 1,
- "inagi.tokyo.jp": 1,
- "inami.toyama.jp": 1,
- "inami.wakayama.jp": 1,
- "inashiki.ibaraki.jp": 1,
- "inatsuki.fukuoka.jp": 1,
- "inawashiro.fukushima.jp": 1,
- "inazawa.aichi.jp": 1,
- "inc": 1,
- "inc.hk": 1,
- "incheon.kr": 1,
- "ind.br": 1,
- "ind.gt": 1,
- "ind.in": 1,
- "ind.kw": 1,
- "ind.tn": 1,
- "independent-commission.uk": 1,
- "independent-inquest.uk": 1,
- "independent-inquiry.uk": 1,
- "independent-panel.uk": 1,
- "independent-review.uk": 1,
- "inderoy.no": 1,
- "inderøy.no": 1,
- "indie.porn": 1,
- "indigena.bo": 1,
- "industria.bo": 1,
- "industries": 1,
- "ine.kyoto.jp": 1,
- "inf.br": 1,
- "inf.cu": 1,
- "inf.mk": 1,
- "inf.ua": 1,
- "infiniti": 1,
- "info": 1,
- "info.at": 1,
- "info.au": 1,
- "info.az": 1,
- "info.bb": 1,
- "info.bj": 1,
- "info.bo": 1,
- "info.co": 1,
- "info.cx": 1,
- "info.ec": 1,
- "info.et": 1,
- "info.fj": 1,
- "info.gu": 1,
- "info.ht": 1,
- "info.hu": 1,
- "info.in": 1,
- "info.ke": 1,
- "info.ki": 1,
- "info.la": 1,
- "info.ls": 1,
- "info.mv": 1,
- "info.na": 1,
- "info.nf": 1,
- "info.ni": 1,
- "info.nr": 1,
- "info.pk": 1,
- "info.pl": 1,
- "info.pr": 1,
- "info.ro": 1,
- "info.sd": 1,
- "info.tn": 1,
- "info.tr": 1,
- "info.tt": 1,
- "info.tz": 1,
- "info.ve": 1,
- "info.vn": 1,
- "info.zm": 1,
- "ing": 1,
- "ing.pa": 1,
- "ingatlan.hu": 1,
- "ink": 1,
- "ino.kochi.jp": 1,
- "instance.datadetect.com": 1,
- "instances.spawn.cc": 1,
- "instantcloud.cn": 1,
- "institute": 1,
- "insurance": 1,
- "insurance.aero": 1,
- "insure": 1,
- "int": 1,
- "int.ar": 1,
- "int.az": 1,
- "int.bo": 1,
- "int.ci": 1,
- "int.co": 1,
- "int.cv": 1,
- "int.eu.org": 1,
- "int.in": 1,
- "int.is": 1,
- "int.la": 1,
- "int.lk": 1,
- "int.mv": 1,
- "int.mw": 1,
- "int.ni": 1,
- "int.pt": 1,
- "int.ru": 1,
- "int.tj": 1,
- "int.tt": 1,
- "int.ve": 1,
- "int.vn": 1,
- "international": 1,
- "internet-dns.de": 1,
- "internet.in": 1,
- "intl.tn": 1,
- "intuit": 1,
- "inuyama.aichi.jp": 1,
- "investments": 1,
- "inzai.chiba.jp": 1,
- "io": 1,
- "io.in": 1,
- "io.kg": 1,
- "io.vn": 1,
- "iobb.net": 1,
- "iopsys.se": 1,
- "ip.linodeusercontent.com": 1,
- "ip6.arpa": 1,
- "ipifony.net": 1,
- "ipiranga": 1,
- "iq": 1,
- "ir": 1,
- "iris.arpa": 1,
- "irish": 1,
- "iruma.saitama.jp": 1,
- "is": 1,
- "is-a-anarchist.com": 1,
- "is-a-blogger.com": 1,
- "is-a-bookkeeper.com": 1,
- "is-a-bruinsfan.org": 1,
- "is-a-bulls-fan.com": 1,
- "is-a-candidate.org": 1,
- "is-a-caterer.com": 1,
- "is-a-celticsfan.org": 1,
- "is-a-chef.com": 1,
- "is-a-chef.net": 1,
- "is-a-chef.org": 1,
- "is-a-conservative.com": 1,
- "is-a-cpa.com": 1,
- "is-a-cubicle-slave.com": 1,
- "is-a-democrat.com": 1,
- "is-a-designer.com": 1,
- "is-a-doctor.com": 1,
- "is-a-financialadvisor.com": 1,
- "is-a-geek.com": 1,
- "is-a-geek.net": 1,
- "is-a-geek.org": 1,
- "is-a-green.com": 1,
- "is-a-guru.com": 1,
- "is-a-hard-worker.com": 1,
- "is-a-hunter.com": 1,
- "is-a-knight.org": 1,
- "is-a-landscaper.com": 1,
- "is-a-lawyer.com": 1,
- "is-a-liberal.com": 1,
- "is-a-libertarian.com": 1,
- "is-a-linux-user.org": 1,
- "is-a-llama.com": 1,
- "is-a-musician.com": 1,
- "is-a-nascarfan.com": 1,
- "is-a-nurse.com": 1,
- "is-a-painter.com": 1,
- "is-a-patsfan.org": 1,
- "is-a-personaltrainer.com": 1,
- "is-a-photographer.com": 1,
- "is-a-player.com": 1,
- "is-a-republican.com": 1,
- "is-a-rockstar.com": 1,
- "is-a-socialist.com": 1,
- "is-a-soxfan.org": 1,
- "is-a-student.com": 1,
- "is-a-teacher.com": 1,
- "is-a-techie.com": 1,
- "is-a-therapist.com": 1,
- "is-an-accountant.com": 1,
- "is-an-actor.com": 1,
- "is-an-actress.com": 1,
- "is-an-anarchist.com": 1,
- "is-an-artist.com": 1,
- "is-an-engineer.com": 1,
- "is-an-entertainer.com": 1,
- "is-by.us": 1,
- "is-certified.com": 1,
- "is-found.org": 1,
- "is-gone.com": 1,
- "is-into-anime.com": 1,
- "is-into-cars.com": 1,
- "is-into-cartoons.com": 1,
- "is-into-games.com": 1,
- "is-leet.com": 1,
- "is-lost.org": 1,
- "is-not-certified.com": 1,
- "is-saved.org": 1,
- "is-slick.com": 1,
- "is-uberleet.com": 1,
- "is-very-bad.org": 1,
- "is-very-evil.org": 1,
- "is-very-good.org": 1,
- "is-very-nice.org": 1,
- "is-very-sweet.org": 1,
- "is-with-theband.com": 1,
- "is.eu.org": 1,
- "is.gov.pl": 1,
- "is.it": 1,
- "isa-geek.com": 1,
- "isa-geek.net": 1,
- "isa-geek.org": 1,
- "isa-hockeynut.com": 1,
- "isa.kagoshima.jp": 1,
- "isa.us": 1,
- "isahaya.nagasaki.jp": 1,
- "ise.mie.jp": 1,
- "isehara.kanagawa.jp": 1,
- "isen.kagoshima.jp": 1,
- "isernia.it": 1,
- "iserv.dev": 1,
- "iservschule.de": 1,
- "isesaki.gunma.jp": 1,
- "ishigaki.okinawa.jp": 1,
- "ishikari.hokkaido.jp": 1,
- "ishikawa.fukushima.jp": 1,
- "ishikawa.jp": 1,
- "ishikawa.okinawa.jp": 1,
- "ishinomaki.miyagi.jp": 1,
- "isla.pr": 1,
- "ismaili": 1,
- "isshiki.aichi.jp": 1,
- "issmarterthanyou.com": 1,
- "ist": 1,
- "istanbul": 1,
- "isteingeek.de": 1,
- "istmein.de": 1,
- "isumi.chiba.jp": 1,
- "it": 1,
- "it.ao": 1,
- "it.com": 1,
- "it.eu.org": 1,
- "it1.eur.aruba.jenv-aruba.cloud": 1,
- "it1.jenv-aruba.cloud": 1,
- "itabashi.tokyo.jp": 1,
- "itako.ibaraki.jp": 1,
- "itakura.gunma.jp": 1,
- "itami.hyogo.jp": 1,
- "itano.tokushima.jp": 1,
- "itau": 1,
- "itayanagi.aomori.jp": 1,
- "itcouldbewor.se": 1,
- "itigo.jp": 1,
- "ito.shizuoka.jp": 1,
- "itoigawa.niigata.jp": 1,
- "itoman.okinawa.jp": 1,
- "its.me": 1,
- "itv": 1,
- "ivano-frankivsk.ua": 1,
- "ivanovo.su": 1,
- "iveland.no": 1,
- "ivgu.no": 1,
- "ivory.ne.jp": 1,
- "iwade.wakayama.jp": 1,
- "iwafune.tochigi.jp": 1,
- "iwaizumi.iwate.jp": 1,
- "iwaki.fukushima.jp": 1,
- "iwakuni.yamaguchi.jp": 1,
- "iwakura.aichi.jp": 1,
- "iwama.ibaraki.jp": 1,
- "iwamizawa.hokkaido.jp": 1,
- "iwanai.hokkaido.jp": 1,
- "iwanuma.miyagi.jp": 1,
- "iwata.shizuoka.jp": 1,
- "iwate.iwate.jp": 1,
- "iwate.jp": 1,
- "iwatsuki.saitama.jp": 1,
- "iwi.nz": 1,
- "iyo.ehime.jp": 1,
- "iz.hr": 1,
- "izena.okinawa.jp": 1,
- "izu.shizuoka.jp": 1,
- "izumi.kagoshima.jp": 1,
- "izumi.osaka.jp": 1,
- "izumiotsu.osaka.jp": 1,
- "izumisano.osaka.jp": 1,
- "izumizaki.fukushima.jp": 1,
- "izumo.shimane.jp": 1,
- "izumozaki.niigata.jp": 1,
- "izunokuni.shizuoka.jp": 1,
- "j.bg": 1,
- "j.layershift.co.uk": 1,
- "j.scaleforce.com.cy": 1,
- "j.scaleforce.net": 1,
- "jab.br": 1,
- "jaguar": 1,
- "jambyl.su": 1,
- "jampa.br": 1,
- "jan-mayen.no": 1,
- "java": 1,
- "jaworzno.pl": 1,
- "jc.neen.it": 1,
- "jcb": 1,
- "jcloud-ver-jpc.ik-server.com": 1,
- "jcloud.ik-server.com": 1,
- "jcloud.kz": 1,
- "jdevcloud.com": 1,
- "jdf.br": 1,
- "je": 1,
- "jed.wafaicloud.com": 1,
- "jeep": 1,
- "jeez.jp": 1,
- "jeju.kr": 1,
- "jelastic.dogado.eu": 1,
- "jelastic.regruhosting.ru": 1,
- "jelastic.saveincloud.net": 1,
- "jelastic.team": 1,
- "jelastic.tsukaeru.net": 1,
- "jele.cloud": 1,
- "jele.club": 1,
- "jele.host": 1,
- "jele.io": 1,
- "jele.site": 1,
- "jelenia-gora.pl": 1,
- "jellybean.jp": 1,
- "jeonbuk.kr": 1,
- "jeonnam.kr": 1,
- "jessheim.no": 1,
- "jetzt": 1,
- "jevnaker.no": 1,
- "jewelry": 1,
- "jgora.pl": 1,
- "jinsekikogen.hiroshima.jp": 1,
- "jio": 1,
- "jl.cn": 1,
- "jll": 1,
- "jls-sto1.elastx.net": 1,
- "jls-sto2.elastx.net": 1,
- "jls-sto3.elastx.net": 1,
- "jmp": 1,
- "jnj": 1,
- "jo": 1,
- "joboji.iwate.jp": 1,
- "jobs": 1,
- "jobs.tt": 1,
- "joburg": 1,
- "joetsu.niigata.jp": 1,
- "jogasz.hu": 1,
- "johana.toyama.jp": 1,
- "joinville.br": 1,
- "jolster.no": 1,
- "jondal.no": 1,
- "jor.br": 1,
- "jorpeland.no": 1,
- "joso.ibaraki.jp": 1,
- "jot": 1,
- "jotelulu.cloud": 1,
- "journal.aero": 1,
- "journalist.aero": 1,
- "joy": 1,
- "joyo.kyoto.jp": 1,
- "jozi.biz": 1,
- "jp": 1,
- "jp.eu.org": 1,
- "jp.kg": 1,
- "jp.md": 1,
- "jp.net": 1,
- "jp.ngrok.io": 1,
- "jpmorgan": 1,
- "jpn.com": 1,
- "jpn.org": 1,
- "jprs": 1,
- "js.cn": 1,
- "js.org": 1,
- "js.wpenginepowered.com": 1,
- "ju.mp": 1,
- "juegos": 1,
- "juniper": 1,
- "jur.pro": 1,
- "jus.br": 1,
- "jx.cn": 1,
- "jølster.no": 1,
- "jørpeland.no": 1,
- "k.bg": 1,
- "k.se": 1,
- "k12.ak.us": 1,
- "k12.al.us": 1,
- "k12.ar.us": 1,
- "k12.as.us": 1,
- "k12.az.us": 1,
- "k12.ca.us": 1,
- "k12.co.us": 1,
- "k12.ct.us": 1,
- "k12.dc.us": 1,
- "k12.de.us": 1,
- "k12.ec": 1,
- "k12.fl.us": 1,
- "k12.ga.us": 1,
- "k12.gu.us": 1,
- "k12.ia.us": 1,
- "k12.id.us": 1,
- "k12.il": 1,
- "k12.il.us": 1,
- "k12.in.us": 1,
- "k12.ks.us": 1,
- "k12.ky.us": 1,
- "k12.la.us": 1,
- "k12.ma.us": 1,
- "k12.md.us": 1,
- "k12.me.us": 1,
- "k12.mi.us": 1,
- "k12.mn.us": 1,
- "k12.mo.us": 1,
- "k12.ms.us": 1,
- "k12.mt.us": 1,
- "k12.nc.us": 1,
- "k12.ne.us": 1,
- "k12.nh.us": 1,
- "k12.nj.us": 1,
- "k12.nm.us": 1,
- "k12.nv.us": 1,
- "k12.ny.us": 1,
- "k12.oh.us": 1,
- "k12.ok.us": 1,
- "k12.or.us": 1,
- "k12.pa.us": 1,
- "k12.pr.us": 1,
- "k12.sc.us": 1,
- "k12.tn.us": 1,
- "k12.tr": 1,
- "k12.tx.us": 1,
- "k12.ut.us": 1,
- "k12.va.us": 1,
- "k12.vi": 1,
- "k12.vi.us": 1,
- "k12.vt.us": 1,
- "k12.wa.us": 1,
- "k12.wi.us": 1,
- "k12.wy.us": 1,
- "k8s.fr-par.scw.cloud": 1,
- "k8s.nl-ams.scw.cloud": 1,
- "k8s.pl-waw.scw.cloud": 1,
- "k8s.scw.cloud": 1,
- "kaas.gg": 1,
- "kadena.okinawa.jp": 1,
- "kadogawa.miyazaki.jp": 1,
- "kadoma.osaka.jp": 1,
- "kafjord.no": 1,
- "kaga.ishikawa.jp": 1,
- "kagami.kochi.jp": 1,
- "kagamiishi.fukushima.jp": 1,
- "kagamino.okayama.jp": 1,
- "kagawa.jp": 1,
- "kagoshima.jp": 1,
- "kagoshima.kagoshima.jp": 1,
- "kaho.fukuoka.jp": 1,
- "kahoku.ishikawa.jp": 1,
- "kahoku.yamagata.jp": 1,
- "kai.yamanashi.jp": 1,
- "kainan.tokushima.jp": 1,
- "kainan.wakayama.jp": 1,
- "kaisei.kanagawa.jp": 1,
- "kaita.hiroshima.jp": 1,
- "kaizuka.osaka.jp": 1,
- "kakamigahara.gifu.jp": 1,
- "kakegawa.shizuoka.jp": 1,
- "kakinoki.shimane.jp": 1,
- "kakogawa.hyogo.jp": 1,
- "kakuda.miyagi.jp": 1,
- "kalisz.pl": 1,
- "kalmykia.ru": 1,
- "kalmykia.su": 1,
- "kaluga.su": 1,
- "kamagaya.chiba.jp": 1,
- "kamaishi.iwate.jp": 1,
- "kamakura.kanagawa.jp": 1,
- "kameoka.kyoto.jp": 1,
- "kameyama.mie.jp": 1,
- "kami.kochi.jp": 1,
- "kami.miyagi.jp": 1,
- "kamiamakusa.kumamoto.jp": 1,
- "kamifurano.hokkaido.jp": 1,
- "kamigori.hyogo.jp": 1,
- "kamiichi.toyama.jp": 1,
- "kamiizumi.saitama.jp": 1,
- "kamijima.ehime.jp": 1,
- "kamikawa.hokkaido.jp": 1,
- "kamikawa.hyogo.jp": 1,
- "kamikawa.saitama.jp": 1,
- "kamikitayama.nara.jp": 1,
- "kamikoani.akita.jp": 1,
- "kamimine.saga.jp": 1,
- "kaminokawa.tochigi.jp": 1,
- "kaminoyama.yamagata.jp": 1,
- "kamioka.akita.jp": 1,
- "kamisato.saitama.jp": 1,
- "kamishihoro.hokkaido.jp": 1,
- "kamisu.ibaraki.jp": 1,
- "kamisunagawa.hokkaido.jp": 1,
- "kamitonda.wakayama.jp": 1,
- "kamitsue.oita.jp": 1,
- "kamo.kyoto.jp": 1,
- "kamo.niigata.jp": 1,
- "kamoenai.hokkaido.jp": 1,
- "kamogawa.chiba.jp": 1,
- "kanagawa.jp": 1,
- "kanan.osaka.jp": 1,
- "kanazawa.ishikawa.jp": 1,
- "kanegasaki.iwate.jp": 1,
- "kaneyama.fukushima.jp": 1,
- "kaneyama.yamagata.jp": 1,
- "kani.gifu.jp": 1,
- "kanie.aichi.jp": 1,
- "kanmaki.nara.jp": 1,
- "kanna.gunma.jp": 1,
- "kannami.shizuoka.jp": 1,
- "kanonji.kagawa.jp": 1,
- "kanoya.kagoshima.jp": 1,
- "kanra.gunma.jp": 1,
- "kanuma.tochigi.jp": 1,
- "kanzaki.saga.jp": 1,
- "kapsi.fi": 1,
- "karacol.su": 1,
- "karaganda.su": 1,
- "karasjohka.no": 1,
- "karasjok.no": 1,
- "karasuyama.tochigi.jp": 1,
- "karatsu.saga.jp": 1,
- "karelia.su": 1,
- "kariwa.niigata.jp": 1,
- "kariya.aichi.jp": 1,
- "karlsoy.no": 1,
- "karmoy.no": 1,
- "karmøy.no": 1,
- "karpacz.pl": 1,
- "kartuzy.pl": 1,
- "karuizawa.nagano.jp": 1,
- "karumai.iwate.jp": 1,
- "kasahara.gifu.jp": 1,
- "kasai.hyogo.jp": 1,
- "kasama.ibaraki.jp": 1,
- "kasamatsu.gifu.jp": 1,
- "kasaoka.okayama.jp": 1,
- "kashiba.nara.jp": 1,
- "kashihara.nara.jp": 1,
- "kashima.ibaraki.jp": 1,
- "kashima.saga.jp": 1,
- "kashiwa.chiba.jp": 1,
- "kashiwara.osaka.jp": 1,
- "kashiwazaki.niigata.jp": 1,
- "kasserver.com": 1,
- "kasuga.fukuoka.jp": 1,
- "kasuga.hyogo.jp": 1,
- "kasugai.aichi.jp": 1,
- "kasukabe.saitama.jp": 1,
- "kasumigaura.ibaraki.jp": 1,
- "kasuya.fukuoka.jp": 1,
- "kaszuby.pl": 1,
- "katagami.akita.jp": 1,
- "katano.osaka.jp": 1,
- "katashina.gunma.jp": 1,
- "katori.chiba.jp": 1,
- "katowice.pl": 1,
- "katsuragi.nara.jp": 1,
- "katsuragi.wakayama.jp": 1,
- "katsushika.tokyo.jp": 1,
- "katsuura.chiba.jp": 1,
- "katsuyama.fukui.jp": 1,
- "kaufen": 1,
- "kautokeino.no": 1,
- "kawaba.gunma.jp": 1,
- "kawachinagano.osaka.jp": 1,
- "kawagoe.mie.jp": 1,
- "kawagoe.saitama.jp": 1,
- "kawaguchi.saitama.jp": 1,
- "kawahara.tottori.jp": 1,
- "kawai.iwate.jp": 1,
- "kawai.nara.jp": 1,
- "kawaiishop.jp": 1,
- "kawajima.saitama.jp": 1,
- "kawakami.nagano.jp": 1,
- "kawakami.nara.jp": 1,
- "kawakita.ishikawa.jp": 1,
- "kawamata.fukushima.jp": 1,
- "kawaminami.miyazaki.jp": 1,
- "kawanabe.kagoshima.jp": 1,
- "kawanehon.shizuoka.jp": 1,
- "kawanishi.hyogo.jp": 1,
- "kawanishi.nara.jp": 1,
- "kawanishi.yamagata.jp": 1,
- "kawara.fukuoka.jp": 1,
- "kawasaki.miyagi.jp": 1,
- "kawatana.nagasaki.jp": 1,
- "kawaue.gifu.jp": 1,
- "kawazu.shizuoka.jp": 1,
- "kayabe.hokkaido.jp": 1,
- "kazimierz-dolny.pl": 1,
- "kazo.saitama.jp": 1,
- "kazuno.akita.jp": 1,
- "kddi": 1,
- "ke": 1,
- "keisen.fukuoka.jp": 1,
- "keliweb.cloud": 1,
- "kembuchi.hokkaido.jp": 1,
- "kep.tr": 1,
- "kepno.pl": 1,
- "kerryhotels": 1,
- "kerrylogistics": 1,
- "kerryproperties": 1,
- "ketrzyn.pl": 1,
- "keymachine.de": 1,
- "kfh": 1,
- "kg": 1,
- "kg.kr": 1,
- "kh.ua": 1,
- "khakassia.su": 1,
- "khanhhoa.vn": 1,
- "kharkiv.ua": 1,
- "kharkov.ua": 1,
- "kherson.ua": 1,
- "khmelnitskiy.ua": 1,
- "khmelnytskyi.ua": 1,
- "khplay.nl": 1,
- "ki": 1,
- "kia": 1,
- "kibichuo.okayama.jp": 1,
- "kicks-ass.net": 1,
- "kicks-ass.org": 1,
- "kids": 1,
- "kids.us": 1,
- "kiengiang.vn": 1,
- "kiev.ua": 1,
- "kiho.mie.jp": 1,
- "kihoku.ehime.jp": 1,
- "kijo.miyazaki.jp": 1,
- "kikirara.jp": 1,
- "kikonai.hokkaido.jp": 1,
- "kikuchi.kumamoto.jp": 1,
- "kikugawa.shizuoka.jp": 1,
- "kilatiron.com": 1,
- "kill.jp": 1,
- "kilo.jp": 1,
- "kim": 1,
- "kimino.wakayama.jp": 1,
- "kimitsu.chiba.jp": 1,
- "kimobetsu.hokkaido.jp": 1,
- "kin.okinawa.jp": 1,
- "kinder": 1,
- "kindle": 1,
- "kinghost.net": 1,
- "kinko.kagoshima.jp": 1,
- "kinokawa.wakayama.jp": 1,
- "kira.aichi.jp": 1,
- "kirara.st": 1,
- "kirkenes.no": 1,
- "kirovograd.ua": 1,
- "kiryu.gunma.jp": 1,
- "kisarazu.chiba.jp": 1,
- "kishiwada.osaka.jp": 1,
- "kiso.nagano.jp": 1,
- "kisofukushima.nagano.jp": 1,
- "kisosaki.mie.jp": 1,
- "kita.kyoto.jp": 1,
- "kita.osaka.jp": 1,
- "kita.tokyo.jp": 1,
- "kitaaiki.nagano.jp": 1,
- "kitaakita.akita.jp": 1,
- "kitadaito.okinawa.jp": 1,
- "kitagata.gifu.jp": 1,
- "kitagata.saga.jp": 1,
- "kitagawa.kochi.jp": 1,
- "kitagawa.miyazaki.jp": 1,
- "kitahata.saga.jp": 1,
- "kitahiroshima.hokkaido.jp": 1,
- "kitakami.iwate.jp": 1,
- "kitakata.fukushima.jp": 1,
- "kitakata.miyazaki.jp": 1,
- "kitami.hokkaido.jp": 1,
- "kitamoto.saitama.jp": 1,
- "kitanakagusuku.okinawa.jp": 1,
- "kitashiobara.fukushima.jp": 1,
- "kitaura.miyazaki.jp": 1,
- "kitayama.wakayama.jp": 1,
- "kitchen": 1,
- "kiwa.mie.jp": 1,
- "kiwi": 1,
- "kiwi.nz": 1,
- "kiyama.saga.jp": 1,
- "kiyokawa.kanagawa.jp": 1,
- "kiyosato.hokkaido.jp": 1,
- "kiyose.tokyo.jp": 1,
- "kiyosu.aichi.jp": 1,
- "kizu.kyoto.jp": 1,
- "klabu.no": 1,
- "klepp.no": 1,
- "klodzko.pl": 1,
- "klæbu.no": 1,
- "km": 1,
- "km.ua": 1,
- "kmpsp.gov.pl": 1,
- "kn": 1,
- "knightpoint.systems": 1,
- "knowsitall.info": 1,
- "knx-server.net": 1,
- "kobayashi.miyazaki.jp": 1,
- "kobierzyce.pl": 1,
- "kochi.jp": 1,
- "kochi.kochi.jp": 1,
- "kodaira.tokyo.jp": 1,
- "koeln": 1,
- "kofu.yamanashi.jp": 1,
- "koga.fukuoka.jp": 1,
- "koga.ibaraki.jp": 1,
- "koganei.tokyo.jp": 1,
- "koge.tottori.jp": 1,
- "koka.shiga.jp": 1,
- "kokonoe.oita.jp": 1,
- "kokubunji.tokyo.jp": 1,
- "kolobrzeg.pl": 1,
- "komae.tokyo.jp": 1,
- "komagane.nagano.jp": 1,
- "komaki.aichi.jp": 1,
- "komatsu": 1,
- "komatsu.ishikawa.jp": 1,
- "komatsushima.tokushima.jp": 1,
- "komforb.se": 1,
- "kommunalforbund.se": 1,
- "kommune.no": 1,
- "komono.mie.jp": 1,
- "komoro.nagano.jp": 1,
- "komvux.se": 1,
- "konan.aichi.jp": 1,
- "konan.shiga.jp": 1,
- "kongsberg.no": 1,
- "kongsvinger.no": 1,
- "konin.pl": 1,
- "konskowola.pl": 1,
- "konsulat.gov.pl": 1,
- "kontum.vn": 1,
- "konyvelo.hu": 1,
- "koobin.events": 1,
- "koori.fukushima.jp": 1,
- "kopervik.no": 1,
- "koriyama.fukushima.jp": 1,
- "koryo.nara.jp": 1,
- "kosai.shizuoka.jp": 1,
- "kosaka.akita.jp": 1,
- "kosei.shiga.jp": 1,
- "kosher": 1,
- "koshigaya.saitama.jp": 1,
- "koshimizu.hokkaido.jp": 1,
- "koshu.yamanashi.jp": 1,
- "kosuge.yamanashi.jp": 1,
- "kota.aichi.jp": 1,
- "koto.shiga.jp": 1,
- "koto.tokyo.jp": 1,
- "kotohira.kagawa.jp": 1,
- "kotoura.tottori.jp": 1,
- "kouhoku.saga.jp": 1,
- "kounosu.saitama.jp": 1,
- "kouyama.kagoshima.jp": 1,
- "kouzushima.tokyo.jp": 1,
- "koya.wakayama.jp": 1,
- "koza.wakayama.jp": 1,
- "kozagawa.wakayama.jp": 1,
- "kozaki.chiba.jp": 1,
- "kozow.com": 1,
- "kp": 1,
- "kpmg": 1,
- "kpn": 1,
- "kppsp.gov.pl": 1,
- "kr": 1,
- "kr.com": 1,
- "kr.eu.org": 1,
- "kr.it": 1,
- "kr.ua": 1,
- "kraanghke.no": 1,
- "kragero.no": 1,
- "kragerø.no": 1,
- "krakow.pl": 1,
- "krasnik.pl": 1,
- "krasnodar.su": 1,
- "krd": 1,
- "kred": 1,
- "krellian.net": 1,
- "kristiansand.no": 1,
- "kristiansund.no": 1,
- "krodsherad.no": 1,
- "krokstadelva.no": 1,
- "kropyvnytskyi.ua": 1,
- "krym.ua": 1,
- "kråanghke.no": 1,
- "krødsherad.no": 1,
- "ks.ua": 1,
- "ks.us": 1,
- "ktistory.com": 1,
- "kuchinotsu.nagasaki.jp": 1,
- "kudamatsu.yamaguchi.jp": 1,
- "kudoyama.wakayama.jp": 1,
- "kui.hiroshima.jp": 1,
- "kuji.iwate.jp": 1,
- "kuju.oita.jp": 1,
- "kujukuri.chiba.jp": 1,
- "kuki.saitama.jp": 1,
- "kuleuven.cloud": 1,
- "kumagaya.saitama.jp": 1,
- "kumakogen.ehime.jp": 1,
- "kumamoto.jp": 1,
- "kumamoto.kumamoto.jp": 1,
- "kumano.hiroshima.jp": 1,
- "kumano.mie.jp": 1,
- "kumatori.osaka.jp": 1,
- "kumejima.okinawa.jp": 1,
- "kumenan.okayama.jp": 1,
- "kumiyama.kyoto.jp": 1,
- "kunigami.okinawa.jp": 1,
- "kunimi.fukushima.jp": 1,
- "kunisaki.oita.jp": 1,
- "kunitachi.tokyo.jp": 1,
- "kunitomi.miyazaki.jp": 1,
- "kunneppu.hokkaido.jp": 1,
- "kunohe.iwate.jp": 1,
- "kuokgroup": 1,
- "kurashiki.okayama.jp": 1,
- "kurate.fukuoka.jp": 1,
- "kure.hiroshima.jp": 1,
- "kurgan.su": 1,
- "kuriyama.hokkaido.jp": 1,
- "kurobe.toyama.jp": 1,
- "kurogi.fukuoka.jp": 1,
- "kuroishi.aomori.jp": 1,
- "kuroiso.tochigi.jp": 1,
- "kuromatsunai.hokkaido.jp": 1,
- "kuron.jp": 1,
- "kurotaki.nara.jp": 1,
- "kurume.fukuoka.jp": 1,
- "kusatsu.gunma.jp": 1,
- "kusatsu.shiga.jp": 1,
- "kushima.miyazaki.jp": 1,
- "kushimoto.wakayama.jp": 1,
- "kushiro.hokkaido.jp": 1,
- "kustanai.ru": 1,
- "kustanai.su": 1,
- "kusu.oita.jp": 1,
- "kutchan.hokkaido.jp": 1,
- "kutno.pl": 1,
- "kuwana.mie.jp": 1,
- "kuzumaki.iwate.jp": 1,
- "kv.ua": 1,
- "kvafjord.no": 1,
- "kvalsund.no": 1,
- "kvam.no": 1,
- "kvanangen.no": 1,
- "kvinesdal.no": 1,
- "kvinnherad.no": 1,
- "kviteseid.no": 1,
- "kvitsoy.no": 1,
- "kvitsøy.no": 1,
- "kvæfjord.no": 1,
- "kvænangen.no": 1,
- "kw": 1,
- "kwp.gov.pl": 1,
- "kwpsp.gov.pl": 1,
- "ky": 1,
- "ky.us": 1,
- "kyiv.ua": 1,
- "kyonan.chiba.jp": 1,
- "kyotamba.kyoto.jp": 1,
- "kyotanabe.kyoto.jp": 1,
- "kyotango.kyoto.jp": 1,
- "kyoto": 1,
- "kyoto.jp": 1,
- "kyowa.akita.jp": 1,
- "kyowa.hokkaido.jp": 1,
- "kyuragi.saga.jp": 1,
- "kz": 1,
- "kárášjohka.no": 1,
- "kåfjord.no": 1,
- "l-o-g-i-n.de": 1,
- "l.bg": 1,
- "l.se": 1,
- "la": 1,
- "la-spezia.it": 1,
- "la.us": 1,
- "laakesvuemie.no": 1,
- "lab.ms": 1,
- "lacaixa": 1,
- "ladesk.com": 1,
- "lahppi.no": 1,
- "laichau.vn": 1,
- "lakas.hu": 1,
- "lamborghini": 1,
- "lamdong.vn": 1,
- "lamer": 1,
- "lanbib.se": 1,
- "lancaster": 1,
- "land": 1,
- "land-4-sale.us": 1,
- "landrover": 1,
- "langevag.no": 1,
- "langevåg.no": 1,
- "langson.vn": 1,
- "lanxess": 1,
- "laocai.vn": 1,
- "lapy.pl": 1,
- "laquila.it": 1,
- "lardal.no": 1,
- "larvik.no": 1,
- "lasalle": 1,
- "laspezia.it": 1,
- "lat": 1,
- "latina.it": 1,
- "latino": 1,
- "latrobe": 1,
- "lavagis.no": 1,
- "lavangen.no": 1,
- "law": 1,
- "law.pro": 1,
- "law.za": 1,
- "lawyer": 1,
- "laz.it": 1,
- "lazio.it": 1,
- "lb": 1,
- "lc": 1,
- "lc.it": 1,
- "lcube-server.de": 1,
- "lds": 1,
- "le.it": 1,
- "leadpages.co": 1,
- "leangaviika.no": 1,
- "lease": 1,
- "leasing.aero": 1,
- "leaŋgaviika.no": 1,
- "lebesby.no": 1,
- "lebork.pl": 1,
- "lebtimnetz.de": 1,
- "lecce.it": 1,
- "lecco.it": 1,
- "leclerc": 1,
- "leczna.pl": 1,
- "lefrak": 1,
- "leg.br": 1,
- "legal": 1,
- "legnica.pl": 1,
- "lego": 1,
- "leikanger.no": 1,
- "leirfjord.no": 1,
- "leirvik.no": 1,
- "leitungsen.de": 1,
- "leka.no": 1,
- "leksvik.no": 1,
- "lel.br": 1,
- "lelux.site": 1,
- "lenug.su": 1,
- "lenvik.no": 1,
- "lerdal.no": 1,
- "lesja.no": 1,
- "levanger.no": 1,
- "lexus": 1,
- "lezajsk.pl": 1,
- "lg.jp": 1,
- "lg.ua": 1,
- "lgbt": 1,
- "li": 1,
- "li.it": 1,
- "lib.ak.us": 1,
- "lib.al.us": 1,
- "lib.ar.us": 1,
- "lib.as.us": 1,
- "lib.az.us": 1,
- "lib.ca.us": 1,
- "lib.co.us": 1,
- "lib.ct.us": 1,
- "lib.dc.us": 1,
- "lib.de.us": 1,
- "lib.ee": 1,
- "lib.fl.us": 1,
- "lib.ga.us": 1,
- "lib.gu.us": 1,
- "lib.hi.us": 1,
- "lib.ia.us": 1,
- "lib.id.us": 1,
- "lib.il.us": 1,
- "lib.in.us": 1,
- "lib.ks.us": 1,
- "lib.ky.us": 1,
- "lib.la.us": 1,
- "lib.ma.us": 1,
- "lib.md.us": 1,
- "lib.me.us": 1,
- "lib.mi.us": 1,
- "lib.mn.us": 1,
- "lib.mo.us": 1,
- "lib.ms.us": 1,
- "lib.mt.us": 1,
- "lib.nc.us": 1,
- "lib.nd.us": 1,
- "lib.ne.us": 1,
- "lib.nh.us": 1,
- "lib.nj.us": 1,
- "lib.nm.us": 1,
- "lib.nv.us": 1,
- "lib.ny.us": 1,
- "lib.oh.us": 1,
- "lib.ok.us": 1,
- "lib.or.us": 1,
- "lib.pa.us": 1,
- "lib.pr.us": 1,
- "lib.ri.us": 1,
- "lib.sc.us": 1,
- "lib.sd.us": 1,
- "lib.tn.us": 1,
- "lib.tx.us": 1,
- "lib.ut.us": 1,
- "lib.va.us": 1,
- "lib.vi.us": 1,
- "lib.vt.us": 1,
- "lib.wa.us": 1,
- "lib.wi.us": 1,
- "lib.wy.us": 1,
- "lidl": 1,
- "lier.no": 1,
- "lierne.no": 1,
- "life": 1,
- "lifeinsurance": 1,
- "lifestyle": 1,
- "lig.it": 1,
- "lighting": 1,
- "liguria.it": 1,
- "like": 1,
- "likes-pie.com": 1,
- "likescandy.com": 1,
- "lillehammer.no": 1,
- "lillesand.no": 1,
- "lilly": 1,
- "lima-city.at": 1,
- "lima-city.ch": 1,
- "lima-city.de": 1,
- "lima-city.rocks": 1,
- "lima.zone": 1,
- "limanowa.pl": 1,
- "limited": 1,
- "limo": 1,
- "lincoln": 1,
- "lindas.no": 1,
- "lindesnes.no": 1,
- "lindås.no": 1,
- "link": 1,
- "linkyard-cloud.ch": 1,
- "linkyard.cloud": 1,
- "lipsy": 1,
- "littlestar.jp": 1,
- "live": 1,
- "living": 1,
- "livorno.it": 1,
- "lk": 1,
- "lk3.ru": 1,
- "llc": 1,
- "llp": 1,
- "ln.cn": 1,
- "lo.it": 1,
- "loabat.no": 1,
- "loabát.no": 1,
- "loan": 1,
- "loans": 1,
- "localhost.daplie.me": 1,
- "localzone.xyz": 1,
- "locker": 1,
- "locus": 1,
- "lodi.it": 1,
- "lodingen.no": 1,
- "log.br": 1,
- "loginline.app": 1,
- "loginline.dev": 1,
- "loginline.io": 1,
- "loginline.services": 1,
- "loginline.site": 1,
- "loginto.me": 1,
- "logistics.aero": 1,
- "logoip.com": 1,
- "logoip.de": 1,
- "lohmus.me": 1,
- "loisirs.bj": 1,
- "lol": 1,
- "lolipop.io": 1,
- "lolipopmc.jp": 1,
- "lolitapunk.jp": 1,
- "lom.it": 1,
- "lom.no": 1,
- "lombardia.it": 1,
- "lombardy.it": 1,
- "lomo.jp": 1,
- "lomza.pl": 1,
- "lon-1.paas.massivegrid.net": 1,
- "lon-2.paas.massivegrid.net": 1,
- "lon.wafaicloud.com": 1,
- "london": 1,
- "london.cloudapps.digital": 1,
- "londrina.br": 1,
- "longan.vn": 1,
- "loppa.no": 1,
- "lorenskog.no": 1,
- "loseyourip.com": 1,
- "loten.no": 1,
- "lotte": 1,
- "lotto": 1,
- "love": 1,
- "lovepop.jp": 1,
- "lovesick.jp": 1,
- "lowicz.pl": 1,
- "lpages.co": 1,
- "lpl": 1,
- "lplfinancial": 1,
- "lpusercontent.com": 1,
- "lr": 1,
- "ls": 1,
- "lt": 1,
- "lt.eu.org": 1,
- "lt.it": 1,
- "lt.ua": 1,
- "ltd": 1,
- "ltd.co.im": 1,
- "ltd.cy": 1,
- "ltd.gi": 1,
- "ltd.hk": 1,
- "ltd.lk": 1,
- "ltd.ng": 1,
- "ltd.ua": 1,
- "ltd.uk": 1,
- "ltda": 1,
- "lu": 1,
- "lu.eu.org": 1,
- "lu.it": 1,
- "lubartow.pl": 1,
- "lubin.pl": 1,
- "lublin.pl": 1,
- "lucania.it": 1,
- "lucca.it": 1,
- "lug.org.uk": 1,
- "lugansk.ua": 1,
- "lugs.org.uk": 1,
- "lukow.pl": 1,
- "lund.no": 1,
- "lundbeck": 1,
- "lunner.no": 1,
- "luroy.no": 1,
- "lurøy.no": 1,
- "luster.no": 1,
- "lutsk.ua": 1,
- "luxe": 1,
- "luxury": 1,
- "lv": 1,
- "lv.eu.org": 1,
- "lv.ua": 1,
- "lviv.ua": 1,
- "ly": 1,
- "lyngdal.no": 1,
- "lyngen.no": 1,
- "lynx.mythic-beasts.com": 1,
- "láhppi.no": 1,
- "lærdal.no": 1,
- "lødingen.no": 1,
- "lørenskog.no": 1,
- "løten.no": 1,
- "m.bg": 1,
- "m.se": 1,
- "ma": 1,
- "ma.gov.br": 1,
- "ma.leg.br": 1,
- "ma.us": 1,
- "macapa.br": 1,
- "maceio.br": 1,
- "macerata.it": 1,
- "machida.tokyo.jp": 1,
- "madrid": 1,
- "maebashi.gunma.jp": 1,
- "magazine.aero": 1,
- "magnet.page": 1,
- "maibara.shiga.jp": 1,
- "maif": 1,
- "mail-box.ne.jp": 1,
- "mail.pl": 1,
- "main.jp": 1,
- "maintenance.aero": 1,
- "maison": 1,
- "maizuru.kyoto.jp": 1,
- "makeup": 1,
- "makinohara.shizuoka.jp": 1,
- "makurazaki.kagoshima.jp": 1,
- "malatvuopmi.no": 1,
- "malbork.pl": 1,
- "malopolska.pl": 1,
- "malselv.no": 1,
- "malvik.no": 1,
- "mamurogawa.yamagata.jp": 1,
- "man": 1,
- "management": 1,
- "manaus.br": 1,
- "mandal.no": 1,
- "mango": 1,
- "mangyshlak.su": 1,
- "maniwa.okayama.jp": 1,
- "manno.kagawa.jp": 1,
- "mantova.it": 1,
- "maori.nz": 1,
- "map": 1,
- "map.fastly.net": 1,
- "map.fastlylb.net": 1,
- "mar.it": 1,
- "marche.it": 1,
- "marine.ru": 1,
- "maringa.br": 1,
- "marker.no": 1,
- "market": 1,
- "marketing": 1,
- "markets": 1,
- "marnardal.no": 1,
- "marriott": 1,
- "marshalls": 1,
- "marugame.kagawa.jp": 1,
- "marumori.miyagi.jp": 1,
- "masaki.ehime.jp": 1,
- "masfjorden.no": 1,
- "mashike.hokkaido.jp": 1,
- "mashiki.kumamoto.jp": 1,
- "mashiko.tochigi.jp": 1,
- "masoy.no": 1,
- "massa-carrara.it": 1,
- "massacarrara.it": 1,
- "masuda.shimane.jp": 1,
- "mat.br": 1,
- "matera.it": 1,
- "matrix.jp": 1,
- "matsubara.osaka.jp": 1,
- "matsubushi.saitama.jp": 1,
- "matsuda.kanagawa.jp": 1,
- "matsudo.chiba.jp": 1,
- "matsue.shimane.jp": 1,
- "matsukawa.nagano.jp": 1,
- "matsumae.hokkaido.jp": 1,
- "matsumoto.kagoshima.jp": 1,
- "matsumoto.nagano.jp": 1,
- "matsuno.ehime.jp": 1,
- "matsusaka.mie.jp": 1,
- "matsushige.tokushima.jp": 1,
- "matsushima.miyagi.jp": 1,
- "matsuura.nagasaki.jp": 1,
- "matsuyama.ehime.jp": 1,
- "matsuzaki.shizuoka.jp": 1,
- "matta-varjjat.no": 1,
- "mattel": 1,
- "mayfirst.info": 1,
- "mayfirst.org": 1,
- "mazeplay.com": 1,
- "mazowsze.pl": 1,
- "mazury.pl": 1,
- "mb.ca": 1,
- "mb.it": 1,
- "mba": 1,
- "mc": 1,
- "mc.ax": 1,
- "mc.eu.org": 1,
- "mc.it": 1,
- "mcdir.me": 1,
- "mcdir.ru": 1,
- "mckinsey": 1,
- "mcpe.me": 1,
- "mcpre.ru": 1,
- "md": 1,
- "md.ci": 1,
- "md.us": 1,
- "me": 1,
- "me.eu.org": 1,
- "me.in": 1,
- "me.it": 1,
- "me.ke": 1,
- "me.so": 1,
- "me.ss": 1,
- "me.tc": 1,
- "me.tz": 1,
- "me.uk": 1,
- "me.us": 1,
- "me.vu": 1,
- "med": 1,
- "med.br": 1,
- "med.ec": 1,
- "med.ee": 1,
- "med.ht": 1,
- "med.ly": 1,
- "med.om": 1,
- "med.pa": 1,
- "med.pl": 1,
- "med.pro": 1,
- "med.sa": 1,
- "med.sd": 1,
- "medecin.fr": 1,
- "medecin.km": 1,
- "media": 1,
- "media.aero": 1,
- "media.hu": 1,
- "media.pl": 1,
- "mediatech.by": 1,
- "mediatech.dev": 1,
- "medicina.bo": 1,
- "medio-campidano.it": 1,
- "mediocampidano.it": 1,
- "meet": 1,
- "meguro.tokyo.jp": 1,
- "mein-iserv.de": 1,
- "mein-vigor.de": 1,
- "meinforum.net": 1,
- "meiwa.gunma.jp": 1,
- "meiwa.mie.jp": 1,
- "mel.cloudlets.com.au": 1,
- "meland.no": 1,
- "melbourne": 1,
- "meldal.no": 1,
- "melhus.no": 1,
- "meloy.no": 1,
- "meløy.no": 1,
- "members.linode.com": 1,
- "meme": 1,
- "memorial": 1,
- "memset.net": 1,
- "men": 1,
- "menu": 1,
- "meraker.no": 1,
- "merckmsd": 1,
- "merseine.nu": 1,
- "meråker.no": 1,
- "messerli.app": 1,
- "messina.it": 1,
- "messwithdns.com": 1,
- "meteorapp.com": 1,
- "mex.com": 1,
- "mg": 1,
- "mg.gov.br": 1,
- "mg.leg.br": 1,
- "mh": 1,
- "mi.it": 1,
- "mi.th": 1,
- "mi.us": 1,
- "miami": 1,
- "miasa.nagano.jp": 1,
- "miasta.pl": 1,
- "mibu.tochigi.jp": 1,
- "microlight.aero": 1,
- "microsoft": 1,
- "midori.chiba.jp": 1,
- "midori.gunma.jp": 1,
- "midsund.no": 1,
- "midtre-gauldal.no": 1,
- "mie.jp": 1,
- "mielec.pl": 1,
- "mielno.pl": 1,
- "mifune.kumamoto.jp": 1,
- "mihama.aichi.jp": 1,
- "mihama.chiba.jp": 1,
- "mihama.fukui.jp": 1,
- "mihama.mie.jp": 1,
- "mihama.wakayama.jp": 1,
- "mihara.hiroshima.jp": 1,
- "mihara.kochi.jp": 1,
- "miharu.fukushima.jp": 1,
- "miho.ibaraki.jp": 1,
- "mikasa.hokkaido.jp": 1,
- "mikawa.yamagata.jp": 1,
- "miki.hyogo.jp": 1,
- "mil": 1,
- "mil.ac": 1,
- "mil.ae": 1,
- "mil.al": 1,
- "mil.ar": 1,
- "mil.az": 1,
- "mil.ba": 1,
- "mil.bo": 1,
- "mil.br": 1,
- "mil.by": 1,
- "mil.cl": 1,
- "mil.cn": 1,
- "mil.co": 1,
- "mil.cy": 1,
- "mil.do": 1,
- "mil.ec": 1,
- "mil.eg": 1,
- "mil.fj": 1,
- "mil.ge": 1,
- "mil.gh": 1,
- "mil.gt": 1,
- "mil.hn": 1,
- "mil.id": 1,
- "mil.in": 1,
- "mil.iq": 1,
- "mil.jo": 1,
- "mil.kg": 1,
- "mil.km": 1,
- "mil.kr": 1,
- "mil.kz": 1,
- "mil.lv": 1,
- "mil.mg": 1,
- "mil.mv": 1,
- "mil.my": 1,
- "mil.mz": 1,
- "mil.ng": 1,
- "mil.ni": 1,
- "mil.no": 1,
- "mil.nz": 1,
- "mil.pe": 1,
- "mil.ph": 1,
- "mil.pl": 1,
- "mil.py": 1,
- "mil.qa": 1,
- "mil.ru": 1,
- "mil.rw": 1,
- "mil.sh": 1,
- "mil.st": 1,
- "mil.sy": 1,
- "mil.tj": 1,
- "mil.tm": 1,
- "mil.to": 1,
- "mil.tr": 1,
- "mil.tw": 1,
- "mil.tz": 1,
- "mil.uy": 1,
- "mil.vc": 1,
- "mil.ve": 1,
- "mil.ye": 1,
- "mil.za": 1,
- "mil.zm": 1,
- "mil.zw": 1,
- "milan.it": 1,
- "milano.it": 1,
- "mima.tokushima.jp": 1,
- "mimata.miyazaki.jp": 1,
- "mimoza.jp": 1,
- "minakami.gunma.jp": 1,
- "minamata.kumamoto.jp": 1,
- "minami-alps.yamanashi.jp": 1,
- "minami.fukuoka.jp": 1,
- "minami.kyoto.jp": 1,
- "minami.tokushima.jp": 1,
- "minamiaiki.nagano.jp": 1,
- "minamiashigara.kanagawa.jp": 1,
- "minamiawaji.hyogo.jp": 1,
- "minamiboso.chiba.jp": 1,
- "minamidaito.okinawa.jp": 1,
- "minamiechizen.fukui.jp": 1,
- "minamifurano.hokkaido.jp": 1,
- "minamiise.mie.jp": 1,
- "minamiizu.shizuoka.jp": 1,
- "minamimaki.nagano.jp": 1,
- "minamiminowa.nagano.jp": 1,
- "minamioguni.kumamoto.jp": 1,
- "minamisanriku.miyagi.jp": 1,
- "minamitane.kagoshima.jp": 1,
- "minamiuonuma.niigata.jp": 1,
- "minamiyamashiro.kyoto.jp": 1,
- "minano.saitama.jp": 1,
- "minato.osaka.jp": 1,
- "minato.tokyo.jp": 1,
- "mincom.tn": 1,
- "mine.nu": 1,
- "mini": 1,
- "miniserver.com": 1,
- "minisite.ms": 1,
- "mino.gifu.jp": 1,
- "minobu.yamanashi.jp": 1,
- "minoh.osaka.jp": 1,
- "minokamo.gifu.jp": 1,
- "minowa.nagano.jp": 1,
- "mint": 1,
- "mintere.site": 1,
- "mints.ne.jp": 1,
- "mircloud.host": 1,
- "mircloud.ru": 1,
- "mircloud.us": 1,
- "misaki.okayama.jp": 1,
- "misaki.osaka.jp": 1,
- "misasa.tottori.jp": 1,
- "misato.akita.jp": 1,
- "misato.miyagi.jp": 1,
- "misato.saitama.jp": 1,
- "misato.shimane.jp": 1,
- "misato.wakayama.jp": 1,
- "misawa.aomori.jp": 1,
- "misconfused.org": 1,
- "mishima.fukushima.jp": 1,
- "mishima.shizuoka.jp": 1,
- "misugi.mie.jp": 1,
- "mit": 1,
- "mitaka.tokyo.jp": 1,
- "mitake.gifu.jp": 1,
- "mitane.akita.jp": 1,
- "mito.ibaraki.jp": 1,
- "mitou.yamaguchi.jp": 1,
- "mitoyo.kagawa.jp": 1,
- "mitsubishi": 1,
- "mitsue.nara.jp": 1,
- "mitsuke.niigata.jp": 1,
- "miura.kanagawa.jp": 1,
- "miyada.nagano.jp": 1,
- "miyagi.jp": 1,
- "miyake.nara.jp": 1,
- "miyako.fukuoka.jp": 1,
- "miyako.iwate.jp": 1,
- "miyakonojo.miyazaki.jp": 1,
- "miyama.fukuoka.jp": 1,
- "miyama.mie.jp": 1,
- "miyashiro.saitama.jp": 1,
- "miyawaka.fukuoka.jp": 1,
- "miyazaki.jp": 1,
- "miyazaki.miyazaki.jp": 1,
- "miyazu.kyoto.jp": 1,
- "miyoshi.aichi.jp": 1,
- "miyoshi.hiroshima.jp": 1,
- "miyoshi.saitama.jp": 1,
- "miyoshi.tokushima.jp": 1,
- "miyota.nagano.jp": 1,
- "mizuho.tokyo.jp": 1,
- "mizumaki.fukuoka.jp": 1,
- "mizunami.gifu.jp": 1,
- "mizusawa.iwate.jp": 1,
- "mjondalen.no": 1,
- "mjøndalen.no": 1,
- "mk": 1,
- "mk.eu.org": 1,
- "mk.ua": 1,
- "ml": 1,
- "mlb": 1,
- "mlbfan.org": 1,
- "mls": 1,
- "mma": 1,
- "mmafan.biz": 1,
- "mn": 1,
- "mn.it": 1,
- "mn.us": 1,
- "mo": 1,
- "mo-i-rana.no": 1,
- "mo-siemens.io": 1,
- "mo.cn": 1,
- "mo.it": 1,
- "mo.us": 1,
- "moareke.no": 1,
- "mobara.chiba.jp": 1,
- "mobi": 1,
- "mobi.gp": 1,
- "mobi.ke": 1,
- "mobi.na": 1,
- "mobi.ng": 1,
- "mobi.tt": 1,
- "mobi.tz": 1,
- "mobile": 1,
- "mochizuki.nagano.jp": 1,
- "mock.pstmn.io": 1,
- "mod.gi": 1,
- "moda": 1,
- "modalen.no": 1,
- "modelling.aero": 1,
- "modena.it": 1,
- "mods.jp": 1,
- "modum.no": 1,
- "moe": 1,
- "moi": 1,
- "moka.tochigi.jp": 1,
- "mokuren.ne.jp": 1,
- "mol.it": 1,
- "molde.no": 1,
- "molise.it": 1,
- "mom": 1,
- "mombetsu.hokkaido.jp": 1,
- "monash": 1,
- "mond.jp": 1,
- "money": 1,
- "money.bj": 1,
- "mongolian.jp": 1,
- "monster": 1,
- "monza-brianza.it": 1,
- "monza-e-della-brianza.it": 1,
- "monza.it": 1,
- "monzabrianza.it": 1,
- "monzaebrianza.it": 1,
- "monzaedellabrianza.it": 1,
- "moo.jp": 1,
- "moonscale.net": 1,
- "mordovia.ru": 1,
- "mordovia.su": 1,
- "morena.br": 1,
- "moriguchi.osaka.jp": 1,
- "morimachi.shizuoka.jp": 1,
- "morioka.iwate.jp": 1,
- "moriya.ibaraki.jp": 1,
- "moriyama.shiga.jp": 1,
- "moriyoshi.akita.jp": 1,
- "mormon": 1,
- "morotsuka.miyazaki.jp": 1,
- "moroyama.saitama.jp": 1,
- "mortgage": 1,
- "moscow": 1,
- "moseushi.hokkaido.jp": 1,
- "mosjoen.no": 1,
- "mosjøen.no": 1,
- "moskenes.no": 1,
- "moss.no": 1,
- "mosvik.no": 1,
- "motegi.tochigi.jp": 1,
- "moto": 1,
- "motobu.okinawa.jp": 1,
- "motorcycles": 1,
- "motosu.gifu.jp": 1,
- "motoyama.kochi.jp": 1,
- "mov": 1,
- "movie": 1,
- "movimiento.bo": 1,
- "mozilla-iot.org": 1,
- "moåreke.no": 1,
- "mp": 1,
- "mp.br": 1,
- "mq": 1,
- "mr": 1,
- "mr.no": 1,
- "mragowo.pl": 1,
- "ms": 1,
- "ms.gov.br": 1,
- "ms.it": 1,
- "ms.kr": 1,
- "ms.leg.br": 1,
- "ms.us": 1,
- "msd": 1,
- "msk.ru": 1,
- "msk.su": 1,
- "mt": 1,
- "mt.eu.org": 1,
- "mt.gov.br": 1,
- "mt.it": 1,
- "mt.leg.br": 1,
- "mt.us": 1,
- "mtn": 1,
- "mtr": 1,
- "mu": 1,
- "mugi.tokushima.jp": 1,
- "muika.niigata.jp": 1,
- "mukawa.hokkaido.jp": 1,
- "muko.kyoto.jp": 1,
- "munakata.fukuoka.jp": 1,
- "muni.il": 1,
- "muosat.no": 1,
- "muosát.no": 1,
- "mup.gov.pl": 1,
- "murakami.niigata.jp": 1,
- "murata.miyagi.jp": 1,
- "murayama.yamagata.jp": 1,
- "murmansk.su": 1,
- "muroran.hokkaido.jp": 1,
- "muroto.kochi.jp": 1,
- "mus.br": 1,
- "mus.mi.us": 1,
- "musashimurayama.tokyo.jp": 1,
- "musashino.tokyo.jp": 1,
- "museum": 1,
- "museum.mv": 1,
- "museum.mw": 1,
- "museum.no": 1,
- "museum.om": 1,
- "museum.tt": 1,
- "music": 1,
- "musica.ar": 1,
- "musica.bo": 1,
- "musician.io": 1,
- "mutsu.aomori.jp": 1,
- "mutsuzawa.chiba.jp": 1,
- "mutual.ar": 1,
- "mv": 1,
- "mw": 1,
- "mw.gov.pl": 1,
- "mx": 1,
- "mx.na": 1,
- "my": 1,
- "my-firewall.org": 1,
- "my-gateway.de": 1,
- "my-router.de": 1,
- "my-vigor.de": 1,
- "my-wan.de": 1,
- "my.eu.org": 1,
- "my.id": 1,
- "myactivedirectory.com": 1,
- "myamaze.net": 1,
- "myasustor.com": 1,
- "mycd.eu": 1,
- "mycloud.by": 1,
- "mydatto.com": 1,
- "mydatto.net": 1,
- "myddns.rocks": 1,
- "mydissent.net": 1,
- "mydobiss.com": 1,
- "mydrobo.com": 1,
- "myds.me": 1,
- "myeffect.net": 1,
- "myfast.host": 1,
- "myfast.space": 1,
- "myfirewall.org": 1,
- "myforum.community": 1,
- "myfritz.net": 1,
- "myftp.biz": 1,
- "myftp.org": 1,
- "myhome-server.de": 1,
- "myiphost.com": 1,
- "myjino.ru": 1,
- "mykolaiv.ua": 1,
- "mymailer.com.tw": 1,
- "mymediapc.net": 1,
- "myoko.niigata.jp": 1,
- "mypep.link": 1,
- "mypets.ws": 1,
- "myphotos.cc": 1,
- "mypi.co": 1,
- "mypsx.net": 1,
- "myqnapcloud.com": 1,
- "mysecuritycamera.com": 1,
- "mysecuritycamera.net": 1,
- "mysecuritycamera.org": 1,
- "myshopblocks.com": 1,
- "myshopify.com": 1,
- "myspreadshop.at": 1,
- "myspreadshop.be": 1,
- "myspreadshop.ca": 1,
- "myspreadshop.ch": 1,
- "myspreadshop.co.uk": 1,
- "myspreadshop.com": 1,
- "myspreadshop.com.au": 1,
- "myspreadshop.de": 1,
- "myspreadshop.dk": 1,
- "myspreadshop.es": 1,
- "myspreadshop.fi": 1,
- "myspreadshop.fr": 1,
- "myspreadshop.ie": 1,
- "myspreadshop.it": 1,
- "myspreadshop.net": 1,
- "myspreadshop.nl": 1,
- "myspreadshop.no": 1,
- "myspreadshop.pl": 1,
- "myspreadshop.se": 1,
- "mytabit.co.il": 1,
- "mytabit.com": 1,
- "mytis.ru": 1,
- "mytuleap.com": 1,
- "myvnc.com": 1,
- "mywire.org": 1,
- "mz": 1,
- "málatvuopmi.no": 1,
- "mátta-várjjat.no": 1,
- "målselv.no": 1,
- "måsøy.no": 1,
- "māori.nz": 1,
- "n.bg": 1,
- "n.se": 1,
- "n4t.co": 1,
- "na": 1,
- "na.it": 1,
- "na4u.ru": 1,
- "naamesjevuemie.no": 1,
- "nab": 1,
- "nabari.mie.jp": 1,
- "nachikatsuura.wakayama.jp": 1,
- "nagahama.shiga.jp": 1,
- "nagai.yamagata.jp": 1,
- "nagano.jp": 1,
- "nagano.nagano.jp": 1,
- "naganohara.gunma.jp": 1,
- "nagaoka.niigata.jp": 1,
- "nagaokakyo.kyoto.jp": 1,
- "nagara.chiba.jp": 1,
- "nagareyama.chiba.jp": 1,
- "nagasaki.jp": 1,
- "nagasaki.nagasaki.jp": 1,
- "nagasu.kumamoto.jp": 1,
- "nagato.yamaguchi.jp": 1,
- "nagatoro.saitama.jp": 1,
- "nagawa.nagano.jp": 1,
- "nagi.okayama.jp": 1,
- "nagiso.nagano.jp": 1,
- "nago.okinawa.jp": 1,
- "nagoya": 1,
- "naha.okinawa.jp": 1,
- "nahari.kochi.jp": 1,
- "naie.hokkaido.jp": 1,
- "naka.hiroshima.jp": 1,
- "naka.ibaraki.jp": 1,
- "nakadomari.aomori.jp": 1,
- "nakagawa.fukuoka.jp": 1,
- "nakagawa.hokkaido.jp": 1,
- "nakagawa.nagano.jp": 1,
- "nakagawa.tokushima.jp": 1,
- "nakagusuku.okinawa.jp": 1,
- "nakagyo.kyoto.jp": 1,
- "nakai.kanagawa.jp": 1,
- "nakama.fukuoka.jp": 1,
- "nakamichi.yamanashi.jp": 1,
- "nakamura.kochi.jp": 1,
- "nakaniikawa.toyama.jp": 1,
- "nakano.nagano.jp": 1,
- "nakano.tokyo.jp": 1,
- "nakanojo.gunma.jp": 1,
- "nakanoto.ishikawa.jp": 1,
- "nakasatsunai.hokkaido.jp": 1,
- "nakatane.kagoshima.jp": 1,
- "nakatombetsu.hokkaido.jp": 1,
- "nakatsugawa.gifu.jp": 1,
- "nakayama.yamagata.jp": 1,
- "nakijin.okinawa.jp": 1,
- "naklo.pl": 1,
- "nalchik.ru": 1,
- "nalchik.su": 1,
- "namaste.jp": 1,
- "namdalseid.no": 1,
- "namdinh.vn": 1,
- "name": 1,
- "name.az": 1,
- "name.eg": 1,
- "name.et": 1,
- "name.fj": 1,
- "name.hr": 1,
- "name.jo": 1,
- "name.mk": 1,
- "name.mv": 1,
- "name.my": 1,
- "name.na": 1,
- "name.ng": 1,
- "name.pm": 1,
- "name.pr": 1,
- "name.qa": 1,
- "name.tj": 1,
- "name.tr": 1,
- "name.tt": 1,
- "name.vn": 1,
- "namegata.ibaraki.jp": 1,
- "namegawa.saitama.jp": 1,
- "namerikawa.toyama.jp": 1,
- "namie.fukushima.jp": 1,
- "namikata.ehime.jp": 1,
- "namsos.no": 1,
- "namsskogan.no": 1,
- "nanae.hokkaido.jp": 1,
- "nanao.ishikawa.jp": 1,
- "nanbu.tottori.jp": 1,
- "nanbu.yamanashi.jp": 1,
- "nango.fukushima.jp": 1,
- "nanjo.okinawa.jp": 1,
- "nankoku.kochi.jp": 1,
- "nanmoku.gunma.jp": 1,
- "nannestad.no": 1,
- "nanporo.hokkaido.jp": 1,
- "nantan.kyoto.jp": 1,
- "nanto.toyama.jp": 1,
- "nanyo.yamagata.jp": 1,
- "naoshima.kagawa.jp": 1,
- "naples.it": 1,
- "napoli.it": 1,
- "nara.jp": 1,
- "nara.nara.jp": 1,
- "narashino.chiba.jp": 1,
- "narita.chiba.jp": 1,
- "naroy.no": 1,
- "narusawa.yamanashi.jp": 1,
- "naruto.tokushima.jp": 1,
- "narviika.no": 1,
- "narvik.no": 1,
- "nasu.tochigi.jp": 1,
- "nasushiobara.tochigi.jp": 1,
- "nat.tn": 1,
- "natal.br": 1,
- "natori.miyagi.jp": 1,
- "natura": 1,
- "natural.bo": 1,
- "naturbruksgymn.se": 1,
- "naustdal.no": 1,
- "navigation.aero": 1,
- "navoi.su": 1,
- "navuotna.no": 1,
- "navy": 1,
- "nayoro.hokkaido.jp": 1,
- "nb.ca": 1,
- "nba": 1,
- "nc": 1,
- "nc.tr": 1,
- "nc.us": 1,
- "nd.us": 1,
- "ne": 1,
- "ne.jp": 1,
- "ne.ke": 1,
- "ne.kr": 1,
- "ne.pw": 1,
- "ne.tz": 1,
- "ne.ug": 1,
- "ne.us": 1,
- "neat-url.com": 1,
- "nec": 1,
- "nedre-eiker.no": 1,
- "neko.am": 1,
- "nemuro.hokkaido.jp": 1,
- "nerdpol.ovh": 1,
- "nerima.tokyo.jp": 1,
- "nes.akershus.no": 1,
- "nes.buskerud.no": 1,
- "nesna.no": 1,
- "nesodden.no": 1,
- "nesoddtangen.no": 1,
- "nesseby.no": 1,
- "nesset.no": 1,
- "net": 1,
- "net-freaks.com": 1,
- "net.ac": 1,
- "net.ae": 1,
- "net.af": 1,
- "net.ag": 1,
- "net.ai": 1,
- "net.al": 1,
- "net.am": 1,
- "net.ar": 1,
- "net.au": 1,
- "net.az": 1,
- "net.ba": 1,
- "net.bb": 1,
- "net.bh": 1,
- "net.bj": 1,
- "net.bm": 1,
- "net.bn": 1,
- "net.bo": 1,
- "net.br": 1,
- "net.bs": 1,
- "net.bt": 1,
- "net.bz": 1,
- "net.ci": 1,
- "net.cm": 1,
- "net.cn": 1,
- "net.co": 1,
- "net.cu": 1,
- "net.cw": 1,
- "net.cy": 1,
- "net.dm": 1,
- "net.do": 1,
- "net.dz": 1,
- "net.ec": 1,
- "net.eg": 1,
- "net.et": 1,
- "net.eu.org": 1,
- "net.fj": 1,
- "net.fm": 1,
- "net.ge": 1,
- "net.gg": 1,
- "net.gl": 1,
- "net.gn": 1,
- "net.gp": 1,
- "net.gr": 1,
- "net.gt": 1,
- "net.gu": 1,
- "net.gy": 1,
- "net.hk": 1,
- "net.hn": 1,
- "net.ht": 1,
- "net.id": 1,
- "net.il": 1,
- "net.im": 1,
- "net.in": 1,
- "net.iq": 1,
- "net.ir": 1,
- "net.is": 1,
- "net.je": 1,
- "net.jo": 1,
- "net.kg": 1,
- "net.ki": 1,
- "net.kn": 1,
- "net.kw": 1,
- "net.ky": 1,
- "net.kz": 1,
- "net.la": 1,
- "net.lb": 1,
- "net.lc": 1,
- "net.lk": 1,
- "net.lr": 1,
- "net.ls": 1,
- "net.lv": 1,
- "net.ly": 1,
- "net.ma": 1,
- "net.me": 1,
- "net.mk": 1,
- "net.ml": 1,
- "net.mo": 1,
- "net.ms": 1,
- "net.mt": 1,
- "net.mu": 1,
- "net.mv": 1,
- "net.mw": 1,
- "net.mx": 1,
- "net.my": 1,
- "net.mz": 1,
- "net.nf": 1,
- "net.ng": 1,
- "net.ni": 1,
- "net.nr": 1,
- "net.nz": 1,
- "net.om": 1,
- "net.pa": 1,
- "net.pe": 1,
- "net.ph": 1,
- "net.pk": 1,
- "net.pl": 1,
- "net.pn": 1,
- "net.pr": 1,
- "net.ps": 1,
- "net.pt": 1,
- "net.py": 1,
- "net.qa": 1,
- "net.ru": 1,
- "net.rw": 1,
- "net.sa": 1,
- "net.sb": 1,
- "net.sc": 1,
- "net.sd": 1,
- "net.sg": 1,
- "net.sh": 1,
- "net.sl": 1,
- "net.so": 1,
- "net.ss": 1,
- "net.st": 1,
- "net.sy": 1,
- "net.th": 1,
- "net.tj": 1,
- "net.tm": 1,
- "net.tn": 1,
- "net.to": 1,
- "net.tr": 1,
- "net.tt": 1,
- "net.tw": 1,
- "net.ua": 1,
- "net.uk": 1,
- "net.uy": 1,
- "net.uz": 1,
- "net.vc": 1,
- "net.ve": 1,
- "net.vi": 1,
- "net.vn": 1,
- "net.vu": 1,
- "net.ws": 1,
- "net.ye": 1,
- "net.za": 1,
- "net.zm": 1,
- "netbank": 1,
- "netflix": 1,
- "netgamers.jp": 1,
- "netlify.app": 1,
- "network": 1,
- "neustar": 1,
- "new": 1,
- "news": 1,
- "news.hu": 1,
- "next": 1,
- "nextdirect": 1,
- "nexus": 1,
- "neyagawa.osaka.jp": 1,
- "nf": 1,
- "nf.ca": 1,
- "nfl": 1,
- "nflfan.org": 1,
- "nfshost.com": 1,
- "ng": 1,
- "ng.eu.org": 1,
- "nghean.vn": 1,
- "ngo": 1,
- "ngo.lk": 1,
- "ngo.ng": 1,
- "ngo.ph": 1,
- "ngo.za": 1,
- "ngrok-free.app": 1,
- "ngrok-free.dev": 1,
- "ngrok.app": 1,
- "ngrok.dev": 1,
- "ngrok.io": 1,
- "ngrok.pizza": 1,
- "nh-serv.co.uk": 1,
- "nh.us": 1,
- "nhk": 1,
- "nhlfan.net": 1,
- "nhs.uk": 1,
- "ni": 1,
- "nic.in": 1,
- "nic.tj": 1,
- "nic.za": 1,
- "nichinan.miyazaki.jp": 1,
- "nichinan.tottori.jp": 1,
- "nico": 1,
- "nid.io": 1,
- "nieruchomosci.pl": 1,
- "niigata.jp": 1,
- "niigata.niigata.jp": 1,
- "niihama.ehime.jp": 1,
- "niikappu.hokkaido.jp": 1,
- "niimi.okayama.jp": 1,
- "niiza.saitama.jp": 1,
- "nikaho.akita.jp": 1,
- "nike": 1,
- "niki.hokkaido.jp": 1,
- "nikita.jp": 1,
- "nikko.tochigi.jp": 1,
- "nikolaev.ua": 1,
- "nikon": 1,
- "ninhbinh.vn": 1,
- "ninhthuan.vn": 1,
- "ninja": 1,
- "ninohe.iwate.jp": 1,
- "ninomiya.kanagawa.jp": 1,
- "nirasaki.yamanashi.jp": 1,
- "nis.za": 1,
- "nishi.fukuoka.jp": 1,
- "nishi.osaka.jp": 1,
- "nishiaizu.fukushima.jp": 1,
- "nishiarita.saga.jp": 1,
- "nishiawakura.okayama.jp": 1,
- "nishiazai.shiga.jp": 1,
- "nishigo.fukushima.jp": 1,
- "nishihara.kumamoto.jp": 1,
- "nishihara.okinawa.jp": 1,
- "nishiizu.shizuoka.jp": 1,
- "nishikata.tochigi.jp": 1,
- "nishikatsura.yamanashi.jp": 1,
- "nishikawa.yamagata.jp": 1,
- "nishimera.miyazaki.jp": 1,
- "nishinomiya.hyogo.jp": 1,
- "nishinoomote.kagoshima.jp": 1,
- "nishinoshima.shimane.jp": 1,
- "nishio.aichi.jp": 1,
- "nishiokoppe.hokkaido.jp": 1,
- "nishitosa.kochi.jp": 1,
- "nishiwaki.hyogo.jp": 1,
- "nissan": 1,
- "nissay": 1,
- "nissedal.no": 1,
- "nisshin.aichi.jp": 1,
- "niteroi.br": 1,
- "nittedal.no": 1,
- "niyodogawa.kochi.jp": 1,
- "nj.us": 1,
- "njs.jelastic.vps-host.net": 1,
- "nl": 1,
- "nl-ams-1.baremetal.scw.cloud": 1,
- "nl.ca": 1,
- "nl.ci": 1,
- "nl.eu.org": 1,
- "nl.no": 1,
- "nm.cn": 1,
- "nm.us": 1,
- "no": 1,
- "no-ip.biz": 1,
- "no-ip.ca": 1,
- "no-ip.co.uk": 1,
- "no-ip.info": 1,
- "no-ip.net": 1,
- "no-ip.org": 1,
- "no.com": 1,
- "no.eu.org": 1,
- "no.it": 1,
- "nobeoka.miyazaki.jp": 1,
- "noboribetsu.hokkaido.jp": 1,
- "nobushi.jp": 1,
- "noda.chiba.jp": 1,
- "noda.iwate.jp": 1,
- "nodes.k8s.fr-par.scw.cloud": 1,
- "nodes.k8s.nl-ams.scw.cloud": 1,
- "nodes.k8s.pl-waw.scw.cloud": 1,
- "nog.community": 1,
- "nogata.fukuoka.jp": 1,
- "nogi.tochigi.jp": 1,
- "noheji.aomori.jp": 1,
- "noho.st": 1,
- "nohost.me": 1,
- "noip.me": 1,
- "noip.us": 1,
- "nokia": 1,
- "nom.ad": 1,
- "nom.ag": 1,
- "nom.co": 1,
- "nom.es": 1,
- "nom.fr": 1,
- "nom.km": 1,
- "nom.mg": 1,
- "nom.nc": 1,
- "nom.ni": 1,
- "nom.pa": 1,
- "nom.pe": 1,
- "nom.pl": 1,
- "nom.re": 1,
- "nom.ro": 1,
- "nom.tm": 1,
- "nom.ve": 1,
- "nom.za": 1,
- "nombre.bo": 1,
- "nome.cv": 1,
- "nome.pt": 1,
- "nomi.ishikawa.jp": 1,
- "nonoichi.ishikawa.jp": 1,
- "noop.app": 1,
- "noor.jp": 1,
- "nord-aurdal.no": 1,
- "nord-fron.no": 1,
- "nord-odal.no": 1,
- "norddal.no": 1,
- "nordeste-idc.saveincloud.net": 1,
- "nordkapp.no": 1,
- "nordre-land.no": 1,
- "nordreisa.no": 1,
- "nore-og-uvdal.no": 1,
- "north-kazakhstan.su": 1,
- "norton": 1,
- "nose.osaka.jp": 1,
- "nosegawa.nara.jp": 1,
- "noshiro.akita.jp": 1,
- "not.br": 1,
- "notaires.fr": 1,
- "notaires.km": 1,
- "noticeable.news": 1,
- "noticias.bo": 1,
- "noto.ishikawa.jp": 1,
- "notodden.no": 1,
- "notogawa.shiga.jp": 1,
- "notteroy.no": 1,
- "nov.ru": 1,
- "nov.su": 1,
- "novara.it": 1,
- "novecore.site": 1,
- "now": 1,
- "now-dns.net": 1,
- "now-dns.org": 1,
- "now-dns.top": 1,
- "now.sh": 1,
- "nowaruda.pl": 1,
- "nowruz": 1,
- "nowtv": 1,
- "nozawaonsen.nagano.jp": 1,
- "nr": 1,
- "nra": 1,
- "nrw": 1,
- "ns.ca": 1,
- "nsn.us": 1,
- "nsupdate.info": 1,
- "nsw.au": 1,
- "nsw.edu.au": 1,
- "nt.au": 1,
- "nt.ca": 1,
- "nt.edu.au": 1,
- "nt.no": 1,
- "nt.ro": 1,
- "ntdll.top": 1,
- "ntr.br": 1,
- "ntt": 1,
- "nu": 1,
- "nu.ca": 1,
- "nu.it": 1,
- "numata.gunma.jp": 1,
- "numata.hokkaido.jp": 1,
- "numazu.shizuoka.jp": 1,
- "nuoro.it": 1,
- "nv.us": 1,
- "nx.cn": 1,
- "ny-1.paas.massivegrid.net": 1,
- "ny-2.paas.massivegrid.net": 1,
- "ny.us": 1,
- "nyaa.am": 1,
- "nyan.to": 1,
- "nyanta.jp": 1,
- "nyc": 1,
- "nyc.mn": 1,
- "nysa.pl": 1,
- "nyuzen.toyama.jp": 1,
- "nz": 1,
- "nz.basketball": 1,
- "nz.eu.org": 1,
- "návuotna.no": 1,
- "nååmesjevuemie.no": 1,
- "nærøy.no": 1,
- "nøtterøy.no": 1,
- "o.bg": 1,
- "o.se": 1,
- "o0o0.jp": 1,
- "oamishirasato.chiba.jp": 1,
- "oarai.ibaraki.jp": 1,
- "obama.fukui.jp": 1,
- "obama.nagasaki.jp": 1,
- "obanazawa.yamagata.jp": 1,
- "obi": 1,
- "obihiro.hokkaido.jp": 1,
- "obira.hokkaido.jp": 1,
- "obninsk.su": 1,
- "observer": 1,
- "obu.aichi.jp": 1,
- "obuse.nagano.jp": 1,
- "ocelot.mythic-beasts.com": 1,
- "ochi.kochi.jp": 1,
- "od.ua": 1,
- "odate.akita.jp": 1,
- "odawara.kanagawa.jp": 1,
- "odda.no": 1,
- "odesa.ua": 1,
- "odessa.ua": 1,
- "odo.br": 1,
- "oe.yamagata.jp": 1,
- "of.by": 1,
- "of.je": 1,
- "of.no": 1,
- "off.ai": 1,
- "office": 1,
- "office-on-the.net": 1,
- "official.academy": 1,
- "official.ec": 1,
- "ofunato.iwate.jp": 1,
- "og.ao": 1,
- "og.it": 1,
- "oga.akita.jp": 1,
- "ogaki.gifu.jp": 1,
- "ogano.saitama.jp": 1,
- "ogasawara.tokyo.jp": 1,
- "ogata.akita.jp": 1,
- "ogawa.ibaraki.jp": 1,
- "ogawa.nagano.jp": 1,
- "ogawa.saitama.jp": 1,
- "ogawara.miyagi.jp": 1,
- "ogi.saga.jp": 1,
- "ogimi.okinawa.jp": 1,
- "ogliastra.it": 1,
- "ogori.fukuoka.jp": 1,
- "ogose.saitama.jp": 1,
- "oguchi.aichi.jp": 1,
- "oguni.kumamoto.jp": 1,
- "oguni.yamagata.jp": 1,
- "oh.us": 1,
- "oharu.aichi.jp": 1,
- "ohda.shimane.jp": 1,
- "ohi.fukui.jp": 1,
- "ohira.miyagi.jp": 1,
- "ohira.tochigi.jp": 1,
- "ohkura.yamagata.jp": 1,
- "ohtawara.tochigi.jp": 1,
- "oi.kanagawa.jp": 1,
- "oia.gov.pl": 1,
- "oirase.aomori.jp": 1,
- "oirm.gov.pl": 1,
- "oishida.yamagata.jp": 1,
- "oiso.kanagawa.jp": 1,
- "oita.jp": 1,
- "oita.oita.jp": 1,
- "oizumi.gunma.jp": 1,
- "oji.nara.jp": 1,
- "ojiya.niigata.jp": 1,
- "ok.us": 1,
- "okagaki.fukuoka.jp": 1,
- "okawa.fukuoka.jp": 1,
- "okawa.kochi.jp": 1,
- "okaya.nagano.jp": 1,
- "okayama.jp": 1,
- "okayama.okayama.jp": 1,
- "okazaki.aichi.jp": 1,
- "oke.gov.pl": 1,
- "okegawa.saitama.jp": 1,
- "oketo.hokkaido.jp": 1,
- "oki.fukuoka.jp": 1,
- "okinawa": 1,
- "okinawa.jp": 1,
- "okinawa.okinawa.jp": 1,
- "okinoshima.shimane.jp": 1,
- "okoppe.hokkaido.jp": 1,
- "oksnes.no": 1,
- "okuizumo.shimane.jp": 1,
- "okuma.fukushima.jp": 1,
- "okutama.tokyo.jp": 1,
- "ol.no": 1,
- "olawa.pl": 1,
- "olayan": 1,
- "olayangroup": 1,
- "olbia-tempio.it": 1,
- "olbiatempio.it": 1,
- "oldnavy": 1,
- "olecko.pl": 1,
- "olkusz.pl": 1,
- "ollo": 1,
- "olsztyn.pl": 1,
- "om": 1,
- "omachi.nagano.jp": 1,
- "omachi.saga.jp": 1,
- "omaezaki.shizuoka.jp": 1,
- "omasvuotna.no": 1,
- "ome.tokyo.jp": 1,
- "omega": 1,
- "omg.lol": 1,
- "omi.nagano.jp": 1,
- "omi.niigata.jp": 1,
- "omigawa.chiba.jp": 1,
- "omihachiman.shiga.jp": 1,
- "omitama.ibaraki.jp": 1,
- "omiya.saitama.jp": 1,
- "omniwe.site": 1,
- "omotego.fukushima.jp": 1,
- "omura.nagasaki.jp": 1,
- "omuta.fukuoka.jp": 1,
- "on-aptible.com": 1,
- "on-the-web.tv": 1,
- "on-web.fr": 1,
- "on.ca": 1,
- "onagawa.miyagi.jp": 1,
- "onavstack.net": 1,
- "oncilla.mythic-beasts.com": 1,
- "ondigitalocean.app": 1,
- "one": 1,
- "onfabrica.com": 1,
- "onflashdrive.app": 1,
- "ong": 1,
- "ong.br": 1,
- "onga.fukuoka.jp": 1,
- "onion": 1,
- "onjuku.chiba.jp": 1,
- "onl": 1,
- "online": 1,
- "online.th": 1,
- "onna.okinawa.jp": 1,
- "ono.fukui.jp": 1,
- "ono.fukushima.jp": 1,
- "ono.hyogo.jp": 1,
- "onojo.fukuoka.jp": 1,
- "onomichi.hiroshima.jp": 1,
- "onporter.run": 1,
- "onred.one": 1,
- "onrender.com": 1,
- "onthewifi.com": 1,
- "onza.mythic-beasts.com": 1,
- "ooguy.com": 1,
- "ookuwa.nagano.jp": 1,
- "ooo": 1,
- "oops.jp": 1,
- "ooshika.nagano.jp": 1,
- "oow.gov.pl": 1,
- "opal.ne.jp": 1,
- "open": 1,
- "opencraft.hosting": 1,
- "opensocial.site": 1,
- "operaunite.com": 1,
- "opoczno.pl": 1,
- "opole.pl": 1,
- "oppdal.no": 1,
- "oppegard.no": 1,
- "oppegård.no": 1,
- "or.at": 1,
- "or.bi": 1,
- "or.ci": 1,
- "or.cr": 1,
- "or.id": 1,
- "or.it": 1,
- "or.jp": 1,
- "or.ke": 1,
- "or.kr": 1,
- "or.mu": 1,
- "or.na": 1,
- "or.pw": 1,
- "or.th": 1,
- "or.tz": 1,
- "or.ug": 1,
- "or.us": 1,
- "ora.gunma.jp": 1,
- "oracle": 1,
- "orange": 1,
- "orangecloud.tn": 1,
- "org": 1,
- "org.ac": 1,
- "org.ae": 1,
- "org.af": 1,
- "org.ag": 1,
- "org.ai": 1,
- "org.al": 1,
- "org.am": 1,
- "org.ar": 1,
- "org.au": 1,
- "org.az": 1,
- "org.ba": 1,
- "org.bb": 1,
- "org.bh": 1,
- "org.bi": 1,
- "org.bj": 1,
- "org.bm": 1,
- "org.bn": 1,
- "org.bo": 1,
- "org.br": 1,
- "org.bs": 1,
- "org.bt": 1,
- "org.bw": 1,
- "org.bz": 1,
- "org.ci": 1,
- "org.cn": 1,
- "org.co": 1,
- "org.cu": 1,
- "org.cv": 1,
- "org.cw": 1,
- "org.cy": 1,
- "org.dm": 1,
- "org.do": 1,
- "org.dz": 1,
- "org.ec": 1,
- "org.ee": 1,
- "org.eg": 1,
- "org.es": 1,
- "org.et": 1,
- "org.fj": 1,
- "org.fm": 1,
- "org.ge": 1,
- "org.gg": 1,
- "org.gh": 1,
- "org.gi": 1,
- "org.gl": 1,
- "org.gn": 1,
- "org.gp": 1,
- "org.gr": 1,
- "org.gt": 1,
- "org.gu": 1,
- "org.gy": 1,
- "org.hk": 1,
- "org.hn": 1,
- "org.ht": 1,
- "org.hu": 1,
- "org.il": 1,
- "org.im": 1,
- "org.in": 1,
- "org.iq": 1,
- "org.ir": 1,
- "org.is": 1,
- "org.je": 1,
- "org.jo": 1,
- "org.kg": 1,
- "org.ki": 1,
- "org.km": 1,
- "org.kn": 1,
- "org.kp": 1,
- "org.kw": 1,
- "org.ky": 1,
- "org.kz": 1,
- "org.la": 1,
- "org.lb": 1,
- "org.lc": 1,
- "org.lk": 1,
- "org.lr": 1,
- "org.ls": 1,
- "org.lv": 1,
- "org.ly": 1,
- "org.ma": 1,
- "org.me": 1,
- "org.mg": 1,
- "org.mk": 1,
- "org.ml": 1,
- "org.mn": 1,
- "org.mo": 1,
- "org.ms": 1,
- "org.mt": 1,
- "org.mu": 1,
- "org.mv": 1,
- "org.mw": 1,
- "org.mx": 1,
- "org.my": 1,
- "org.mz": 1,
- "org.na": 1,
- "org.ng": 1,
- "org.ni": 1,
- "org.nr": 1,
- "org.nz": 1,
- "org.om": 1,
- "org.pa": 1,
- "org.pe": 1,
- "org.pf": 1,
- "org.ph": 1,
- "org.pk": 1,
- "org.pl": 1,
- "org.pn": 1,
- "org.pr": 1,
- "org.ps": 1,
- "org.pt": 1,
- "org.py": 1,
- "org.qa": 1,
- "org.ro": 1,
- "org.rs": 1,
- "org.ru": 1,
- "org.rw": 1,
- "org.sa": 1,
- "org.sb": 1,
- "org.sc": 1,
- "org.sd": 1,
- "org.se": 1,
- "org.sg": 1,
- "org.sh": 1,
- "org.sl": 1,
- "org.sn": 1,
- "org.so": 1,
- "org.ss": 1,
- "org.st": 1,
- "org.sv": 1,
- "org.sy": 1,
- "org.sz": 1,
- "org.tj": 1,
- "org.tm": 1,
- "org.tn": 1,
- "org.to": 1,
- "org.tr": 1,
- "org.tt": 1,
- "org.tw": 1,
- "org.ua": 1,
- "org.ug": 1,
- "org.uk": 1,
- "org.uy": 1,
- "org.uz": 1,
- "org.vc": 1,
- "org.ve": 1,
- "org.vi": 1,
- "org.vn": 1,
- "org.vu": 1,
- "org.ws": 1,
- "org.ye": 1,
- "org.yt": 1,
- "org.za": 1,
- "org.zm": 1,
- "org.zw": 1,
- "organic": 1,
- "origins": 1,
- "oristano.it": 1,
- "orkanger.no": 1,
- "orkdal.no": 1,
- "orland.no": 1,
- "orsites.com": 1,
- "orskog.no": 1,
- "orsta.no": 1,
- "orx.biz": 1,
- "os.hedmark.no": 1,
- "os.hordaland.no": 1,
- "osaka": 1,
- "osaka.jp": 1,
- "osakasayama.osaka.jp": 1,
- "osaki.miyagi.jp": 1,
- "osakikamijima.hiroshima.jp": 1,
- "osasco.br": 1,
- "oschr.gov.pl": 1,
- "osen.no": 1,
- "oseto.nagasaki.jp": 1,
- "oshima.tokyo.jp": 1,
- "oshima.yamaguchi.jp": 1,
- "oshino.yamanashi.jp": 1,
- "oshu.iwate.jp": 1,
- "oslo.no": 1,
- "osoyro.no": 1,
- "osteroy.no": 1,
- "osterøy.no": 1,
- "ostre-toten.no": 1,
- "ostroda.pl": 1,
- "ostroleka.pl": 1,
- "ostrowiec.pl": 1,
- "ostrowwlkp.pl": 1,
- "osøyro.no": 1,
- "ot.it": 1,
- "ota.gunma.jp": 1,
- "ota.tokyo.jp": 1,
- "otake.hiroshima.jp": 1,
- "otaki.chiba.jp": 1,
- "otaki.nagano.jp": 1,
- "otaki.saitama.jp": 1,
- "otama.fukushima.jp": 1,
- "otari.nagano.jp": 1,
- "otaru.hokkaido.jp": 1,
- "ote.bj": 1,
- "other.nf": 1,
- "oto.fukuoka.jp": 1,
- "otobe.hokkaido.jp": 1,
- "otofuke.hokkaido.jp": 1,
- "otoineppu.hokkaido.jp": 1,
- "otoyo.kochi.jp": 1,
- "otsu.shiga.jp": 1,
- "otsuchi.iwate.jp": 1,
- "otsuka": 1,
- "otsuki.kochi.jp": 1,
- "otsuki.yamanashi.jp": 1,
- "ott": 1,
- "ouchi.saga.jp": 1,
- "ouda.nara.jp": 1,
- "oum.gov.pl": 1,
- "oumu.hokkaido.jp": 1,
- "outsystemscloud.com": 1,
- "overhalla.no": 1,
- "ovh": 1,
- "ovre-eiker.no": 1,
- "owani.aomori.jp": 1,
- "owariasahi.aichi.jp": 1,
- "own.pm": 1,
- "ownip.net": 1,
- "ownprovider.com": 1,
- "ox.rs": 1,
- "oxa.cloud": 1,
- "oy.lc": 1,
- "oya.to": 1,
- "oyabe.toyama.jp": 1,
- "oyama.tochigi.jp": 1,
- "oyamazaki.kyoto.jp": 1,
- "oyer.no": 1,
- "oygarden.no": 1,
- "oyodo.nara.jp": 1,
- "oystre-slidre.no": 1,
- "oz.au": 1,
- "ozora.hokkaido.jp": 1,
- "ozu.ehime.jp": 1,
- "ozu.kumamoto.jp": 1,
- "p.bg": 1,
- "p.se": 1,
- "pa": 1,
- "pa.gov.br": 1,
- "pa.gov.pl": 1,
- "pa.it": 1,
- "pa.leg.br": 1,
- "pa.us": 1,
- "paas.beebyte.io": 1,
- "paas.datacenter.fi": 1,
- "paas.hosted-by-previder.com": 1,
- "paas.massivegrid.com": 1,
- "padova.it": 1,
- "padua.it": 1,
- "page": 1,
- "pagefrontapp.com": 1,
- "pages.dev": 1,
- "pages.it.hs-heilbronn.de": 1,
- "pages.torproject.net": 1,
- "pages.wiardweb.com": 1,
- "pagespeedmobilizer.com": 1,
- "pagexl.com": 1,
- "palermo.it": 1,
- "palmas.br": 1,
- "panasonic": 1,
- "panel.gg": 1,
- "pantheonsite.io": 1,
- "parachuting.aero": 1,
- "paragliding.aero": 1,
- "parallel.jp": 1,
- "parasite.jp": 1,
- "paris": 1,
- "paris.eu.org": 1,
- "parliament.nz": 1,
- "parma.it": 1,
- "paroch.k12.ma.us": 1,
- "pars": 1,
- "parti.se": 1,
- "partners": 1,
- "parts": 1,
- "party": 1,
- "passenger-association.aero": 1,
- "patria.bo": 1,
- "pavia.it": 1,
- "pay": 1,
- "pb.ao": 1,
- "pb.gov.br": 1,
- "pb.leg.br": 1,
- "pc.it": 1,
- "pc.pl": 1,
- "pccw": 1,
- "pcloud.host": 1,
- "pd.it": 1,
- "pdns.page": 1,
- "pe": 1,
- "pe.ca": 1,
- "pe.gov.br": 1,
- "pe.it": 1,
- "pe.kr": 1,
- "pe.leg.br": 1,
- "pecori.jp": 1,
- "peewee.jp": 1,
- "penne.jp": 1,
- "penza.su": 1,
- "pepper.jp": 1,
- "per.la": 1,
- "per.nf": 1,
- "per.sg": 1,
- "perma.jp": 1,
- "perso.ht": 1,
- "perso.sn": 1,
- "perso.tn": 1,
- "perspecta.cloud": 1,
- "perugia.it": 1,
- "pesaro-urbino.it": 1,
- "pesarourbino.it": 1,
- "pescara.it": 1,
- "pet": 1,
- "pf": 1,
- "pfizer": 1,
- "pg.in": 1,
- "pg.it": 1,
- "pgafan.net": 1,
- "pgfog.com": 1,
- "ph": 1,
- "pharmacien.fr": 1,
- "pharmaciens.km": 1,
- "pharmacy": 1,
- "phd": 1,
- "philips": 1,
- "phone": 1,
- "photo": 1,
- "photography": 1,
- "photos": 1,
- "phutho.vn": 1,
- "phuyen.vn": 1,
- "phx.enscaled.us": 1,
- "physio": 1,
- "pi.gov.br": 1,
- "pi.it": 1,
- "pi.leg.br": 1,
- "piacenza.it": 1,
- "pics": 1,
- "pictet": 1,
- "pictures": 1,
- "pid": 1,
- "piedmont.it": 1,
- "piemonte.it": 1,
- "pigboat.jp": 1,
- "pila.pl": 1,
- "pilot.aero": 1,
- "pimienta.org": 1,
- "pin": 1,
- "pinb.gov.pl": 1,
- "ping": 1,
- "pink": 1,
- "pinoko.jp": 1,
- "pioneer": 1,
- "pippu.hokkaido.jp": 1,
- "pisa.it": 1,
- "pistoia.it": 1,
- "pisz.pl": 1,
- "piw.gov.pl": 1,
- "pixolino.com": 1,
- "pizza": 1,
- "pk": 1,
- "pl": 1,
- "pl.eu.org": 1,
- "pl.ua": 1,
- "place": 1,
- "platform0.app": 1,
- "platter-app.com": 1,
- "platter-app.dev": 1,
- "platterp.us": 1,
- "play": 1,
- "playstation": 1,
- "playstation-cloud.com": 1,
- "plc.co.im": 1,
- "plc.ly": 1,
- "plc.uk": 1,
- "plesk.page": 1,
- "pleskns.com": 1,
- "plo.ps": 1,
- "plumbing": 1,
- "plurinacional.bo": 1,
- "plus": 1,
- "pm": 1,
- "pmn.it": 1,
- "pn": 1,
- "pn.it": 1,
- "pnc": 1,
- "po.gov.pl": 1,
- "po.it": 1,
- "poa.br": 1,
- "podhale.pl": 1,
- "podlasie.pl": 1,
- "podzone.net": 1,
- "podzone.org": 1,
- "pohl": 1,
- "point2this.com": 1,
- "pointto.us": 1,
- "poivron.org": 1,
- "poker": 1,
- "pokrovsk.su": 1,
- "pol.dz": 1,
- "pol.ht": 1,
- "pol.tr": 1,
- "police.uk": 1,
- "politica.bo": 1,
- "politie": 1,
- "polkowice.pl": 1,
- "poltava.ua": 1,
- "pomorskie.pl": 1,
- "pomorze.pl": 1,
- "poniatowa.pl": 1,
- "ponpes.id": 1,
- "pordenone.it": 1,
- "porn": 1,
- "porsanger.no": 1,
- "porsangu.no": 1,
- "porsgrunn.no": 1,
- "porsáŋgu.no": 1,
- "port.fr": 1,
- "post": 1,
- "post.in": 1,
- "postman-echo.com": 1,
- "potager.org": 1,
- "potenza.it": 1,
- "powiat.pl": 1,
- "poznan.pl": 1,
- "pp.az": 1,
- "pp.ru": 1,
- "pp.se": 1,
- "pp.ua": 1,
- "ppg.br": 1,
- "pr": 1,
- "pr.gov.br": 1,
- "pr.gov.pl": 1,
- "pr.it": 1,
- "pr.leg.br": 1,
- "pr.us": 1,
- "pramerica": 1,
- "prato.it": 1,
- "praxi": 1,
- "prd.fr": 1,
- "prd.km": 1,
- "prd.mg": 1,
- "prequalifyme.today": 1,
- "press": 1,
- "press.aero": 1,
- "press.cy": 1,
- "press.ma": 1,
- "press.se": 1,
- "presse.ci": 1,
- "presse.km": 1,
- "presse.ml": 1,
- "pri.ee": 1,
- "prime": 1,
- "primetel.cloud": 1,
- "principe.st": 1,
- "priv.at": 1,
- "priv.hu": 1,
- "priv.instances.scw.cloud": 1,
- "priv.me": 1,
- "priv.no": 1,
- "priv.pl": 1,
- "privatelink.snowflake.app": 1,
- "privatizehealthinsurance.net": 1,
- "pro": 1,
- "pro.az": 1,
- "pro.br": 1,
- "pro.cy": 1,
- "pro.ec": 1,
- "pro.fj": 1,
- "pro.ht": 1,
- "pro.in": 1,
- "pro.mv": 1,
- "pro.na": 1,
- "pro.om": 1,
- "pro.pr": 1,
- "pro.tt": 1,
- "pro.typeform.com": 1,
- "pro.vn": 1,
- "prochowice.pl": 1,
- "prod": 1,
- "production.aero": 1,
- "productions": 1,
- "prof": 1,
- "prof.pr": 1,
- "profesional.bo": 1,
- "progressive": 1,
- "promo": 1,
- "properties": 1,
- "property": 1,
- "protection": 1,
- "protonet.io": 1,
- "pru": 1,
- "prudential": 1,
- "pruszkow.pl": 1,
- "prvcy.page": 1,
- "przeworsk.pl": 1,
- "ps": 1,
- "psc.br": 1,
- "psi.br": 1,
- "psp.gov.pl": 1,
- "psse.gov.pl": 1,
- "pstmn.io": 1,
- "pt": 1,
- "pt.eu.org": 1,
- "pt.it": 1,
- "pu.it": 1,
- "pub": 1,
- "pub.instances.scw.cloud": 1,
- "pub.sa": 1,
- "publ.pt": 1,
- "public-inquiry.uk": 1,
- "publishproxy.com": 1,
- "pubtls.org": 1,
- "pueblo.bo": 1,
- "pug.it": 1,
- "puglia.it": 1,
- "pulawy.pl": 1,
- "punyu.jp": 1,
- "pup.gov.pl": 1,
- "pupu.jp": 1,
- "pussycat.jp": 1,
- "pv.it": 1,
- "pvh.br": 1,
- "pvt.ge": 1,
- "pvt.k12.ma.us": 1,
- "pw": 1,
- "pwc": 1,
- "py": 1,
- "pya.jp": 1,
- "pyatigorsk.ru": 1,
- "pymnt.uk": 1,
- "pythonanywhere.com": 1,
- "pz.it": 1,
- "q-a.eu.org": 1,
- "q.bg": 1,
- "qa": 1,
- "qa2.com": 1,
- "qbuser.com": 1,
- "qc.ca": 1,
- "qc.com": 1,
- "qcx.io": 1,
- "qh.cn": 1,
- "qld.au": 1,
- "qld.edu.au": 1,
- "qld.gov.au": 1,
- "qoto.io": 1,
- "qpon": 1,
- "qsl.br": 1,
- "qualifioapp.com": 1,
- "quangbinh.vn": 1,
- "quangnam.vn": 1,
- "quangngai.vn": 1,
- "quangninh.vn": 1,
- "quangtri.vn": 1,
- "quebec": 1,
- "quest": 1,
- "quicksytes.com": 1,
- "r.bg": 1,
- "r.cdn77.net": 1,
- "r.se": 1,
- "r2.dev": 1,
- "ra.it": 1,
- "racing": 1,
- "rackmaze.com": 1,
- "rackmaze.net": 1,
- "rade.no": 1,
- "radio": 1,
- "radio.am": 1,
- "radio.br": 1,
- "radio.fm": 1,
- "radom.pl": 1,
- "radoy.no": 1,
- "radøy.no": 1,
- "raffleentry.org.uk": 1,
- "rag-cloud-ch.hosteur.com": 1,
- "rag-cloud.hosteur.com": 1,
- "ragusa.it": 1,
- "rahkkeravju.no": 1,
- "raholt.no": 1,
- "raindrop.jp": 1,
- "raisa.no": 1,
- "rakkestad.no": 1,
- "ralingen.no": 1,
- "rana.no": 1,
- "randaberg.no": 1,
- "rankoshi.hokkaido.jp": 1,
- "ranzan.saitama.jp": 1,
- "rar.ve": 1,
- "ras.ru": 1,
- "rauma.no": 1,
- "ravendb.cloud": 1,
- "ravendb.community": 1,
- "ravendb.me": 1,
- "ravendb.run": 1,
- "ravenna.it": 1,
- "ravpage.co.il": 1,
- "rawa-maz.pl": 1,
- "rc.it": 1,
- "rdv.to": 1,
- "rdy.jp": 1,
- "re": 1,
- "re.it": 1,
- "re.kr": 1,
- "read": 1,
- "read-books.org": 1,
- "readmyblog.org": 1,
- "readthedocs.io": 1,
- "readymade.jp": 1,
- "realestate": 1,
- "realestate.pl": 1,
- "realm.cz": 1,
- "realtor": 1,
- "realty": 1,
- "rebun.hokkaido.jp": 1,
- "rec.br": 1,
- "rec.co": 1,
- "rec.nf": 1,
- "rec.ro": 1,
- "rec.ve": 1,
- "recht.pro": 1,
- "recife.br": 1,
- "recipes": 1,
- "recreation.aero": 1,
- "red": 1,
- "red.sv": 1,
- "redirectme.net": 1,
- "redstone": 1,
- "redumbrella": 1,
- "reg.dk": 1,
- "reggio-calabria.it": 1,
- "reggio-emilia.it": 1,
- "reggiocalabria.it": 1,
- "reggioemilia.it": 1,
- "rehab": 1,
- "reise": 1,
- "reisen": 1,
- "reit": 1,
- "reklam.hu": 1,
- "rel.ht": 1,
- "rel.pl": 1,
- "reliance": 1,
- "remotewd.com": 1,
- "ren": 1,
- "rendalen.no": 1,
- "rennebu.no": 1,
- "rennesoy.no": 1,
- "rennesøy.no": 1,
- "rent": 1,
- "rentals": 1,
- "rep.br": 1,
- "rep.kp": 1,
- "repair": 1,
- "repbody.aero": 1,
- "repl.co": 1,
- "repl.run": 1,
- "report": 1,
- "republican": 1,
- "res.aero": 1,
- "res.in": 1,
- "research.aero": 1,
- "reservd.com": 1,
- "reservd.dev.thingdust.io": 1,
- "reservd.disrec.thingdust.io": 1,
- "reservd.testing.thingdust.io": 1,
- "reserve-online.com": 1,
- "reserve-online.net": 1,
- "resindevice.io": 1,
- "rest": 1,
- "restaurant": 1,
- "restaurant.bj": 1,
- "resto.bj": 1,
- "review": 1,
- "reviews": 1,
- "revista.bo": 1,
- "rexroth": 1,
- "rg.it": 1,
- "rgr.jp": 1,
- "rhcloud.com": 1,
- "ri.it": 1,
- "ri.us": 1,
- "ribeirao.br": 1,
- "ric.jelastic.vps-host.net": 1,
- "rich": 1,
- "richardli": 1,
- "ricoh": 1,
- "rieti.it": 1,
- "rifu.miyagi.jp": 1,
- "riik.ee": 1,
- "rikubetsu.hokkaido.jp": 1,
- "rikuzentakata.iwate.jp": 1,
- "ril": 1,
- "rimini.it": 1,
- "rindal.no": 1,
- "ringebu.no": 1,
- "ringerike.no": 1,
- "ringsaker.no": 1,
- "rio": 1,
- "rio.br": 1,
- "riobranco.br": 1,
- "riopreto.br": 1,
- "rip": 1,
- "rishiri.hokkaido.jp": 1,
- "rishirifuji.hokkaido.jp": 1,
- "risor.no": 1,
- "rissa.no": 1,
- "risør.no": 1,
- "ritto.shiga.jp": 1,
- "rivne.ua": 1,
- "rj.gov.br": 1,
- "rj.leg.br": 1,
- "rl.no": 1,
- "rm.it": 1,
- "rn.gov.br": 1,
- "rn.it": 1,
- "rn.leg.br": 1,
- "ro": 1,
- "ro.eu.org": 1,
- "ro.gov.br": 1,
- "ro.im": 1,
- "ro.it": 1,
- "ro.leg.br": 1,
- "roan.no": 1,
- "rocher": 1,
- "rocks": 1,
- "rocky.page": 1,
- "rodeo": 1,
- "rodoy.no": 1,
- "rogers": 1,
- "rokunohe.aomori.jp": 1,
- "rollag.no": 1,
- "roma.it": 1,
- "rome.it": 1,
- "romsa.no": 1,
- "romskog.no": 1,
- "room": 1,
- "roros.no": 1,
- "rost.no": 1,
- "rotorcraft.aero": 1,
- "router.management": 1,
- "rovigo.it": 1,
- "rovno.ua": 1,
- "royal-commission.uk": 1,
- "royken.no": 1,
- "royrvik.no": 1,
- "rr.gov.br": 1,
- "rr.leg.br": 1,
- "rs": 1,
- "rs.ba": 1,
- "rs.gov.br": 1,
- "rs.leg.br": 1,
- "rs.webaccel.jp": 1,
- "rsc.cdn77.org": 1,
- "rsvp": 1,
- "ru": 1,
- "ru.com": 1,
- "ru.eu.org": 1,
- "ru.net": 1,
- "rugby": 1,
- "ruhr": 1,
- "rulez.jp": 1,
- "run": 1,
- "run.app": 1,
- "ruovat.no": 1,
- "rv.ua": 1,
- "rw": 1,
- "rwe": 1,
- "rybnik.pl": 1,
- "ryd.wafaicloud.com": 1,
- "rygge.no": 1,
- "ryokami.saitama.jp": 1,
- "ryugasaki.ibaraki.jp": 1,
- "ryukyu": 1,
- "ryuoh.shiga.jp": 1,
- "rzeszow.pl": 1,
- "rzgw.gov.pl": 1,
- "ráhkkerávju.no": 1,
- "ráisa.no": 1,
- "råde.no": 1,
- "råholt.no": 1,
- "rælingen.no": 1,
- "rødøy.no": 1,
- "rømskog.no": 1,
- "røros.no": 1,
- "røst.no": 1,
- "røyken.no": 1,
- "røyrvik.no": 1,
- "s.bg": 1,
- "s.se": 1,
- "s3-ap-northeast-1.amazonaws.com": 1,
- "s3-ap-northeast-2.amazonaws.com": 1,
- "s3-ap-south-1.amazonaws.com": 1,
- "s3-ap-southeast-1.amazonaws.com": 1,
- "s3-ap-southeast-2.amazonaws.com": 1,
- "s3-ca-central-1.amazonaws.com": 1,
- "s3-eu-central-1.amazonaws.com": 1,
- "s3-eu-west-1.amazonaws.com": 1,
- "s3-eu-west-2.amazonaws.com": 1,
- "s3-eu-west-3.amazonaws.com": 1,
- "s3-external-1.amazonaws.com": 1,
- "s3-fips-us-gov-west-1.amazonaws.com": 1,
- "s3-sa-east-1.amazonaws.com": 1,
- "s3-us-east-2.amazonaws.com": 1,
- "s3-us-gov-west-1.amazonaws.com": 1,
- "s3-us-west-1.amazonaws.com": 1,
- "s3-us-west-2.amazonaws.com": 1,
- "s3-website-ap-northeast-1.amazonaws.com": 1,
- "s3-website-ap-southeast-1.amazonaws.com": 1,
- "s3-website-ap-southeast-2.amazonaws.com": 1,
- "s3-website-eu-west-1.amazonaws.com": 1,
- "s3-website-sa-east-1.amazonaws.com": 1,
- "s3-website-us-east-1.amazonaws.com": 1,
- "s3-website-us-west-1.amazonaws.com": 1,
- "s3-website-us-west-2.amazonaws.com": 1,
- "s3-website.ap-northeast-2.amazonaws.com": 1,
- "s3-website.ap-south-1.amazonaws.com": 1,
- "s3-website.ca-central-1.amazonaws.com": 1,
- "s3-website.eu-central-1.amazonaws.com": 1,
- "s3-website.eu-west-2.amazonaws.com": 1,
- "s3-website.eu-west-3.amazonaws.com": 1,
- "s3-website.fr-par.scw.cloud": 1,
- "s3-website.nl-ams.scw.cloud": 1,
- "s3-website.pl-waw.scw.cloud": 1,
- "s3-website.us-east-2.amazonaws.com": 1,
- "s3.amazonaws.com": 1,
- "s3.ap-northeast-2.amazonaws.com": 1,
- "s3.ap-south-1.amazonaws.com": 1,
- "s3.ca-central-1.amazonaws.com": 1,
- "s3.cn-north-1.amazonaws.com.cn": 1,
- "s3.dualstack.ap-northeast-1.amazonaws.com": 1,
- "s3.dualstack.ap-northeast-2.amazonaws.com": 1,
- "s3.dualstack.ap-south-1.amazonaws.com": 1,
- "s3.dualstack.ap-southeast-1.amazonaws.com": 1,
- "s3.dualstack.ap-southeast-2.amazonaws.com": 1,
- "s3.dualstack.ca-central-1.amazonaws.com": 1,
- "s3.dualstack.eu-central-1.amazonaws.com": 1,
- "s3.dualstack.eu-west-1.amazonaws.com": 1,
- "s3.dualstack.eu-west-2.amazonaws.com": 1,
- "s3.dualstack.eu-west-3.amazonaws.com": 1,
- "s3.dualstack.sa-east-1.amazonaws.com": 1,
- "s3.dualstack.us-east-1.amazonaws.com": 1,
- "s3.dualstack.us-east-2.amazonaws.com": 1,
- "s3.eu-central-1.amazonaws.com": 1,
- "s3.eu-west-2.amazonaws.com": 1,
- "s3.eu-west-3.amazonaws.com": 1,
- "s3.fr-par.scw.cloud": 1,
- "s3.isk01.sakurastorage.jp": 1,
- "s3.isk02.sakurastorage.jp": 1,
- "s3.nl-ams.scw.cloud": 1,
- "s3.pl-waw.scw.cloud": 1,
- "s3.teckids.org": 1,
- "s3.us-east-2.amazonaws.com": 1,
- "sa": 1,
- "sa-east-1.elasticbeanstalk.com": 1,
- "sa.au": 1,
- "sa.com": 1,
- "sa.cr": 1,
- "sa.edu.au": 1,
- "sa.gov.au": 1,
- "sa.gov.pl": 1,
- "sa.it": 1,
- "sa.ngrok.io": 1,
- "saarland": 1,
- "sabae.fukui.jp": 1,
- "sadist.jp": 1,
- "sado.niigata.jp": 1,
- "safe": 1,
- "safety": 1,
- "safety.aero": 1,
- "saga.jp": 1,
- "saga.saga.jp": 1,
- "sagae.yamagata.jp": 1,
- "sagamihara.kanagawa.jp": 1,
- "saigawa.fukuoka.jp": 1,
- "saijo.ehime.jp": 1,
- "saikai.nagasaki.jp": 1,
- "saiki.oita.jp": 1,
- "saitama.jp": 1,
- "saitama.saitama.jp": 1,
- "saito.miyazaki.jp": 1,
- "saka.hiroshima.jp": 1,
- "sakado.saitama.jp": 1,
- "sakae.chiba.jp": 1,
- "sakae.nagano.jp": 1,
- "sakahogi.gifu.jp": 1,
- "sakai.fukui.jp": 1,
- "sakai.ibaraki.jp": 1,
- "sakai.osaka.jp": 1,
- "sakaiminato.tottori.jp": 1,
- "sakaki.nagano.jp": 1,
- "sakata.yamagata.jp": 1,
- "sakawa.kochi.jp": 1,
- "sakegawa.yamagata.jp": 1,
- "saku.nagano.jp": 1,
- "sakuho.nagano.jp": 1,
- "sakura": 1,
- "sakura.chiba.jp": 1,
- "sakura.ne.jp": 1,
- "sakura.tochigi.jp": 1,
- "sakura.tv": 1,
- "sakuragawa.ibaraki.jp": 1,
- "sakurai.nara.jp": 1,
- "sakuratan.com": 1,
- "sakuraweb.com": 1,
- "sakyo.kyoto.jp": 1,
- "salangen.no": 1,
- "salat.no": 1,
- "sale": 1,
- "salerno.it": 1,
- "salon": 1,
- "saloon.jp": 1,
- "saltdal.no": 1,
- "salud.bo": 1,
- "salvador.br": 1,
- "samegawa.fukushima.jp": 1,
- "samnanger.no": 1,
- "sampa.br": 1,
- "samsclub": 1,
- "samsung": 1,
- "samukawa.kanagawa.jp": 1,
- "sanagochi.tokushima.jp": 1,
- "sanda.hyogo.jp": 1,
- "sandcats.io": 1,
- "sande.more-og-romsdal.no": 1,
- "sande.møre-og-romsdal.no": 1,
- "sande.vestfold.no": 1,
- "sandefjord.no": 1,
- "sandnes.no": 1,
- "sandnessjoen.no": 1,
- "sandnessjøen.no": 1,
- "sandoy.no": 1,
- "sandvik": 1,
- "sandvikcoromant": 1,
- "sandøy.no": 1,
- "sango.nara.jp": 1,
- "sanjo.niigata.jp": 1,
- "sannan.hyogo.jp": 1,
- "sannohe.aomori.jp": 1,
- "sano.tochigi.jp": 1,
- "sanofi": 1,
- "sanok.pl": 1,
- "santamaria.br": 1,
- "santoandre.br": 1,
- "sanuki.kagawa.jp": 1,
- "saobernardo.br": 1,
- "saogonca.br": 1,
- "saotome.st": 1,
- "sap": 1,
- "sar.it": 1,
- "sardegna.it": 1,
- "sardinia.it": 1,
- "sarl": 1,
- "saroma.hokkaido.jp": 1,
- "sarpsborg.no": 1,
- "sarufutsu.hokkaido.jp": 1,
- "sas": 1,
- "sasaguri.fukuoka.jp": 1,
- "sasayama.hyogo.jp": 1,
- "sasebo.nagasaki.jp": 1,
- "sassari.it": 1,
- "satosho.okayama.jp": 1,
- "satsumasendai.kagoshima.jp": 1,
- "satte.saitama.jp": 1,
- "sauda.no": 1,
- "sauherad.no": 1,
- "save": 1,
- "saves-the-whales.com": 1,
- "savona.it": 1,
- "saxo": 1,
- "sayama.osaka.jp": 1,
- "sayama.saitama.jp": 1,
- "sayo.hyogo.jp": 1,
- "sb": 1,
- "sb.ua": 1,
- "sbi": 1,
- "sblo.jp": 1,
- "sbs": 1,
- "sc": 1,
- "sc.cn": 1,
- "sc.gov.br": 1,
- "sc.ke": 1,
- "sc.kr": 1,
- "sc.leg.br": 1,
- "sc.ls": 1,
- "sc.tz": 1,
- "sc.ug": 1,
- "sc.us": 1,
- "sca": 1,
- "scalebook.scw.cloud": 1,
- "scb": 1,
- "sch.ae": 1,
- "sch.id": 1,
- "sch.ir": 1,
- "sch.jo": 1,
- "sch.lk": 1,
- "sch.ly": 1,
- "sch.ng": 1,
- "sch.qa": 1,
- "sch.sa": 1,
- "sch.so": 1,
- "sch.ss": 1,
- "sch.tf": 1,
- "sch.wf": 1,
- "sch.zm": 1,
- "schaeffler": 1,
- "schmidt": 1,
- "schokokeks.net": 1,
- "scholarships": 1,
- "school": 1,
- "school.na": 1,
- "school.nz": 1,
- "school.za": 1,
- "schoolbus.jp": 1,
- "schools.nsw.edu.au": 1,
- "schule": 1,
- "schulplattform.de": 1,
- "schulserver.de": 1,
- "schwarz": 1,
- "sci.eg": 1,
- "science": 1,
- "scientist.aero": 1,
- "scot": 1,
- "scrapper-site.net": 1,
- "scrapping.cc": 1,
- "scrysec.com": 1,
- "sd": 1,
- "sd.cn": 1,
- "sd.us": 1,
- "sdn.gov.pl": 1,
- "sdscloud.pl": 1,
- "se": 1,
- "se.eu.org": 1,
- "se.gov.br": 1,
- "se.leg.br": 1,
- "se.net": 1,
- "search": 1,
- "seat": 1,
- "sebastopol.ua": 1,
- "sec.ps": 1,
- "secaas.hk": 1,
- "secret.jp": 1,
- "secure": 1,
- "security": 1,
- "securitytactics.com": 1,
- "seek": 1,
- "seg.br": 1,
- "seidat.net": 1,
- "seihi.nagasaki.jp": 1,
- "seika.kyoto.jp": 1,
- "seiro.niigata.jp": 1,
- "seirou.niigata.jp": 1,
- "seiyo.ehime.jp": 1,
- "sejny.pl": 1,
- "sekd1.beebyteapp.io": 1,
- "seki.gifu.jp": 1,
- "sekigahara.gifu.jp": 1,
- "sekikawa.niigata.jp": 1,
- "sel.no": 1,
- "selbu.no": 1,
- "select": 1,
- "selfip.biz": 1,
- "selfip.com": 1,
- "selfip.info": 1,
- "selfip.net": 1,
- "selfip.org": 1,
- "selje.no": 1,
- "seljord.no": 1,
- "sellfy.store": 1,
- "sells-for-less.com": 1,
- "sells-for-u.com": 1,
- "sells-it.net": 1,
- "sellsyourhome.org": 1,
- "semboku.akita.jp": 1,
- "semine.miyagi.jp": 1,
- "senasa.ar": 1,
- "sener": 1,
- "sennan.osaka.jp": 1,
- "senseering.net": 1,
- "seoul.kr": 1,
- "sera.hiroshima.jp": 1,
- "seranishi.hiroshima.jp": 1,
- "servebbs.com": 1,
- "servebbs.net": 1,
- "servebbs.org": 1,
- "servebeer.com": 1,
- "serveblog.net": 1,
- "servecounterstrike.com": 1,
- "serveexchange.com": 1,
- "serveftp.com": 1,
- "serveftp.net": 1,
- "serveftp.org": 1,
- "servegame.com": 1,
- "servegame.org": 1,
- "servehalflife.com": 1,
- "servehttp.com": 1,
- "servehumour.com": 1,
- "serveirc.com": 1,
- "serveminecraft.net": 1,
- "servemp3.com": 1,
- "servep2p.com": 1,
- "servepics.com": 1,
- "servequake.com": 1,
- "servers.run": 1,
- "servesarcasm.com": 1,
- "service.gov.scot": 1,
- "service.gov.uk": 1,
- "service.one": 1,
- "services": 1,
- "services.aero": 1,
- "setagaya.tokyo.jp": 1,
- "seto.aichi.jp": 1,
- "setouchi.okayama.jp": 1,
- "settsu.osaka.jp": 1,
- "sevastopol.ua": 1,
- "seven": 1,
- "sew": 1,
- "sex": 1,
- "sex.hu": 1,
- "sex.pl": 1,
- "sexy": 1,
- "sf.no": 1,
- "sfr": 1,
- "sg": 1,
- "sg-1.paas.massivegrid.net": 1,
- "sh": 1,
- "sh.cn": 1,
- "shacknet.nu": 1,
- "shakotan.hokkaido.jp": 1,
- "shangrila": 1,
- "shari.hokkaido.jp": 1,
- "sharp": 1,
- "shaw": 1,
- "shell": 1,
- "shia": 1,
- "shibata.miyagi.jp": 1,
- "shibata.niigata.jp": 1,
- "shibecha.hokkaido.jp": 1,
- "shibetsu.hokkaido.jp": 1,
- "shibukawa.gunma.jp": 1,
- "shibuya.tokyo.jp": 1,
- "shichikashuku.miyagi.jp": 1,
- "shichinohe.aomori.jp": 1,
- "shiftcrypto.dev": 1,
- "shiftcrypto.io": 1,
- "shiftedit.io": 1,
- "shiga.jp": 1,
- "shiiba.miyazaki.jp": 1,
- "shijonawate.osaka.jp": 1,
- "shika.ishikawa.jp": 1,
- "shikabe.hokkaido.jp": 1,
- "shikama.miyagi.jp": 1,
- "shikaoi.hokkaido.jp": 1,
- "shikatsu.aichi.jp": 1,
- "shiki.saitama.jp": 1,
- "shikokuchuo.ehime.jp": 1,
- "shiksha": 1,
- "shima.mie.jp": 1,
- "shimabara.nagasaki.jp": 1,
- "shimada.shizuoka.jp": 1,
- "shimamaki.hokkaido.jp": 1,
- "shimamoto.osaka.jp": 1,
- "shimane.jp": 1,
- "shimane.shimane.jp": 1,
- "shimizu.hokkaido.jp": 1,
- "shimizu.shizuoka.jp": 1,
- "shimoda.shizuoka.jp": 1,
- "shimodate.ibaraki.jp": 1,
- "shimofusa.chiba.jp": 1,
- "shimogo.fukushima.jp": 1,
- "shimoichi.nara.jp": 1,
- "shimoji.okinawa.jp": 1,
- "shimokawa.hokkaido.jp": 1,
- "shimokitayama.nara.jp": 1,
- "shimonita.gunma.jp": 1,
- "shimonoseki.yamaguchi.jp": 1,
- "shimosuwa.nagano.jp": 1,
- "shimotsuke.tochigi.jp": 1,
- "shimotsuma.ibaraki.jp": 1,
- "shinagawa.tokyo.jp": 1,
- "shinanomachi.nagano.jp": 1,
- "shingo.aomori.jp": 1,
- "shingu.fukuoka.jp": 1,
- "shingu.hyogo.jp": 1,
- "shingu.wakayama.jp": 1,
- "shinichi.hiroshima.jp": 1,
- "shinjo.nara.jp": 1,
- "shinjo.okayama.jp": 1,
- "shinjo.yamagata.jp": 1,
- "shinjuku.tokyo.jp": 1,
- "shinkamigoto.nagasaki.jp": 1,
- "shinonsen.hyogo.jp": 1,
- "shinshinotsu.hokkaido.jp": 1,
- "shinshiro.aichi.jp": 1,
- "shinto.gunma.jp": 1,
- "shintoku.hokkaido.jp": 1,
- "shintomi.miyazaki.jp": 1,
- "shinyoshitomi.fukuoka.jp": 1,
- "shiogama.miyagi.jp": 1,
- "shiojiri.nagano.jp": 1,
- "shioya.tochigi.jp": 1,
- "shirahama.wakayama.jp": 1,
- "shirakawa.fukushima.jp": 1,
- "shirakawa.gifu.jp": 1,
- "shirako.chiba.jp": 1,
- "shiranuka.hokkaido.jp": 1,
- "shiraoi.hokkaido.jp": 1,
- "shiraoka.saitama.jp": 1,
- "shirataka.yamagata.jp": 1,
- "shiriuchi.hokkaido.jp": 1,
- "shiroi.chiba.jp": 1,
- "shiroishi.miyagi.jp": 1,
- "shiroishi.saga.jp": 1,
- "shirosato.ibaraki.jp": 1,
- "shishikui.tokushima.jp": 1,
- "shiso.hyogo.jp": 1,
- "shisui.chiba.jp": 1,
- "shitara.aichi.jp": 1,
- "shiwa.iwate.jp": 1,
- "shizukuishi.iwate.jp": 1,
- "shizuoka.jp": 1,
- "shizuoka.shizuoka.jp": 1,
- "shobara.hiroshima.jp": 1,
- "shoes": 1,
- "shonai.fukuoka.jp": 1,
- "shonai.yamagata.jp": 1,
- "shoo.okayama.jp": 1,
- "shop": 1,
- "shop.brendly.rs": 1,
- "shop.ht": 1,
- "shop.hu": 1,
- "shop.pl": 1,
- "shop.ro": 1,
- "shop.th": 1,
- "shoparena.pl": 1,
- "shopitsite.com": 1,
- "shopping": 1,
- "shopselect.net": 1,
- "shopware.store": 1,
- "shouji": 1,
- "show": 1,
- "show.aero": 1,
- "showa.fukushima.jp": 1,
- "showa.gunma.jp": 1,
- "showa.yamanashi.jp": 1,
- "showtime": 1,
- "shunan.yamaguchi.jp": 1,
- "shw.io": 1,
- "si": 1,
- "si.eu.org": 1,
- "si.it": 1,
- "sic.it": 1,
- "sicilia.it": 1,
- "sicily.it": 1,
- "siellak.no": 1,
- "siena.it": 1,
- "sigdal.no": 1,
- "siiites.com": 1,
- "siljan.no": 1,
- "silk": 1,
- "simple-url.com": 1,
- "simplesite.com": 1,
- "simplesite.com.br": 1,
- "simplesite.gr": 1,
- "simplesite.pl": 1,
- "sina": 1,
- "sinaapp.com": 1,
- "singles": 1,
- "siracusa.it": 1,
- "sirdal.no": 1,
- "site": 1,
- "site.tb-hosting.com": 1,
- "site.transip.me": 1,
- "siteleaf.net": 1,
- "sites.static.land": 1,
- "sj": 1,
- "sjc.br": 1,
- "sk": 1,
- "sk.ca": 1,
- "sk.eu.org": 1,
- "skanit.no": 1,
- "skanland.no": 1,
- "skaun.no": 1,
- "skedsmo.no": 1,
- "skedsmokorset.no": 1,
- "ski": 1,
- "ski.no": 1,
- "skien.no": 1,
- "skierva.no": 1,
- "skiervá.no": 1,
- "skin": 1,
- "skiptvet.no": 1,
- "skjak.no": 1,
- "skjervoy.no": 1,
- "skjervøy.no": 1,
- "skjåk.no": 1,
- "sklep.pl": 1,
- "sko.gov.pl": 1,
- "skoczow.pl": 1,
- "skodje.no": 1,
- "skr.jp": 1,
- "sky": 1,
- "skydiving.aero": 1,
- "skygearapp.com": 1,
- "skype": 1,
- "skánit.no": 1,
- "skånland.no": 1,
- "sl": 1,
- "slask.pl": 1,
- "slattum.no": 1,
- "sld.do": 1,
- "sld.pa": 1,
- "slg.br": 1,
- "sling": 1,
- "slupsk.pl": 1,
- "slz.br": 1,
- "sm": 1,
- "sm.ua": 1,
- "small-web.org": 1,
- "smart": 1,
- "smartlabeling.scw.cloud": 1,
- "smile": 1,
- "smola.no": 1,
- "smushcdn.com": 1,
- "smøla.no": 1,
- "sn": 1,
- "sn.cn": 1,
- "snaase.no": 1,
- "snasa.no": 1,
- "sncf": 1,
- "snillfjord.no": 1,
- "snoasa.no": 1,
- "snowflake.app": 1,
- "snåase.no": 1,
- "snåsa.no": 1,
- "so": 1,
- "so.gov.pl": 1,
- "so.it": 1,
- "sobetsu.hokkaido.jp": 1,
- "soc.dz": 1,
- "soc.lk": 1,
- "soc.srcf.net": 1,
- "soccer": 1,
- "sochi.su": 1,
- "social": 1,
- "soctrang.vn": 1,
- "sodegaura.chiba.jp": 1,
- "soeda.fukuoka.jp": 1,
- "softbank": 1,
- "software": 1,
- "software.aero": 1,
- "sogndal.no": 1,
- "sogne.no": 1,
- "sohu": 1,
- "soja.okayama.jp": 1,
- "soka.saitama.jp": 1,
- "sokndal.no": 1,
- "sola.no": 1,
- "solar": 1,
- "solund.no": 1,
- "solutions": 1,
- "soma.fukushima.jp": 1,
- "somna.no": 1,
- "sondre-land.no": 1,
- "sondrio.it": 1,
- "song": 1,
- "songdalen.no": 1,
- "soni.nara.jp": 1,
- "sonla.vn": 1,
- "sony": 1,
- "soo.kagoshima.jp": 1,
- "sopot.pl": 1,
- "sor-aurdal.no": 1,
- "sor-fron.no": 1,
- "sor-odal.no": 1,
- "sor-varanger.no": 1,
- "sorfold.no": 1,
- "sorocaba.br": 1,
- "sorreisa.no": 1,
- "sortland.no": 1,
- "sorum.no": 1,
- "sos.pl": 1,
- "sosa.chiba.jp": 1,
- "sosnowiec.pl": 1,
- "soundcast.me": 1,
- "sowa.ibaraki.jp": 1,
- "soy": 1,
- "sp.gov.br": 1,
- "sp.it": 1,
- "sp.leg.br": 1,
- "spa": 1,
- "space": 1,
- "space-to-rent.com": 1,
- "spacekit.io": 1,
- "spb.ru": 1,
- "spb.su": 1,
- "spdns.de": 1,
- "spdns.eu": 1,
- "spdns.org": 1,
- "sphinx.mythic-beasts.com": 1,
- "spjelkavik.no": 1,
- "sport": 1,
- "sport.hu": 1,
- "spot": 1,
- "spydeberg.no": 1,
- "square7.ch": 1,
- "square7.de": 1,
- "square7.net": 1,
- "squares.net": 1,
- "sr": 1,
- "sr.gov.pl": 1,
- "sr.it": 1,
- "srht.site": 1,
- "srl": 1,
- "srv.br": 1,
- "ss": 1,
- "ss.it": 1,
- "ssl.origin.cdn77-secure.org": 1,
- "st": 1,
- "st.no": 1,
- "staba.jp": 1,
- "stackhero-network.com": 1,
- "stada": 1,
- "stage.nodeart.io": 1,
- "staging.onred.one": 1,
- "stalowa-wola.pl": 1,
- "stange.no": 1,
- "staples": 1,
- "star": 1,
- "starachowice.pl": 1,
- "stargard.pl": 1,
- "starostwo.gov.pl": 1,
- "stat.no": 1,
- "statebank": 1,
- "statefarm": 1,
- "stathelle.no": 1,
- "static-access.net": 1,
- "static.land": 1,
- "static.observableusercontent.com": 1,
- "stavanger.no": 1,
- "stavern.no": 1,
- "stc": 1,
- "stcgroup": 1,
- "steigen.no": 1,
- "steinkjer.no": 1,
- "sth.ac.at": 1,
- "stjordal.no": 1,
- "stjordalshalsen.no": 1,
- "stjørdal.no": 1,
- "stjørdalshalsen.no": 1,
- "stockholm": 1,
- "stokke.no": 1,
- "stor-elvdal.no": 1,
- "storage": 1,
- "storage.yandexcloud.net": 1,
- "stord.no": 1,
- "stordal.no": 1,
- "store": 1,
- "store.bb": 1,
- "store.dk": 1,
- "store.nf": 1,
- "store.ro": 1,
- "store.st": 1,
- "store.ve": 1,
- "storebase.store": 1,
- "storfjord.no": 1,
- "storipress.app": 1,
- "storj.farm": 1,
- "strand.no": 1,
- "stranda.no": 1,
- "stream": 1,
- "streamlit.app": 1,
- "streamlitapp.com": 1,
- "stripper.jp": 1,
- "stryn.no": 1,
- "student.aero": 1,
- "studio": 1,
- "study": 1,
- "stuff-4-sale.org": 1,
- "stuff-4-sale.us": 1,
- "stufftoread.com": 1,
- "style": 1,
- "su": 1,
- "su.paba.se": 1,
- "sub.jp": 1,
- "sucks": 1,
- "sue.fukuoka.jp": 1,
- "suedtirol.it": 1,
- "suginami.tokyo.jp": 1,
- "sugito.saitama.jp": 1,
- "suifu.ibaraki.jp": 1,
- "suita.osaka.jp": 1,
- "sukagawa.fukushima.jp": 1,
- "sukumo.kochi.jp": 1,
- "sula.no": 1,
- "suldal.no": 1,
- "suli.hu": 1,
- "sumida.tokyo.jp": 1,
- "sumita.iwate.jp": 1,
- "sumomo.ne.jp": 1,
- "sumoto.hyogo.jp": 1,
- "sumoto.kumamoto.jp": 1,
- "sumy.ua": 1,
- "sunagawa.hokkaido.jp": 1,
- "sund.no": 1,
- "sunndal.no": 1,
- "sunnyday.jp": 1,
- "supabase.co": 1,
- "supabase.in": 1,
- "supabase.net": 1,
- "supersale.jp": 1,
- "supplies": 1,
- "supply": 1,
- "support": 1,
- "surf": 1,
- "surgery": 1,
- "surnadal.no": 1,
- "susaki.kochi.jp": 1,
- "susono.shizuoka.jp": 1,
- "suwa.nagano.jp": 1,
- "suwalki.pl": 1,
- "suzaka.nagano.jp": 1,
- "suzu.ishikawa.jp": 1,
- "suzuka.mie.jp": 1,
- "suzuki": 1,
- "sv": 1,
- "sv.it": 1,
- "svalbard.no": 1,
- "sveio.no": 1,
- "svelvik.no": 1,
- "svn-repos.de": 1,
- "swatch": 1,
- "sweetpepper.org": 1,
- "swidnica.pl": 1,
- "swidnik.pl": 1,
- "swiebodzin.pl": 1,
- "swinoujscie.pl": 1,
- "swiss": 1,
- "sx": 1,
- "sx.cn": 1,
- "sy": 1,
- "sydney": 1,
- "sykkylven.no": 1,
- "syncloud.it": 1,
- "syno-ds.de": 1,
- "synology-diskstation.de": 1,
- "synology-ds.de": 1,
- "synology.me": 1,
- "systems": 1,
- "sytes.net": 1,
- "sz": 1,
- "szczecin.pl": 1,
- "szczytno.pl": 1,
- "szex.hu": 1,
- "szkola.pl": 1,
- "sálat.no": 1,
- "sálát.no": 1,
- "søgne.no": 1,
- "sømna.no": 1,
- "søndre-land.no": 1,
- "sør-aurdal.no": 1,
- "sør-fron.no": 1,
- "sør-odal.no": 1,
- "sør-varanger.no": 1,
- "sørfold.no": 1,
- "sørreisa.no": 1,
- "sørum.no": 1,
- "südtirol.it": 1,
- "t.bg": 1,
- "t.se": 1,
- "t3l3p0rt.net": 1,
- "ta.it": 1,
- "taa.it": 1,
- "tab": 1,
- "tabayama.yamanashi.jp": 1,
- "tabitorder.co.il": 1,
- "tabuse.yamaguchi.jp": 1,
- "tachiarai.fukuoka.jp": 1,
- "tachikawa.tokyo.jp": 1,
- "tadaoka.osaka.jp": 1,
- "tado.mie.jp": 1,
- "tadotsu.kagawa.jp": 1,
- "tagajo.miyagi.jp": 1,
- "tagami.niigata.jp": 1,
- "tagawa.fukuoka.jp": 1,
- "tahara.aichi.jp": 1,
- "taifun-dns.de": 1,
- "taiji.wakayama.jp": 1,
- "taiki.hokkaido.jp": 1,
- "taiki.mie.jp": 1,
- "tainai.niigata.jp": 1,
- "taipei": 1,
- "taira.toyama.jp": 1,
- "taishi.hyogo.jp": 1,
- "taishi.osaka.jp": 1,
- "taishin.fukushima.jp": 1,
- "taito.tokyo.jp": 1,
- "taiwa.miyagi.jp": 1,
- "tajimi.gifu.jp": 1,
- "tajiri.osaka.jp": 1,
- "taka.hyogo.jp": 1,
- "takagi.nagano.jp": 1,
- "takahagi.ibaraki.jp": 1,
- "takahama.aichi.jp": 1,
- "takahama.fukui.jp": 1,
- "takaharu.miyazaki.jp": 1,
- "takahashi.okayama.jp": 1,
- "takahata.yamagata.jp": 1,
- "takaishi.osaka.jp": 1,
- "takamatsu.kagawa.jp": 1,
- "takamori.kumamoto.jp": 1,
- "takamori.nagano.jp": 1,
- "takanabe.miyazaki.jp": 1,
- "takanezawa.tochigi.jp": 1,
- "takaoka.toyama.jp": 1,
- "takarazuka.hyogo.jp": 1,
- "takasago.hyogo.jp": 1,
- "takasaki.gunma.jp": 1,
- "takashima.shiga.jp": 1,
- "takasu.hokkaido.jp": 1,
- "takata.fukuoka.jp": 1,
- "takatori.nara.jp": 1,
- "takatsuki.osaka.jp": 1,
- "takatsuki.shiga.jp": 1,
- "takayama.gifu.jp": 1,
- "takayama.gunma.jp": 1,
- "takayama.nagano.jp": 1,
- "takazaki.miyazaki.jp": 1,
- "takehara.hiroshima.jp": 1,
- "taketa.oita.jp": 1,
- "taketomi.okinawa.jp": 1,
- "taki.mie.jp": 1,
- "takikawa.hokkaido.jp": 1,
- "takino.hyogo.jp": 1,
- "takinoue.hokkaido.jp": 1,
- "takko.aomori.jp": 1,
- "tako.chiba.jp": 1,
- "taku.saga.jp": 1,
- "talk": 1,
- "tama.tokyo.jp": 1,
- "tamakawa.fukushima.jp": 1,
- "tamaki.mie.jp": 1,
- "tamamura.gunma.jp": 1,
- "tamano.okayama.jp": 1,
- "tamatsukuri.ibaraki.jp": 1,
- "tamayu.shimane.jp": 1,
- "tamba.hyogo.jp": 1,
- "tana.no": 1,
- "tanabe.kyoto.jp": 1,
- "tanabe.wakayama.jp": 1,
- "tanagura.fukushima.jp": 1,
- "tananger.no": 1,
- "tank.jp": 1,
- "tanohata.iwate.jp": 1,
- "taobao": 1,
- "tara.saga.jp": 1,
- "tarama.okinawa.jp": 1,
- "taranto.it": 1,
- "target": 1,
- "targi.pl": 1,
- "tarnobrzeg.pl": 1,
- "tarui.gifu.jp": 1,
- "tarumizu.kagoshima.jp": 1,
- "tas.au": 1,
- "tas.edu.au": 1,
- "tas.gov.au": 1,
- "tashkent.su": 1,
- "tatamotors": 1,
- "tatar": 1,
- "tatebayashi.gunma.jp": 1,
- "tateshina.nagano.jp": 1,
- "tateyama.chiba.jp": 1,
- "tateyama.toyama.jp": 1,
- "tatsuno.hyogo.jp": 1,
- "tatsuno.nagano.jp": 1,
- "tattoo": 1,
- "tawaramoto.nara.jp": 1,
- "tax": 1,
- "taxi": 1,
- "taxi.br": 1,
- "tayninh.vn": 1,
- "tc": 1,
- "tc.br": 1,
- "tci": 1,
- "tcp4.me": 1,
- "td": 1,
- "tdk": 1,
- "te.it": 1,
- "te.ua": 1,
- "teaches-yoga.com": 1,
- "team": 1,
- "tec.br": 1,
- "tec.mi.us": 1,
- "tec.ve": 1,
- "tech": 1,
- "tech.orange": 1,
- "technology": 1,
- "tecnologia.bo": 1,
- "tel": 1,
- "tel.tr": 1,
- "tele.amune.org": 1,
- "telebit.app": 1,
- "telebit.io": 1,
- "temasek": 1,
- "temp-dns.com": 1,
- "tempio-olbia.it": 1,
- "tempioolbia.it": 1,
- "tempurl.host": 1,
- "tendo.yamagata.jp": 1,
- "tenei.fukushima.jp": 1,
- "tenkawa.nara.jp": 1,
- "tennis": 1,
- "tenri.nara.jp": 1,
- "teo.br": 1,
- "teramo.it": 1,
- "termez.su": 1,
- "terni.it": 1,
- "ternopil.ua": 1,
- "teshikaga.hokkaido.jp": 1,
- "test-iserv.de": 1,
- "test.ru": 1,
- "test.tj": 1,
- "teva": 1,
- "tf": 1,
- "tg": 1,
- "tgory.pl": 1,
- "th": 1,
- "thaibinh.vn": 1,
- "thainguyen.vn": 1,
- "thanhhoa.vn": 1,
- "thanhphohochiminh.vn": 1,
- "thd": 1,
- "the.br": 1,
- "theater": 1,
- "theatre": 1,
- "theshop.jp": 1,
- "theworkpc.com": 1,
- "thick.jp": 1,
- "thingdustdata.com": 1,
- "thruhere.net": 1,
- "thuathienhue.vn": 1,
- "tiaa": 1,
- "tickets": 1,
- "tickets.io": 1,
- "tienda": 1,
- "tiengiang.vn": 1,
- "time.no": 1,
- "tingvoll.no": 1,
- "tinn.no": 1,
- "tips": 1,
- "tires": 1,
- "tirol": 1,
- "tj": 1,
- "tj.cn": 1,
- "tjeldsund.no": 1,
- "tjmaxx": 1,
- "tjome.no": 1,
- "tjx": 1,
- "tjøme.no": 1,
- "tk": 1,
- "tkmaxx": 1,
- "tksat.bo": 1,
- "tl": 1,
- "tlon.network": 1,
- "tm": 1,
- "tm.cy": 1,
- "tm.dz": 1,
- "tm.fr": 1,
- "tm.hu": 1,
- "tm.km": 1,
- "tm.mc": 1,
- "tm.mg": 1,
- "tm.no": 1,
- "tm.pl": 1,
- "tm.ro": 1,
- "tm.se": 1,
- "tm.za": 1,
- "tmall": 1,
- "tmp.br": 1,
- "tn": 1,
- "tn.it": 1,
- "tn.oxa.cloud": 1,
- "tn.us": 1,
- "to": 1,
- "to.gov.br": 1,
- "to.gt": 1,
- "to.it": 1,
- "to.leg.br": 1,
- "to.md": 1,
- "toba.mie.jp": 1,
- "tobe.ehime.jp": 1,
- "tobetsu.hokkaido.jp": 1,
- "tobishima.aichi.jp": 1,
- "tochigi.jp": 1,
- "tochigi.tochigi.jp": 1,
- "tochio.niigata.jp": 1,
- "toda.saitama.jp": 1,
- "today": 1,
- "toei.aichi.jp": 1,
- "toga.toyama.jp": 1,
- "togakushi.nagano.jp": 1,
- "togane.chiba.jp": 1,
- "togitsu.nagasaki.jp": 1,
- "togliatti.su": 1,
- "togo.aichi.jp": 1,
- "togura.nagano.jp": 1,
- "tohma.hokkaido.jp": 1,
- "tohnosho.chiba.jp": 1,
- "toho.fukuoka.jp": 1,
- "tokai.aichi.jp": 1,
- "tokai.ibaraki.jp": 1,
- "tokamachi.niigata.jp": 1,
- "tokashiki.okinawa.jp": 1,
- "toki.gifu.jp": 1,
- "tokigawa.saitama.jp": 1,
- "tokke.no": 1,
- "tokoname.aichi.jp": 1,
- "tokorozawa.saitama.jp": 1,
- "tokushima.jp": 1,
- "tokushima.tokushima.jp": 1,
- "tokuyama.yamaguchi.jp": 1,
- "tokyo": 1,
- "tokyo.jp": 1,
- "tolga.no": 1,
- "tomakomai.hokkaido.jp": 1,
- "tomari.hokkaido.jp": 1,
- "tome.miyagi.jp": 1,
- "tomi.nagano.jp": 1,
- "tomigusuku.okinawa.jp": 1,
- "tomika.gifu.jp": 1,
- "tomioka.gunma.jp": 1,
- "tomisato.chiba.jp": 1,
- "tomiya.miyagi.jp": 1,
- "tomobe.ibaraki.jp": 1,
- "tonaki.okinawa.jp": 1,
- "tonami.toyama.jp": 1,
- "tondabayashi.osaka.jp": 1,
- "tone.ibaraki.jp": 1,
- "tonkotsu.jp": 1,
- "tono.iwate.jp": 1,
- "tonosho.kagawa.jp": 1,
- "tonsberg.no": 1,
- "toolforge.org": 1,
- "tools": 1,
- "toon.ehime.jp": 1,
- "top": 1,
- "topaz.ne.jp": 1,
- "torahime.shiga.jp": 1,
- "toray": 1,
- "toride.ibaraki.jp": 1,
- "torino.it": 1,
- "torproject.net": 1,
- "torsken.no": 1,
- "tos.it": 1,
- "tosa.kochi.jp": 1,
- "tosashimizu.kochi.jp": 1,
- "toscana.it": 1,
- "toshiba": 1,
- "toshima.tokyo.jp": 1,
- "tosu.saga.jp": 1,
- "total": 1,
- "tottori.jp": 1,
- "tottori.tottori.jp": 1,
- "tourism.bj": 1,
- "tourism.pl": 1,
- "tourism.tn": 1,
- "tours": 1,
- "towada.aomori.jp": 1,
- "town": 1,
- "townnews-staging.com": 1,
- "toya.hokkaido.jp": 1,
- "toyako.hokkaido.jp": 1,
- "toyama.jp": 1,
- "toyama.toyama.jp": 1,
- "toyo.kochi.jp": 1,
- "toyoake.aichi.jp": 1,
- "toyohashi.aichi.jp": 1,
- "toyokawa.aichi.jp": 1,
- "toyonaka.osaka.jp": 1,
- "toyone.aichi.jp": 1,
- "toyono.osaka.jp": 1,
- "toyooka.hyogo.jp": 1,
- "toyosato.shiga.jp": 1,
- "toyota": 1,
- "toyota.aichi.jp": 1,
- "toyota.yamaguchi.jp": 1,
- "toyotomi.hokkaido.jp": 1,
- "toyotsu.fukuoka.jp": 1,
- "toyoura.hokkaido.jp": 1,
- "toys": 1,
- "tozawa.yamagata.jp": 1,
- "tozsde.hu": 1,
- "tp.it": 1,
- "tr": 1,
- "tr.eu.org": 1,
- "tr.it": 1,
- "tr.no": 1,
- "tra.kp": 1,
- "trade": 1,
- "trader.aero": 1,
- "trading": 1,
- "trading.aero": 1,
- "traeumtgerade.de": 1,
- "trafficplex.cloud": 1,
- "trainer.aero": 1,
- "training": 1,
- "trana.no": 1,
- "tranby.no": 1,
- "trani-andria-barletta.it": 1,
- "trani-barletta-andria.it": 1,
- "traniandriabarletta.it": 1,
- "tranibarlettaandria.it": 1,
- "tranoy.no": 1,
- "translate.goog": 1,
- "translated.page": 1,
- "transporte.bo": 1,
- "tranøy.no": 1,
- "trapani.it": 1,
- "travel": 1,
- "travel.in": 1,
- "travel.pl": 1,
- "travel.tt": 1,
- "travelers": 1,
- "travelersinsurance": 1,
- "travinh.vn": 1,
- "trd.br": 1,
- "trentin-sud-tirol.it": 1,
- "trentin-sudtirol.it": 1,
- "trentin-sued-tirol.it": 1,
- "trentin-suedtirol.it": 1,
- "trentin-süd-tirol.it": 1,
- "trentin-südtirol.it": 1,
- "trentino-a-adige.it": 1,
- "trentino-aadige.it": 1,
- "trentino-alto-adige.it": 1,
- "trentino-altoadige.it": 1,
- "trentino-s-tirol.it": 1,
- "trentino-stirol.it": 1,
- "trentino-sud-tirol.it": 1,
- "trentino-sudtirol.it": 1,
- "trentino-sued-tirol.it": 1,
- "trentino-suedtirol.it": 1,
- "trentino-süd-tirol.it": 1,
- "trentino-südtirol.it": 1,
- "trentino.it": 1,
- "trentinoa-adige.it": 1,
- "trentinoaadige.it": 1,
- "trentinoalto-adige.it": 1,
- "trentinoaltoadige.it": 1,
- "trentinos-tirol.it": 1,
- "trentinostirol.it": 1,
- "trentinosud-tirol.it": 1,
- "trentinosudtirol.it": 1,
- "trentinosued-tirol.it": 1,
- "trentinosuedtirol.it": 1,
- "trentinosüd-tirol.it": 1,
- "trentinosüdtirol.it": 1,
- "trentinsud-tirol.it": 1,
- "trentinsudtirol.it": 1,
- "trentinsued-tirol.it": 1,
- "trentinsuedtirol.it": 1,
- "trentinsüd-tirol.it": 1,
- "trentinsüdtirol.it": 1,
- "trento.it": 1,
- "treviso.it": 1,
- "trieste.it": 1,
- "troandin.no": 1,
- "trogstad.no": 1,
- "troitsk.su": 1,
- "tromsa.no": 1,
- "tromso.no": 1,
- "tromsø.no": 1,
- "trondheim.no": 1,
- "trust": 1,
- "trv": 1,
- "try-snowplow.com": 1,
- "trycloudflare.com": 1,
- "trysil.no": 1,
- "træna.no": 1,
- "trøgstad.no": 1,
- "ts.it": 1,
- "ts.net": 1,
- "tselinograd.su": 1,
- "tsk.tr": 1,
- "tsu.mie.jp": 1,
- "tsubame.niigata.jp": 1,
- "tsubata.ishikawa.jp": 1,
- "tsubetsu.hokkaido.jp": 1,
- "tsuchiura.ibaraki.jp": 1,
- "tsuga.tochigi.jp": 1,
- "tsugaru.aomori.jp": 1,
- "tsuiki.fukuoka.jp": 1,
- "tsukigata.hokkaido.jp": 1,
- "tsukiyono.gunma.jp": 1,
- "tsukuba.ibaraki.jp": 1,
- "tsukui.kanagawa.jp": 1,
- "tsukumi.oita.jp": 1,
- "tsumagoi.gunma.jp": 1,
- "tsunan.niigata.jp": 1,
- "tsuno.kochi.jp": 1,
- "tsuno.miyazaki.jp": 1,
- "tsuru.yamanashi.jp": 1,
- "tsuruga.fukui.jp": 1,
- "tsurugashima.saitama.jp": 1,
- "tsurugi.ishikawa.jp": 1,
- "tsuruoka.yamagata.jp": 1,
- "tsuruta.aomori.jp": 1,
- "tsushima.aichi.jp": 1,
- "tsushima.nagasaki.jp": 1,
- "tsuwano.shimane.jp": 1,
- "tsuyama.okayama.jp": 1,
- "tt": 1,
- "tt.im": 1,
- "tube": 1,
- "tui": 1,
- "tula.su": 1,
- "tuleap-partners.com": 1,
- "tunes": 1,
- "tunk.org": 1,
- "tur.ar": 1,
- "tur.br": 1,
- "turek.pl": 1,
- "turin.it": 1,
- "turystyka.pl": 1,
- "tuscany.it": 1,
- "tushu": 1,
- "tuva.su": 1,
- "tuxfamily.org": 1,
- "tuyenquang.vn": 1,
- "tv": 1,
- "tv.bb": 1,
- "tv.bo": 1,
- "tv.br": 1,
- "tv.im": 1,
- "tv.in": 1,
- "tv.it": 1,
- "tv.kg": 1,
- "tv.na": 1,
- "tv.sd": 1,
- "tv.tr": 1,
- "tv.tz": 1,
- "tvedestrand.no": 1,
- "tvs": 1,
- "tw": 1,
- "tw.cn": 1,
- "twmail.cc": 1,
- "twmail.net": 1,
- "twmail.org": 1,
- "tx.us": 1,
- "tychy.pl": 1,
- "tydal.no": 1,
- "tynset.no": 1,
- "typedream.app": 1,
- "tysfjord.no": 1,
- "tysnes.no": 1,
- "tysvar.no": 1,
- "tysvær.no": 1,
- "tz": 1,
- "tønsberg.no": 1,
- "u.bg": 1,
- "u.channelsdvr.net": 1,
- "u.se": 1,
- "u2-local.xnbay.com": 1,
- "u2.xnbay.com": 1,
- "ua": 1,
- "ua.rs": 1,
- "ubank": 1,
- "ube.yamaguchi.jp": 1,
- "uber.space": 1,
- "ubs": 1,
- "uchihara.ibaraki.jp": 1,
- "uchiko.ehime.jp": 1,
- "uchinada.ishikawa.jp": 1,
- "uchinomi.kagawa.jp": 1,
- "ud.it": 1,
- "uda.nara.jp": 1,
- "udi.br": 1,
- "udine.it": 1,
- "udono.mie.jp": 1,
- "ueda.nagano.jp": 1,
- "ueno.gunma.jp": 1,
- "uenohara.yamanashi.jp": 1,
- "ufcfan.org": 1,
- "ug": 1,
- "ug.gov.pl": 1,
- "ugim.gov.pl": 1,
- "uh-oh.jp": 1,
- "ui.nabu.casa": 1,
- "uji.kyoto.jp": 1,
- "ujiie.tochigi.jp": 1,
- "ujitawara.kyoto.jp": 1,
- "uk": 1,
- "uk.com": 1,
- "uk.eu.org": 1,
- "uk.in": 1,
- "uk.kg": 1,
- "uk.net": 1,
- "uk.oxa.cloud": 1,
- "uk.primetel.cloud": 1,
- "uk.reclaim.cloud": 1,
- "uk0.bigv.io": 1,
- "uki.kumamoto.jp": 1,
- "ukiha.fukuoka.jp": 1,
- "ullensaker.no": 1,
- "ullensvang.no": 1,
- "ulsan.kr": 1,
- "ulvik.no": 1,
- "um.gov.pl": 1,
- "umaji.kochi.jp": 1,
- "umb.it": 1,
- "umbria.it": 1,
- "umi.fukuoka.jp": 1,
- "umig.gov.pl": 1,
- "unazuki.toyama.jp": 1,
- "under.jp": 1,
- "undo.jp": 1,
- "uni5.net": 1,
- "unicloud.pl": 1,
- "unicom": 1,
- "union.aero": 1,
- "univ.bj": 1,
- "univ.sn": 1,
- "university": 1,
- "unjarga.no": 1,
- "unjárga.no": 1,
- "unnan.shimane.jp": 1,
- "uno": 1,
- "unusualperson.com": 1,
- "unzen.nagasaki.jp": 1,
- "uol": 1,
- "uonuma.niigata.jp": 1,
- "uozu.toyama.jp": 1,
- "up.in": 1,
- "upaas.kazteleport.kz": 1,
- "upli.io": 1,
- "upow.gov.pl": 1,
- "upper.jp": 1,
- "uppo.gov.pl": 1,
- "ups": 1,
- "urakawa.hokkaido.jp": 1,
- "urasoe.okinawa.jp": 1,
- "urausu.hokkaido.jp": 1,
- "urawa.saitama.jp": 1,
- "urayasu.chiba.jp": 1,
- "urbino-pesaro.it": 1,
- "urbinopesaro.it": 1,
- "ureshino.mie.jp": 1,
- "uri.arpa": 1,
- "url.tw": 1,
- "urn.arpa": 1,
- "urown.cloud": 1,
- "uruma.okinawa.jp": 1,
- "uryu.hokkaido.jp": 1,
- "us": 1,
- "us-1.evennode.com": 1,
- "us-2.evennode.com": 1,
- "us-3.evennode.com": 1,
- "us-4.evennode.com": 1,
- "us-east-1.amazonaws.com": 1,
- "us-east-1.elasticbeanstalk.com": 1,
- "us-east-2.elasticbeanstalk.com": 1,
- "us-gov-west-1.elasticbeanstalk.com": 1,
- "us-west-1.elasticbeanstalk.com": 1,
- "us-west-2.elasticbeanstalk.com": 1,
- "us.ax": 1,
- "us.com": 1,
- "us.eu.org": 1,
- "us.gov.pl": 1,
- "us.in": 1,
- "us.kg": 1,
- "us.na": 1,
- "us.ngrok.io": 1,
- "us.org": 1,
- "us.platform.sh": 1,
- "us.reclaim.cloud": 1,
- "usa.oita.jp": 1,
- "user.aseinet.ne.jp": 1,
- "user.party.eus": 1,
- "user.srcf.net": 1,
- "user.webaccel.jp": 1,
- "usercontent.jp": 1,
- "ushiku.ibaraki.jp": 1,
- "usr.cloud.muni.cz": 1,
- "ustka.pl": 1,
- "usui.fukuoka.jp": 1,
- "usuki.oita.jp": 1,
- "ut.us": 1,
- "utashinai.hokkaido.jp": 1,
- "utazas.hu": 1,
- "utazu.kagawa.jp": 1,
- "uto.kumamoto.jp": 1,
- "utsira.no": 1,
- "utsunomiya.tochigi.jp": 1,
- "utwente.io": 1,
- "uw.gov.pl": 1,
- "uwajima.ehime.jp": 1,
- "uwu.ai": 1,
- "uy": 1,
- "uy.com": 1,
- "uz": 1,
- "uz.ua": 1,
- "uzhgorod.ua": 1,
- "uzs.gov.pl": 1,
- "v-info.info": 1,
- "v.bg": 1,
- "v.ua": 1,
- "va": 1,
- "va.it": 1,
- "va.no": 1,
- "va.us": 1,
- "vaapste.no": 1,
- "vacations": 1,
- "vadso.no": 1,
- "vadsø.no": 1,
- "vaga.no": 1,
- "vagan.no": 1,
- "vagsoy.no": 1,
- "vaksdal.no": 1,
- "val-d-aosta.it": 1,
- "val-daosta.it": 1,
- "vald-aosta.it": 1,
- "valdaosta.it": 1,
- "valer.hedmark.no": 1,
- "valer.ostfold.no": 1,
- "valle-aosta.it": 1,
- "valle-d-aosta.it": 1,
- "valle-daosta.it": 1,
- "valle.no": 1,
- "valleaosta.it": 1,
- "valled-aosta.it": 1,
- "valledaosta.it": 1,
- "vallee-aoste.it": 1,
- "vallee-d-aoste.it": 1,
- "valleeaoste.it": 1,
- "valleedaoste.it": 1,
- "vallée-aoste.it": 1,
- "vallée-d-aoste.it": 1,
- "valléeaoste.it": 1,
- "valléedaoste.it": 1,
- "vana": 1,
- "vang.no": 1,
- "vanguard": 1,
- "vanylven.no": 1,
- "vao.it": 1,
- "vapor.cloud": 1,
- "vaporcloud.io": 1,
- "vardo.no": 1,
- "vardø.no": 1,
- "varese.it": 1,
- "varggat.no": 1,
- "varoy.no": 1,
- "vb.it": 1,
- "vc": 1,
- "vc.it": 1,
- "vda.it": 1,
- "ve": 1,
- "ve.it": 1,
- "vefsn.no": 1,
- "vega.no": 1,
- "vegarshei.no": 1,
- "vegas": 1,
- "vegårshei.no": 1,
- "velvet.jp": 1,
- "ven.it": 1,
- "veneto.it": 1,
- "venezia.it": 1,
- "venice.it": 1,
- "vennesla.no": 1,
- "ventures": 1,
- "verbania.it": 1,
- "vercel.app": 1,
- "vercel.dev": 1,
- "vercelli.it": 1,
- "verdal.no": 1,
- "verisign": 1,
- "vermögensberater": 1,
- "vermögensberatung": 1,
- "verona.it": 1,
- "verran.no": 1,
- "verse.jp": 1,
- "versicherung": 1,
- "versus.jp": 1,
- "vestby.no": 1,
- "vestnes.no": 1,
- "vestre-slidre.no": 1,
- "vestre-toten.no": 1,
- "vestvagoy.no": 1,
- "vestvågøy.no": 1,
- "vet": 1,
- "vet.br": 1,
- "veterinaire.fr": 1,
- "veterinaire.km": 1,
- "vevelstad.no": 1,
- "vf.no": 1,
- "vfs.cloud9.af-south-1.amazonaws.com": 1,
- "vfs.cloud9.ap-east-1.amazonaws.com": 1,
- "vfs.cloud9.ap-northeast-1.amazonaws.com": 1,
- "vfs.cloud9.ap-northeast-2.amazonaws.com": 1,
- "vfs.cloud9.ap-northeast-3.amazonaws.com": 1,
- "vfs.cloud9.ap-south-1.amazonaws.com": 1,
- "vfs.cloud9.ap-southeast-1.amazonaws.com": 1,
- "vfs.cloud9.ap-southeast-2.amazonaws.com": 1,
- "vfs.cloud9.ca-central-1.amazonaws.com": 1,
- "vfs.cloud9.eu-central-1.amazonaws.com": 1,
- "vfs.cloud9.eu-north-1.amazonaws.com": 1,
- "vfs.cloud9.eu-south-1.amazonaws.com": 1,
- "vfs.cloud9.eu-west-1.amazonaws.com": 1,
- "vfs.cloud9.eu-west-2.amazonaws.com": 1,
- "vfs.cloud9.eu-west-3.amazonaws.com": 1,
- "vfs.cloud9.me-south-1.amazonaws.com": 1,
- "vfs.cloud9.sa-east-1.amazonaws.com": 1,
- "vfs.cloud9.us-east-1.amazonaws.com": 1,
- "vfs.cloud9.us-east-2.amazonaws.com": 1,
- "vfs.cloud9.us-west-1.amazonaws.com": 1,
- "vfs.cloud9.us-west-2.amazonaws.com": 1,
- "vg": 1,
- "vgs.no": 1,
- "vi": 1,
- "vi.it": 1,
- "vi.us": 1,
- "viajes": 1,
- "vibo-valentia.it": 1,
- "vibovalentia.it": 1,
- "vic.au": 1,
- "vic.edu.au": 1,
- "vic.gov.au": 1,
- "vicenza.it": 1,
- "video": 1,
- "video.hu": 1,
- "vig": 1,
- "vik.no": 1,
- "viking": 1,
- "vikna.no": 1,
- "villas": 1,
- "vin": 1,
- "vindafjord.no": 1,
- "vinhlong.vn": 1,
- "vinhphuc.vn": 1,
- "vinnica.ua": 1,
- "vinnytsia.ua": 1,
- "vip": 1,
- "vip.jelastic.cloud": 1,
- "vipsinaapp.com": 1,
- "virgin": 1,
- "virtual-user.de": 1,
- "virtualserver.io": 1,
- "virtualuser.de": 1,
- "visa": 1,
- "vision": 1,
- "viterbo.it": 1,
- "viva": 1,
- "vivian.jp": 1,
- "vivo": 1,
- "vix.br": 1,
- "vlaanderen": 1,
- "vladikavkaz.ru": 1,
- "vladikavkaz.su": 1,
- "vladimir.ru": 1,
- "vladimir.su": 1,
- "vlog.br": 1,
- "vm.bytemark.co.uk": 1,
- "vn": 1,
- "vn.ua": 1,
- "voagat.no": 1,
- "vodka": 1,
- "volda.no": 1,
- "volkswagen": 1,
- "vologda.su": 1,
- "volvo": 1,
- "volyn.ua": 1,
- "voorloper.cloud": 1,
- "voss.no": 1,
- "vossevangen.no": 1,
- "vote": 1,
- "voting": 1,
- "voto": 1,
- "voyage": 1,
- "vp4.me": 1,
- "vpndns.net": 1,
- "vpnplus.to": 1,
- "vps-host.net": 1,
- "vps.mcdir.ru": 1,
- "vr.it": 1,
- "vs.it": 1,
- "vs.mythic-beasts.com": 1,
- "vt.it": 1,
- "vt.us": 1,
- "vu": 1,
- "vv.it": 1,
- "vxl.sh": 1,
- "várggát.no": 1,
- "vågan.no": 1,
- "vågsøy.no": 1,
- "vågå.no": 1,
- "våler.hedmark.no": 1,
- "våler.østfold.no": 1,
- "værøy.no": 1,
- "w.bg": 1,
- "w.se": 1,
- "wa.au": 1,
- "wa.edu.au": 1,
- "wa.gov.au": 1,
- "wa.us": 1,
- "wada.nagano.jp": 1,
- "wafflecell.com": 1,
- "wajiki.tokushima.jp": 1,
- "wajima.ishikawa.jp": 1,
- "wakasa.fukui.jp": 1,
- "wakasa.tottori.jp": 1,
- "wakayama.jp": 1,
- "wakayama.wakayama.jp": 1,
- "wake.okayama.jp": 1,
- "wakkanai.hokkaido.jp": 1,
- "wakuya.miyagi.jp": 1,
- "walbrzych.pl": 1,
- "wales": 1,
- "walmart": 1,
- "walter": 1,
- "wang": 1,
- "wanggou": 1,
- "wanouchi.gifu.jp": 1,
- "warabi.saitama.jp": 1,
- "warmia.pl": 1,
- "warszawa.pl": 1,
- "washtenaw.mi.us": 1,
- "wassamu.hokkaido.jp": 1,
- "watarai.mie.jp": 1,
- "watari.miyagi.jp": 1,
- "watch": 1,
- "watches": 1,
- "watson.jp": 1,
- "waw.pl": 1,
- "wazuka.kyoto.jp": 1,
- "we.bs": 1,
- "we.tc": 1,
- "weather": 1,
- "weatherchannel": 1,
- "web.app": 1,
- "web.bo": 1,
- "web.co": 1,
- "web.do": 1,
- "web.gu": 1,
- "web.id": 1,
- "web.in": 1,
- "web.lk": 1,
- "web.nf": 1,
- "web.ni": 1,
- "web.pk": 1,
- "web.tj": 1,
- "web.tr": 1,
- "web.ve": 1,
- "web.za": 1,
- "webcam": 1,
- "weber": 1,
- "webhop.biz": 1,
- "webhop.info": 1,
- "webhop.me": 1,
- "webhop.net": 1,
- "webhop.org": 1,
- "webhosting.be": 1,
- "weblike.jp": 1,
- "webredirect.org": 1,
- "website": 1,
- "website.yandexcloud.net": 1,
- "websozai.jp": 1,
- "webspace.rocks": 1,
- "webthings.io": 1,
- "webview-assets.aws-cloud9.af-south-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-east-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-south-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com": 1,
- "webview-assets.aws-cloud9.ca-central-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-central-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-north-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-south-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-west-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-west-2.amazonaws.com": 1,
- "webview-assets.aws-cloud9.eu-west-3.amazonaws.com": 1,
- "webview-assets.aws-cloud9.me-south-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.sa-east-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.us-east-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.us-east-2.amazonaws.com": 1,
- "webview-assets.aws-cloud9.us-west-1.amazonaws.com": 1,
- "webview-assets.aws-cloud9.us-west-2.amazonaws.com": 1,
- "webview-assets.cloud9.af-south-1.amazonaws.com": 1,
- "webview-assets.cloud9.ap-east-1.amazonaws.com": 1,
- "webview-assets.cloud9.ap-northeast-1.amazonaws.com": 1,
- "webview-assets.cloud9.ap-northeast-2.amazonaws.com": 1,
- "webview-assets.cloud9.ap-northeast-3.amazonaws.com": 1,
- "webview-assets.cloud9.ap-south-1.amazonaws.com": 1,
- "webview-assets.cloud9.ap-southeast-1.amazonaws.com": 1,
- "webview-assets.cloud9.ap-southeast-2.amazonaws.com": 1,
- "webview-assets.cloud9.ca-central-1.amazonaws.com": 1,
- "webview-assets.cloud9.eu-central-1.amazonaws.com": 1,
- "webview-assets.cloud9.eu-north-1.amazonaws.com": 1,
- "webview-assets.cloud9.eu-south-1.amazonaws.com": 1,
- "webview-assets.cloud9.eu-west-1.amazonaws.com": 1,
- "webview-assets.cloud9.eu-west-2.amazonaws.com": 1,
- "webview-assets.cloud9.eu-west-3.amazonaws.com": 1,
- "webview-assets.cloud9.me-south-1.amazonaws.com": 1,
- "webview-assets.cloud9.sa-east-1.amazonaws.com": 1,
- "webview-assets.cloud9.us-east-1.amazonaws.com": 1,
- "webview-assets.cloud9.us-east-2.amazonaws.com": 1,
- "webview-assets.cloud9.us-west-1.amazonaws.com": 1,
- "webview-assets.cloud9.us-west-2.amazonaws.com": 1,
- "wedding": 1,
- "wedeploy.io": 1,
- "wedeploy.me": 1,
- "wedeploy.sh": 1,
- "weeklylottery.org.uk": 1,
- "wegrow.pl": 1,
- "weibo": 1,
- "weir": 1,
- "wellbeingzone.co.uk": 1,
- "wellbeingzone.eu": 1,
- "west1-us.cloudjiffy.net": 1,
- "westeurope.azurestaticapps.net": 1,
- "westus2.azurestaticapps.net": 1,
- "wf": 1,
- "whitesnow.jp": 1,
- "whm.fr-par.scw.cloud": 1,
- "whm.nl-ams.scw.cloud": 1,
- "whoswho": 1,
- "wi.us": 1,
- "wielun.pl": 1,
- "wien": 1,
- "wien.funkfeuer.at": 1,
- "wif.gov.pl": 1,
- "wiih.gov.pl": 1,
- "wiki": 1,
- "wiki.bo": 1,
- "wiki.br": 1,
- "williamhill": 1,
- "win": 1,
- "winb.gov.pl": 1,
- "windows": 1,
- "wine": 1,
- "winners": 1,
- "wios.gov.pl": 1,
- "witd.gov.pl": 1,
- "withgoogle.com": 1,
- "withyoutube.com": 1,
- "wiw.gov.pl": 1,
- "wixsite.com": 1,
- "wkz.gov.pl": 1,
- "wlocl.pl": 1,
- "wloclawek.pl": 1,
- "wmcloud.org": 1,
- "wme": 1,
- "wmflabs.org": 1,
- "wnext.app": 1,
- "wodzislaw.pl": 1,
- "wolomin.pl": 1,
- "wolterskluwer": 1,
- "woltlab-demo.com": 1,
- "woodside": 1,
- "work": 1,
- "workers.dev": 1,
- "workinggroup.aero": 1,
- "workisboring.com": 1,
- "works": 1,
- "works.aero": 1,
- "world": 1,
- "worse-than.tv": 1,
- "wow": 1,
- "wpdevcloud.com": 1,
- "wpenginepowered.com": 1,
- "wphostedmail.com": 1,
- "wpmucdn.com": 1,
- "wpmudev.host": 1,
- "writesthisblog.com": 1,
- "wroc.pl": 1,
- "wroclaw.pl": 1,
- "ws": 1,
- "ws.na": 1,
- "wsa.gov.pl": 1,
- "wskr.gov.pl": 1,
- "wsse.gov.pl": 1,
- "wtc": 1,
- "wtf": 1,
- "wuoz.gov.pl": 1,
- "wv.us": 1,
- "www.ro": 1,
- "wy.us": 1,
- "wzmiuw.gov.pl": 1,
- "x.bg": 1,
- "x.mythic-beasts.com": 1,
- "x.se": 1,
- "x0.com": 1,
- "x0.to": 1,
- "x443.pw": 1,
- "xbox": 1,
- "xen.prgmr.com": 1,
- "xerox": 1,
- "xfinity": 1,
- "xihuan": 1,
- "xii.jp": 1,
- "xin": 1,
- "xj.cn": 1,
- "xnbay.com": 1,
- "xs4all.space": 1,
- "xx.gl": 1,
- "xxx": 1,
- "xy.ax": 1,
- "xyz": 1,
- "xz.cn": 1,
- "y.bg": 1,
- "y.se": 1,
- "yabu.hyogo.jp": 1,
- "yabuki.fukushima.jp": 1,
- "yachimata.chiba.jp": 1,
- "yachiyo.chiba.jp": 1,
- "yachiyo.ibaraki.jp": 1,
- "yachts": 1,
- "yaese.okinawa.jp": 1,
- "yahaba.iwate.jp": 1,
- "yahiko.niigata.jp": 1,
- "yahoo": 1,
- "yaita.tochigi.jp": 1,
- "yaizu.shizuoka.jp": 1,
- "yakage.okayama.jp": 1,
- "yakumo.hokkaido.jp": 1,
- "yakumo.shimane.jp": 1,
- "yali.mythic-beasts.com": 1,
- "yalta.ua": 1,
- "yamada.fukuoka.jp": 1,
- "yamada.iwate.jp": 1,
- "yamada.toyama.jp": 1,
- "yamaga.kumamoto.jp": 1,
- "yamagata.gifu.jp": 1,
- "yamagata.ibaraki.jp": 1,
- "yamagata.jp": 1,
- "yamagata.nagano.jp": 1,
- "yamagata.yamagata.jp": 1,
- "yamaguchi.jp": 1,
- "yamakita.kanagawa.jp": 1,
- "yamamoto.miyagi.jp": 1,
- "yamanakako.yamanashi.jp": 1,
- "yamanashi.jp": 1,
- "yamanashi.yamanashi.jp": 1,
- "yamanobe.yamagata.jp": 1,
- "yamanouchi.nagano.jp": 1,
- "yamashina.kyoto.jp": 1,
- "yamato.fukushima.jp": 1,
- "yamato.kanagawa.jp": 1,
- "yamato.kumamoto.jp": 1,
- "yamatokoriyama.nara.jp": 1,
- "yamatotakada.nara.jp": 1,
- "yamatsuri.fukushima.jp": 1,
- "yamaxun": 1,
- "yamazoe.nara.jp": 1,
- "yame.fukuoka.jp": 1,
- "yanagawa.fukuoka.jp": 1,
- "yanaizu.fukushima.jp": 1,
- "yandex": 1,
- "yandexcloud.net": 1,
- "yao.osaka.jp": 1,
- "yaotsu.gifu.jp": 1,
- "yasaka.nagano.jp": 1,
- "yashio.saitama.jp": 1,
- "yashiro.hyogo.jp": 1,
- "yasu.shiga.jp": 1,
- "yasuda.kochi.jp": 1,
- "yasugi.shimane.jp": 1,
- "yasuoka.nagano.jp": 1,
- "yatomi.aichi.jp": 1,
- "yatsuka.shimane.jp": 1,
- "yatsushiro.kumamoto.jp": 1,
- "yawara.ibaraki.jp": 1,
- "yawata.kyoto.jp": 1,
- "yawatahama.ehime.jp": 1,
- "yazu.tottori.jp": 1,
- "ybo.faith": 1,
- "ybo.party": 1,
- "ybo.review": 1,
- "ybo.science": 1,
- "ybo.trade": 1,
- "ye": 1,
- "yenbai.vn": 1,
- "yk.ca": 1,
- "yn.cn": 1,
- "ynh.fr": 1,
- "yodobashi": 1,
- "yoga": 1,
- "yoichi.hokkaido.jp": 1,
- "yoita.niigata.jp": 1,
- "yoka.hyogo.jp": 1,
- "yokaichiba.chiba.jp": 1,
- "yokawa.hyogo.jp": 1,
- "yokkaichi.mie.jp": 1,
- "yokohama": 1,
- "yokoshibahikari.chiba.jp": 1,
- "yokosuka.kanagawa.jp": 1,
- "yokote.akita.jp": 1,
- "yokoze.saitama.jp": 1,
- "yolasite.com": 1,
- "yombo.me": 1,
- "yomitan.okinawa.jp": 1,
- "yonabaru.okinawa.jp": 1,
- "yonago.tottori.jp": 1,
- "yonaguni.okinawa.jp": 1,
- "yonezawa.yamagata.jp": 1,
- "yono.saitama.jp": 1,
- "yorii.saitama.jp": 1,
- "yoro.gifu.jp": 1,
- "yoshida.saitama.jp": 1,
- "yoshida.shizuoka.jp": 1,
- "yoshikawa.saitama.jp": 1,
- "yoshimi.saitama.jp": 1,
- "yoshino.nara.jp": 1,
- "yoshinogari.saga.jp": 1,
- "yoshioka.gunma.jp": 1,
- "yotsukaido.chiba.jp": 1,
- "you": 1,
- "youtube": 1,
- "yt": 1,
- "yuasa.wakayama.jp": 1,
- "yufu.oita.jp": 1,
- "yugawa.fukushima.jp": 1,
- "yugawara.kanagawa.jp": 1,
- "yuki.ibaraki.jp": 1,
- "yukuhashi.fukuoka.jp": 1,
- "yun": 1,
- "yura.wakayama.jp": 1,
- "yurihonjo.akita.jp": 1,
- "yusuhara.kochi.jp": 1,
- "yusui.kagoshima.jp": 1,
- "yuu.yamaguchi.jp": 1,
- "yuza.yamagata.jp": 1,
- "yuzawa.niigata.jp": 1,
- "z.bg": 1,
- "z.se": 1,
- "za.bz": 1,
- "za.com": 1,
- "za.net": 1,
- "za.org": 1,
- "zachpomor.pl": 1,
- "zagan.pl": 1,
- "zakopane.pl": 1,
- "zama.kanagawa.jp": 1,
- "zamami.okinawa.jp": 1,
- "zao.miyagi.jp": 1,
- "zaporizhzhe.ua": 1,
- "zaporizhzhia.ua": 1,
- "zappos": 1,
- "zapto.org": 1,
- "zapto.xyz": 1,
- "zara": 1,
- "zarow.pl": 1,
- "zentsuji.kagawa.jp": 1,
- "zero": 1,
- "zgora.pl": 1,
- "zgorzelec.pl": 1,
- "zhitomir.ua": 1,
- "zhytomyr.ua": 1,
- "zip": 1,
- "zj.cn": 1,
- "zlg.br": 1,
- "zm": 1,
- "zombie.jp": 1,
- "zone": 1,
- "zp.gov.pl": 1,
- "zp.ua": 1,
- "zpisdn.gov.pl": 1,
- "zt.ua": 1,
- "zuerich": 1,
- "zushi.kanagawa.jp": 1,
- "zw": 1,
- "ákŋoluokta.no": 1,
- "álaheadju.no": 1,
- "áltá.no": 1,
- "åfjord.no": 1,
- "åkrehamn.no": 1,
- "ål.no": 1,
- "ålesund.no": 1,
- "ålgård.no": 1,
- "åmli.no": 1,
- "åmot.no": 1,
- "årdal.no": 1,
- "ås.no": 1,
- "åseral.no": 1,
- "åsnes.no": 1,
- "øksnes.no": 1,
- "ørland.no": 1,
- "ørskog.no": 1,
- "ørsta.no": 1,
- "østre-toten.no": 1,
- "øvre-eiker.no": 1,
- "øyer.no": 1,
- "øygarden.no": 1,
- "øystre-slidre.no": 1,
- "čáhcesuolo.no": 1,
- "ελ": 1,
- "ευ": 1,
- "ак.срб": 1,
- "бг": 1,
- "бел": 1,
- "биз.рус": 1,
- "дети": 1,
- "ею": 1,
- "католик": 1,
- "ком": 1,
- "ком.рус": 1,
- "крым.рус": 1,
- "мир.рус": 1,
- "мкд": 1,
- "мон": 1,
- "москва": 1,
- "мск.рус": 1,
- "обр.срб": 1,
- "од.срб": 1,
- "онлайн": 1,
- "орг": 1,
- "орг.рус": 1,
- "орг.срб": 1,
- "пр.срб": 1,
- "рус": 1,
- "рф": 1,
- "сайт": 1,
- "самара.рус": 1,
- "сочи.рус": 1,
- "спб.рус": 1,
- "срб": 1,
- "укр": 1,
- "упр.срб": 1,
- "я.рус": 1,
- "қаз": 1,
- "հայ": 1,
- "אקדמיה.ישראל": 1,
- "ישוב.ישראל": 1,
- "ישראל": 1,
- "ממשל.ישראל": 1,
- "צהל.ישראל": 1,
- "קום": 1,
- "ابوظبي": 1,
- "اتصالات": 1,
- "ارامكو": 1,
- "الاردن": 1,
- "البحرين": 1,
- "الجزائر": 1,
- "السعودية": 1,
- "السعوديه": 1,
- "السعودیة": 1,
- "السعودیۃ": 1,
- "العليان": 1,
- "المغرب": 1,
- "اليمن": 1,
- "امارات": 1,
- "ايران": 1,
- "ايران.ir": 1,
- "ایران": 1,
- "ایران.ir": 1,
- "بارت": 1,
- "بازار": 1,
- "بيتك": 1,
- "بھارت": 1,
- "تونس": 1,
- "سودان": 1,
- "سوريا": 1,
- "سورية": 1,
- "شبكة": 1,
- "عراق": 1,
- "عرب": 1,
- "عمان": 1,
- "فلسطين": 1,
- "قطر": 1,
- "كاثوليك": 1,
- "كوم": 1,
- "مصر": 1,
- "مليسيا": 1,
- "موريتانيا": 1,
- "موقع": 1,
- "همراه": 1,
- "پاكستان": 1,
- "پاکستان": 1,
- "ڀارت": 1,
- "कॉम": 1,
- "नेट": 1,
- "भारत": 1,
- "भारतम्": 1,
- "भारोत": 1,
- "संगठन": 1,
- "বাংলা": 1,
- "ভারত": 1,
- "ভাৰত": 1,
- "ਭਾਰਤ": 1,
- "ભારત": 1,
- "ଭାରତ": 1,
- "இந்தியா": 1,
- "இலங்கை": 1,
- "சிங்கப்பூர்": 1,
- "భారత్": 1,
- "ಭಾರತ": 1,
- "ഭാരതം": 1,
- "ලංකා": 1,
- "คอม": 1,
- "ทหาร.ไทย": 1,
- "ธุรกิจ.ไทย": 1,
- "รัฐบาล.ไทย": 1,
- "ศึกษา.ไทย": 1,
- "องค์กร.ไทย": 1,
- "เน็ต.ไทย": 1,
- "ไทย": 1,
- "ລາວ": 1,
- "გე": 1,
- "みんな": 1,
- "アマゾン": 1,
- "クラウド": 1,
- "グーグル": 1,
- "コム": 1,
- "ストア": 1,
- "セール": 1,
- "ファッション": 1,
- "ポイント": 1,
- "三重.jp": 1,
- "世界": 1,
- "个人.hk": 1,
- "中信": 1,
- "中国": 1,
- "中國": 1,
- "中文网": 1,
- "亚马逊": 1,
- "京都.jp": 1,
- "企业": 1,
- "佐賀.jp": 1,
- "佛山": 1,
- "信息": 1,
- "個人.hk": 1,
- "個人.香港": 1,
- "健康": 1,
- "八卦": 1,
- "公司": 1,
- "公司.cn": 1,
- "公司.hk": 1,
- "公司.香港": 1,
- "公益": 1,
- "兵庫.jp": 1,
- "北海道.jp": 1,
- "千葉.jp": 1,
- "台湾": 1,
- "台灣": 1,
- "和歌山.jp": 1,
- "商城": 1,
- "商店": 1,
- "商标": 1,
- "商業.tw": 1,
- "嘉里": 1,
- "嘉里大酒店": 1,
- "在线": 1,
- "埼玉.jp": 1,
- "大分.jp": 1,
- "大拿": 1,
- "大阪.jp": 1,
- "天主教": 1,
- "奈良.jp": 1,
- "娱乐": 1,
- "宮城.jp": 1,
- "宮崎.jp": 1,
- "家電": 1,
- "富山.jp": 1,
- "山口.jp": 1,
- "山形.jp": 1,
- "山梨.jp": 1,
- "岐阜.jp": 1,
- "岡山.jp": 1,
- "岩手.jp": 1,
- "島根.jp": 1,
- "广东": 1,
- "広島.jp": 1,
- "微博": 1,
- "徳島.jp": 1,
- "愛媛.jp": 1,
- "愛知.jp": 1,
- "慈善": 1,
- "我爱你": 1,
- "手机": 1,
- "招聘": 1,
- "政务": 1,
- "政府": 1,
- "政府.hk": 1,
- "政府.香港": 1,
- "敎育.hk": 1,
- "教育.hk": 1,
- "教育.香港": 1,
- "新加坡": 1,
- "新潟.jp": 1,
- "新闻": 1,
- "时尚": 1,
- "書籍": 1,
- "机构": 1,
- "東京.jp": 1,
- "栃木.jp": 1,
- "沖縄.jp": 1,
- "淡马锡": 1,
- "游戏": 1,
- "滋賀.jp": 1,
- "澳門": 1,
- "澳门": 1,
- "点看": 1,
- "熊本.jp": 1,
- "石川.jp": 1,
- "神奈川.jp": 1,
- "福井.jp": 1,
- "福岡.jp": 1,
- "福島.jp": 1,
- "秋田.jp": 1,
- "移动": 1,
- "箇人.hk": 1,
- "組織.hk": 1,
- "組織.tw": 1,
- "組織.香港": 1,
- "組织.hk": 1,
- "網絡.cn": 1,
- "網絡.hk": 1,
- "網絡.香港": 1,
- "網络.hk": 1,
- "網路.tw": 1,
- "组織.hk": 1,
- "组织.hk": 1,
- "组织机构": 1,
- "网址": 1,
- "网店": 1,
- "网站": 1,
- "网絡.hk": 1,
- "网络": 1,
- "网络.cn": 1,
- "网络.hk": 1,
- "群馬.jp": 1,
- "联通": 1,
- "臺灣": 1,
- "茨城.jp": 1,
- "谷歌": 1,
- "购物": 1,
- "通販": 1,
- "長崎.jp": 1,
- "長野.jp": 1,
- "集团": 1,
- "電訊盈科": 1,
- "青森.jp": 1,
- "静岡.jp": 1,
- "飞利浦": 1,
- "食品": 1,
- "餐厅": 1,
- "香川.jp": 1,
- "香格里拉": 1,
- "香港": 1,
- "高知.jp": 1,
- "鳥取.jp": 1,
- "鹿児島.jp": 1,
- "닷넷": 1,
- "닷컴": 1,
- "삼성": 1,
- "한국": 1
-}
\ No newline at end of file
diff --git a/src/mod/dynamicproxy/typedef.go b/src/mod/dynamicproxy/typedef.go
index 43c5fa2..0a48e33 100644
--- a/src/mod/dynamicproxy/typedef.go
+++ b/src/mod/dynamicproxy/typedef.go
@@ -14,8 +14,9 @@ import (
)
const (
- ProxyType_Subdomain = 0
- ProxyType_Vdir = 1
+ ProxyType_Root = 0
+ ProxyType_Host = 1
+ ProxyType_Vdir = 2
)
type ProxyHandler struct {
@@ -24,9 +25,11 @@ type ProxyHandler struct {
type RouterOption struct {
HostUUID string //The UUID of Zoraxy, use for heading mod
+ HostVersion string //The version of Zoraxy, use for heading mod
Port int //Incoming port
UseTls bool //Use TLS to serve incoming requsts
ForceTLSLatest bool //Force TLS1.2 or above
+ NoCache bool //Force set Cache-Control: no-store
ListenOnPort80 bool //Enable port 80 http listener
ForceHttpsRedirect bool //Force redirection of http to https endpoint
TlsManager *tlscert.Manager
@@ -37,16 +40,14 @@ type RouterOption struct {
}
type Router struct {
- Option *RouterOption
- ProxyEndpoints *sync.Map
- SubdomainEndpoint *sync.Map
- Running bool
- Root *ProxyEndpoint
- RootRoutingOptions *RootRoutingOptions
- mux http.Handler
- server *http.Server
- tlsListener net.Listener
- routingRules []*RoutingRule
+ Option *RouterOption
+ ProxyEndpoints *sync.Map
+ Running bool
+ Root *ProxyEndpoint
+ mux http.Handler
+ server *http.Server
+ tlsListener net.Listener
+ routingRules []*RoutingRule
tlsRedirectStop chan bool //Stop channel for tls redirection server
tldMap map[string]int //Top level domain map, see tld.json
@@ -69,63 +70,70 @@ type BasicAuthExceptionRule struct {
PathPrefix string
}
-// A proxy endpoint record
-type ProxyEndpoint struct {
- ProxyType int //The type of this proxy, see const def
- RootOrMatchingDomain string //Root for vdir or Matching domain for subd, also act as key
- Domain string //Domain or IP to proxy to
- RequireTLS bool //Target domain require TLS
- BypassGlobalTLS bool //Bypass global TLS setting options if TLS Listener enabled (parent.tlsListener != nil)
- SkipCertValidations bool //Set to true to accept self signed certs
- RequireBasicAuth bool //Set to true to request basic auth before proxy
- BasicAuthCredentials []*BasicAuthCredentials `json:"-"` //Basic auth credentials
- BasicAuthExceptionRules []*BasicAuthExceptionRule //Path to exclude in a basic auth enabled proxy target
- Proxy *dpcore.ReverseProxy `json:"-"`
-
- parent *Router
+// User defined headers to add into a proxy endpoint
+type UserDefinedHeader struct {
+ Key string
+ Value string
}
+// A Virtual Directory endpoint, provide a subset of ProxyEndpoint for better
+// program structure than directly using ProxyEndpoint
+type VirtualDirectoryEndpoint struct {
+ MatchingPath string //Matching prefix of the request path, also act as key
+ Domain string //Domain or IP to proxy to
+ RequireTLS bool //Target domain require TLS
+ SkipCertValidations bool //Set to true to accept self signed certs
+ Disabled bool //If the rule is enabled
+ proxy *dpcore.ReverseProxy `json:"-"`
+ parent *ProxyEndpoint `json:"-"`
+}
+
+// A proxy endpoint record, a general interface for handling inbound routing
+type ProxyEndpoint struct {
+ ProxyType int //The type of this proxy, see const def
+ RootOrMatchingDomain string //Matching domain for host, also act as key
+ Domain string //Domain or IP to proxy to
+
+ //TLS/SSL Related
+ RequireTLS bool //Target domain require TLS
+ BypassGlobalTLS bool //Bypass global TLS setting options if TLS Listener enabled (parent.tlsListener != nil)
+ SkipCertValidations bool //Set to true to accept self signed certs
+
+ //Virtual Directories
+ VirtualDirectories []*VirtualDirectoryEndpoint
+
+ //Custom Headers
+ UserDefinedHeaders []*UserDefinedHeader //Custom headers to append when proxying requests from this endpoint
+
+ //Authentication
+ RequireBasicAuth bool //Set to true to request basic auth before proxy
+ BasicAuthCredentials []*BasicAuthCredentials //Basic auth credentials
+ BasicAuthExceptionRules []*BasicAuthExceptionRule //Path to exclude in a basic auth enabled proxy target
+
+ //Fallback routing logic
+ DefaultSiteOption int //Fallback routing logic options
+ DefaultSiteValue string //Fallback routing target, optional
+
+ Disabled bool //If the rule is disabled
+ //Internal Logic Elements
+ parent *Router
+ proxy *dpcore.ReverseProxy `json:"-"`
+}
+
+/*
+ Routing type specific interface
+ These are options that only avaible for a specific interface
+ when running, these are converted into "ProxyEndpoint" objects
+ for more generic routing logic
+*/
+
// Root options are those that are required for reverse proxy handler to work
-type RootOptions struct {
- ProxyLocation string //Proxy Root target, all unset traffic will be forward to here
- RequireTLS bool //Proxy root target require TLS connection (not recommended)
- BypassGlobalTLS bool //Bypass global TLS setting and make root http only (not recommended)
- SkipCertValidations bool //Skip cert validation, suitable for self-signed certs, CURRENTLY NOT USED
-
- //Basic Auth Related
- RequireBasicAuth bool //Require basic auth, CURRENTLY NOT USED
- BasicAuthCredentials []*BasicAuthCredentials
- BasicAuthExceptionRules []*BasicAuthExceptionRule
-}
-
-// Additional options are here for letting router knows how to route exception cases for root
-type RootRoutingOptions struct {
- //Root only configs
- EnableRedirectForUnsetRules bool //Force unset rules to redirect to custom domain
- UnsetRuleRedirectTarget string //Custom domain to redirect to for unset rules
-}
-
-type VdirOptions struct {
- RootName string
- Domain string
- RequireTLS bool
- BypassGlobalTLS bool
- SkipCertValidations bool
- RequireBasicAuth bool
- BasicAuthCredentials []*BasicAuthCredentials
- BasicAuthExceptionRules []*BasicAuthExceptionRule
-}
-
-type SubdOptions struct {
- MatchingDomain string
- Domain string
- RequireTLS bool
- BypassGlobalTLS bool
- SkipCertValidations bool
- RequireBasicAuth bool
- BasicAuthCredentials []*BasicAuthCredentials
- BasicAuthExceptionRules []*BasicAuthExceptionRule
-}
+const (
+ DefaultSite_InternalStaticWebServer = 0
+ DefaultSite_ReverseProxy = 1
+ DefaultSite_Redirect = 2
+ DefaultSite_NotFoundPage = 3
+)
/*
Web Templates
diff --git a/src/mod/ganserv/handlers.go b/src/mod/ganserv/handlers.go
index c15ae19..faa0326 100644
--- a/src/mod/ganserv/handlers.go
+++ b/src/mod/ganserv/handlers.go
@@ -207,7 +207,7 @@ func (m *NetworkManager) HandleSetRanges(w http.ResponseWriter, r *http.Request)
utils.SendOK(w)
}
-//Handle listing of network members. Set details=true for listing all details
+// Handle listing of network members. Set details=true for listing all details
func (m *NetworkManager) HandleMemberList(w http.ResponseWriter, r *http.Request) {
netid, err := utils.GetPara(r, "netid")
if err != nil {
@@ -241,7 +241,7 @@ func (m *NetworkManager) HandleMemberList(w http.ResponseWriter, r *http.Request
}
}
-//Handle Authorization of members
+// Handle Authorization of members
func (m *NetworkManager) HandleMemberAuthorization(w http.ResponseWriter, r *http.Request) {
netid, err := utils.PostPara(r, "netid")
if err != nil {
@@ -281,7 +281,7 @@ func (m *NetworkManager) HandleMemberAuthorization(w http.ResponseWriter, r *htt
}
}
-//Handle Delete or Add IP for a member in a network
+// Handle Delete or Add IP for a member in a network
func (m *NetworkManager) HandleMemberIP(w http.ResponseWriter, r *http.Request) {
netid, err := utils.PostPara(r, "netid")
if err != nil {
@@ -356,7 +356,7 @@ func (m *NetworkManager) HandleMemberIP(w http.ResponseWriter, r *http.Request)
}
}
-//Handle naming for members
+// Handle naming for members
func (m *NetworkManager) HandleMemberNaming(w http.ResponseWriter, r *http.Request) {
netid, err := utils.PostPara(r, "netid")
if err != nil {
@@ -391,7 +391,7 @@ func (m *NetworkManager) HandleMemberNaming(w http.ResponseWriter, r *http.Reque
}
}
-//Handle delete of a given memver
+// Handle delete of a given memver
func (m *NetworkManager) HandleMemberDelete(w http.ResponseWriter, r *http.Request) {
netid, err := utils.PostPara(r, "netid")
if err != nil {
@@ -426,3 +426,79 @@ func (m *NetworkManager) HandleMemberDelete(w http.ResponseWriter, r *http.Reque
utils.SendOK(w)
}
+
+// Check if a given network id is a network hosted on this zoraxy node
+func (m *NetworkManager) IsLocalGAN(networkId string) bool {
+ networks, err := m.listNetworkIds()
+ if err != nil {
+ return false
+ }
+
+ for _, network := range networks {
+ if network == networkId {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Handle server instant joining a given network
+func (m *NetworkManager) HandleServerJoinNetwork(w http.ResponseWriter, r *http.Request) {
+ netid, err := utils.PostPara(r, "netid")
+ if err != nil {
+ utils.SendErrorResponse(w, "net id not set")
+ return
+ }
+
+ //Check if the target network is a network hosted on this server
+ if !m.IsLocalGAN(netid) {
+ utils.SendErrorResponse(w, "given network is not a GAN hosted on this node")
+ return
+ }
+
+ if m.memberExistsInNetwork(netid, m.ControllerID) {
+ utils.SendErrorResponse(w, "controller already inside network")
+ return
+ }
+
+ //Join the network
+ err = m.joinNetwork(netid)
+ if err != nil {
+ utils.SendErrorResponse(w, err.Error())
+ return
+ }
+
+ utils.SendOK(w)
+}
+
+// Handle server instant leaving a given network
+func (m *NetworkManager) HandleServerLeaveNetwork(w http.ResponseWriter, r *http.Request) {
+ netid, err := utils.PostPara(r, "netid")
+ if err != nil {
+ utils.SendErrorResponse(w, "net id not set")
+ return
+ }
+
+ //Check if the target network is a network hosted on this server
+ if !m.IsLocalGAN(netid) {
+ utils.SendErrorResponse(w, "given network is not a GAN hosted on this node")
+ return
+ }
+
+ //Leave the network
+ err = m.leaveNetwork(netid)
+ if err != nil {
+ utils.SendErrorResponse(w, err.Error())
+ return
+ }
+
+ //Remove it from target network if it is authorized
+ err = m.deleteMember(netid, m.ControllerID)
+ if err != nil {
+ utils.SendErrorResponse(w, err.Error())
+ return
+ }
+
+ utils.SendOK(w)
+}
diff --git a/src/mod/ganserv/zerotier.go b/src/mod/ganserv/zerotier.go
index 3016948..3fd6cbd 100644
--- a/src/mod/ganserv/zerotier.go
+++ b/src/mod/ganserv/zerotier.go
@@ -117,7 +117,7 @@ type MemberInfo struct {
VRev int `json:"vRev"`
}
-//Get the zerotier node info from local service
+// Get the zerotier node info from local service
func getControllerInfo(token string, apiPort int) (*NodeInfo, error) {
url := "http://localhost:" + strconv.Itoa(apiPort) + "/status"
@@ -187,7 +187,7 @@ func (m *NetworkManager) createNetwork() (*NetworkInfo, error) {
return &networkInfo, nil
}
-//List network details
+// List network details
func (m *NetworkManager) getNetworkInfoById(networkId string) (*NetworkInfo, error) {
req, err := http.NewRequest("GET", os.ExpandEnv("http://localhost:"+strconv.Itoa(m.apiPort)+"/controller/network/"+networkId+"/"), nil)
if err != nil {
@@ -249,7 +249,7 @@ func (m *NetworkManager) setNetworkInfoByID(networkId string, newNetworkInfo *Ne
return nil
}
-//List network IDs
+// List network IDs
func (m *NetworkManager) listNetworkIds() ([]string, error) {
req, err := http.NewRequest("GET", "http://localhost:"+strconv.Itoa(m.apiPort)+"/controller/network/", nil)
if err != nil {
@@ -281,7 +281,7 @@ func (m *NetworkManager) listNetworkIds() ([]string, error) {
return networkIds, nil
}
-//wrapper for checking if a network id exists
+// wrapper for checking if a network id exists
func (m *NetworkManager) networkExists(networkId string) bool {
networkIds, err := m.listNetworkIds()
if err != nil {
@@ -297,7 +297,7 @@ func (m *NetworkManager) networkExists(networkId string) bool {
return false
}
-//delete a network
+// delete a network
func (m *NetworkManager) deleteNetwork(networkID string) error {
url := "http://localhost:" + strconv.Itoa(m.apiPort) + "/controller/network/" + networkID + "/"
client := &http.Client{}
@@ -330,8 +330,8 @@ func (m *NetworkManager) deleteNetwork(networkID string) error {
return nil
}
-//Configure network
-//Example: configureNetwork(netid, "192.168.192.1", "192.168.192.254", "192.168.192.0/24")
+// Configure network
+// Example: configureNetwork(netid, "192.168.192.1", "192.168.192.254", "192.168.192.0/24")
func (m *NetworkManager) configureNetwork(networkID string, ipRangeStart string, ipRangeEnd string, routeTarget string) error {
url := "http://localhost:" + strconv.Itoa(m.apiPort) + "/controller/network/" + networkID + "/"
data := map[string]interface{}{
@@ -545,7 +545,7 @@ func (m *NetworkManager) memberExistsInNetwork(netid string, memid string) bool
return false
}
-//Get a network memeber info by netid and memberid
+// Get a network memeber info by netid and memberid
func (m *NetworkManager) getNetworkMemberInfo(netid string, memberid string) (*MemberInfo, error) {
req, err := http.NewRequest("GET", "http://localhost:"+strconv.Itoa(m.apiPort)+"/controller/network/"+netid+"/member/"+memberid, nil)
if err != nil {
@@ -573,7 +573,7 @@ func (m *NetworkManager) getNetworkMemberInfo(netid string, memberid string) (*M
return thisMemeberInfo, nil
}
-//Set the authorization state of a member
+// Set the authorization state of a member
func (m *NetworkManager) AuthorizeMember(netid string, memberid string, setAuthorized bool) error {
url := "http://localhost:" + strconv.Itoa(m.apiPort) + "/controller/network/" + netid + "/member/" + memberid
payload := []byte(`{"authorized": true}`)
@@ -600,7 +600,7 @@ func (m *NetworkManager) AuthorizeMember(netid string, memberid string, setAutho
return nil
}
-//Delete a member from the network
+// Delete a member from the network
func (m *NetworkManager) deleteMember(netid string, memid string) error {
req, err := http.NewRequest("DELETE", "http://localhost:"+strconv.Itoa(m.apiPort)+"/controller/network/"+netid+"/member/"+memid, nil)
if err != nil {
@@ -620,3 +620,45 @@ func (m *NetworkManager) deleteMember(netid string, memid string) error {
return nil
}
+
+// Make the host to join a given network
+func (m *NetworkManager) joinNetwork(netid string) error {
+ req, err := http.NewRequest("POST", "http://localhost:"+strconv.Itoa(m.apiPort)+"/network/"+netid, nil)
+ if err != nil {
+ return err
+ }
+ req.Header.Set("X-Zt1-Auth", os.ExpandEnv(m.authToken))
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != 200 {
+ return errors.New("network error. Status code: " + strconv.Itoa(resp.StatusCode))
+ }
+
+ return nil
+}
+
+// Make the host to leave a given network
+func (m *NetworkManager) leaveNetwork(netid string) error {
+ req, err := http.NewRequest("DELETE", "http://localhost:"+strconv.Itoa(m.apiPort)+"/network/"+netid, nil)
+ if err != nil {
+ return err
+ }
+ req.Header.Set("X-Zt1-Auth", os.ExpandEnv(m.authToken))
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != 200 {
+ return errors.New("network error. Status code: " + strconv.Itoa(resp.StatusCode))
+ }
+
+ return nil
+}
diff --git a/src/mod/geodb/whitelist.go b/src/mod/geodb/whitelist.go
index c643b60..5873b50 100644
--- a/src/mod/geodb/whitelist.go
+++ b/src/mod/geodb/whitelist.go
@@ -1,6 +1,9 @@
package geodb
-import "strings"
+import (
+ "encoding/json"
+ "strings"
+)
/*
Whitelist.go
@@ -8,11 +11,29 @@ import "strings"
This script handles whitelist related functions
*/
+const (
+ EntryType_CountryCode int = 0
+ EntryType_IP int = 1
+)
+
+type WhitelistEntry struct {
+ EntryType int //Entry type of whitelist, Country Code or IP
+ CC string //ISO Country Code
+ IP string //IP address or range
+ Comment string //Comment for this entry
+}
+
//Geo Whitelist
-func (s *Store) AddCountryCodeToWhitelist(countryCode string) {
+func (s *Store) AddCountryCodeToWhitelist(countryCode string, comment string) {
countryCode = strings.ToLower(countryCode)
- s.sysdb.Write("whitelist-cn", countryCode, true)
+ entry := WhitelistEntry{
+ EntryType: EntryType_CountryCode,
+ CC: countryCode,
+ Comment: comment,
+ }
+
+ s.sysdb.Write("whitelist-cn", countryCode, entry)
}
func (s *Store) RemoveCountryCodeFromWhitelist(countryCode string) {
@@ -22,20 +43,19 @@ func (s *Store) RemoveCountryCodeFromWhitelist(countryCode string) {
func (s *Store) IsCountryCodeWhitelisted(countryCode string) bool {
countryCode = strings.ToLower(countryCode)
- var isWhitelisted bool = false
- s.sysdb.Read("whitelist-cn", countryCode, &isWhitelisted)
- return isWhitelisted
+ return s.sysdb.KeyExists("whitelist-cn", countryCode)
}
-func (s *Store) GetAllWhitelistedCountryCode() []string {
- whitelistedCountryCode := []string{}
+func (s *Store) GetAllWhitelistedCountryCode() []*WhitelistEntry {
+ whitelistedCountryCode := []*WhitelistEntry{}
entries, err := s.sysdb.ListTable("whitelist-cn")
if err != nil {
return whitelistedCountryCode
}
for _, keypairs := range entries {
- ip := string(keypairs[0])
- whitelistedCountryCode = append(whitelistedCountryCode, ip)
+ thisWhitelistEntry := WhitelistEntry{}
+ json.Unmarshal(keypairs[1], &thisWhitelistEntry)
+ whitelistedCountryCode = append(whitelistedCountryCode, &thisWhitelistEntry)
}
return whitelistedCountryCode
@@ -43,8 +63,14 @@ func (s *Store) GetAllWhitelistedCountryCode() []string {
//IP Whitelist
-func (s *Store) AddIPToWhiteList(ipAddr string) {
- s.sysdb.Write("whitelist-ip", ipAddr, true)
+func (s *Store) AddIPToWhiteList(ipAddr string, comment string) {
+ thisIpEntry := WhitelistEntry{
+ EntryType: EntryType_IP,
+ IP: ipAddr,
+ Comment: comment,
+ }
+
+ s.sysdb.Write("whitelist-ip", ipAddr, thisIpEntry)
}
func (s *Store) RemoveIPFromWhiteList(ipAddr string) {
@@ -52,14 +78,14 @@ func (s *Store) RemoveIPFromWhiteList(ipAddr string) {
}
func (s *Store) IsIPWhitelisted(ipAddr string) bool {
- var isWhitelisted bool = false
- s.sysdb.Read("whitelist-ip", ipAddr, &isWhitelisted)
+ isWhitelisted := s.sysdb.KeyExists("whitelist-ip", ipAddr)
if isWhitelisted {
+ //single IP whitelist entry
return true
}
//Check for IP wildcard and CIRD rules
- AllWhitelistedIps := s.GetAllWhitelistedIp()
+ AllWhitelistedIps := s.GetAllWhitelistedIpAsStringSlice()
for _, whitelistRules := range AllWhitelistedIps {
wildcardMatch := MatchIpWildcard(ipAddr, whitelistRules)
if wildcardMatch {
@@ -75,17 +101,29 @@ func (s *Store) IsIPWhitelisted(ipAddr string) bool {
return false
}
-func (s *Store) GetAllWhitelistedIp() []string {
- whitelistedIp := []string{}
+func (s *Store) GetAllWhitelistedIp() []*WhitelistEntry {
+ whitelistedIp := []*WhitelistEntry{}
entries, err := s.sysdb.ListTable("whitelist-ip")
if err != nil {
return whitelistedIp
}
for _, keypairs := range entries {
- ip := string(keypairs[0])
- whitelistedIp = append(whitelistedIp, ip)
+ //ip := string(keypairs[0])
+ thisEntry := WhitelistEntry{}
+ json.Unmarshal(keypairs[1], &thisEntry)
+ whitelistedIp = append(whitelistedIp, &thisEntry)
}
return whitelistedIp
}
+
+func (s *Store) GetAllWhitelistedIpAsStringSlice() []string {
+ allWhitelistedIPs := []string{}
+ entries := s.GetAllWhitelistedIp()
+ for _, entry := range entries {
+ allWhitelistedIPs = append(allWhitelistedIPs, entry.IP)
+ }
+
+ return allWhitelistedIPs
+}
diff --git a/src/mod/reverseproxy/reverse.go b/src/mod/reverseproxy/reverse.go
index 678287e..6ded0ae 100644
--- a/src/mod/reverseproxy/reverse.go
+++ b/src/mod/reverseproxy/reverse.go
@@ -211,9 +211,9 @@ func removeHeaders(header http.Header) {
}
}
- if header.Get("A-Upgrade") != "" {
- header.Set("Upgrade", header.Get("A-Upgrade"))
- header.Del("A-Upgrade")
+ if header.Get("Zr-Origin-Upgrade") != "" {
+ header.Set("Upgrade", header.Get("Zr-Origin-Upgrade"))
+ header.Del("Zr-Origin-Upgrade")
}
}
diff --git a/src/mod/sshprox/sshprox.go b/src/mod/sshprox/sshprox.go
index 75b6874..429013c 100644
--- a/src/mod/sshprox/sshprox.go
+++ b/src/mod/sshprox/sshprox.go
@@ -82,7 +82,7 @@ func (m *Manager) HandleHttpByInstanceId(instanceId string, w http.ResponseWrite
requestURL := r.URL.String()
if r.Header["Upgrade"] != nil && strings.ToLower(r.Header["Upgrade"][0]) == "websocket" {
//Handle WebSocket request. Forward the custom Upgrade header and rewrite origin
- r.Header.Set("A-Upgrade", "websocket")
+ r.Header.Set("Zr-Origin-Upgrade", "websocket")
requestURL = strings.TrimPrefix(requestURL, "/")
u, _ := url.Parse("ws://127.0.0.1:" + strconv.Itoa(targetInstance.AssignedPort) + "/" + requestURL)
wspHandler := websocketproxy.NewProxy(u, false)
diff --git a/src/mod/tlscert/helper.go b/src/mod/tlscert/helper.go
index 10c52da..a637d65 100644
--- a/src/mod/tlscert/helper.go
+++ b/src/mod/tlscert/helper.go
@@ -5,22 +5,22 @@ import (
"strings"
)
-//This remove the certificates in the list where either the
-//public key or the private key is missing
+// This remove the certificates in the list where either the
+// public key or the private key is missing
func getCertPairs(certFiles []string) []string {
- crtMap := make(map[string]bool)
+ pemMap := make(map[string]bool)
keyMap := make(map[string]bool)
for _, filename := range certFiles {
- if filepath.Ext(filename) == ".crt" {
- crtMap[strings.TrimSuffix(filename, ".crt")] = true
+ if filepath.Ext(filename) == ".pem" {
+ pemMap[strings.TrimSuffix(filename, ".pem")] = true
} else if filepath.Ext(filename) == ".key" {
keyMap[strings.TrimSuffix(filename, ".key")] = true
}
}
var result []string
- for domain := range crtMap {
+ for domain := range pemMap {
if keyMap[domain] {
result = append(result, domain)
}
@@ -29,7 +29,7 @@ func getCertPairs(certFiles []string) []string {
return result
}
-//Get the cloest subdomain certificate from a list of domains
+// Get the cloest subdomain certificate from a list of domains
func matchClosestDomainCertificate(subdomain string, domains []string) string {
var matchingDomain string = ""
maxLength := 0
@@ -43,18 +43,3 @@ func matchClosestDomainCertificate(subdomain string, domains []string) string {
return matchingDomain
}
-
-//Check if a requesting domain is a subdomain of a given domain
-func isSubdomain(subdomain, domain string) bool {
- subdomainParts := strings.Split(subdomain, ".")
- domainParts := strings.Split(domain, ".")
- if len(subdomainParts) < len(domainParts) {
- return false
- }
- for i := range domainParts {
- if subdomainParts[len(subdomainParts)-1-i] != domainParts[len(domainParts)-1-i] {
- return false
- }
- }
- return true
-}
diff --git a/src/mod/tlscert/localhost.crt b/src/mod/tlscert/localhost.pem
similarity index 100%
rename from src/mod/tlscert/localhost.crt
rename to src/mod/tlscert/localhost.pem
diff --git a/src/mod/tlscert/tlscert.go b/src/mod/tlscert/tlscert.go
index 6a739eb..fbd0a13 100644
--- a/src/mod/tlscert/tlscert.go
+++ b/src/mod/tlscert/tlscert.go
@@ -6,7 +6,6 @@ import (
"embed"
"encoding/pem"
"io"
- "io/ioutil"
"log"
"os"
"path/filepath"
@@ -15,12 +14,19 @@ import (
"imuslab.com/zoraxy/mod/utils"
)
-type Manager struct {
- CertStore string
- verbal bool
+type CertCache struct {
+ Cert *x509.Certificate
+ PubKey string
+ PriKey string
}
-//go:embed localhost.crt localhost.key
+type Manager struct {
+ CertStore string //Path where all the certs are stored
+ LoadedCerts []*CertCache //A list of loaded certs
+ verbal bool
+}
+
+//go:embed localhost.pem localhost.key
var buildinCertStore embed.FS
func NewManager(certStore string, verbal bool) (*Manager, error) {
@@ -28,14 +34,99 @@ func NewManager(certStore string, verbal bool) (*Manager, error) {
os.MkdirAll(certStore, 0775)
}
+ pubKey := "./tmp/localhost.pem"
+ priKey := "./tmp/localhost.key"
+
+ //Check if this is initial setup
+ if !utils.FileExists(pubKey) {
+ buildInPubKey, _ := buildinCertStore.ReadFile(filepath.Base(pubKey))
+ os.WriteFile(pubKey, buildInPubKey, 0775)
+ }
+
+ if !utils.FileExists(priKey) {
+ buildInPriKey, _ := buildinCertStore.ReadFile(filepath.Base(priKey))
+ os.WriteFile(priKey, buildInPriKey, 0775)
+ }
+
thisManager := Manager{
- CertStore: certStore,
- verbal: verbal,
+ CertStore: certStore,
+ LoadedCerts: []*CertCache{},
+ verbal: verbal,
+ }
+
+ err := thisManager.UpdateLoadedCertList()
+ if err != nil {
+ return nil, err
}
return &thisManager, nil
}
+// Update domain mapping from file
+func (m *Manager) UpdateLoadedCertList() error {
+ //Get a list of certificates from file
+ domainList, err := m.ListCertDomains()
+ if err != nil {
+ return err
+ }
+
+ //Load each of the certificates into memory
+ certList := []*CertCache{}
+ for _, certname := range domainList {
+ //Read their certificate into memory
+ pubKey := filepath.Join(m.CertStore, certname+".pem")
+ priKey := filepath.Join(m.CertStore, certname+".key")
+ certificate, err := tls.LoadX509KeyPair(pubKey, priKey)
+ if err != nil {
+ log.Println("Certificate loaded failed: " + certname)
+ continue
+ }
+
+ for _, thisCert := range certificate.Certificate {
+ loadedCert, err := x509.ParseCertificate(thisCert)
+ if err != nil {
+ //Error pasring cert, skip this byte segment
+ continue
+ }
+
+ thisCacheEntry := CertCache{
+ Cert: loadedCert,
+ PubKey: pubKey,
+ PriKey: priKey,
+ }
+ certList = append(certList, &thisCacheEntry)
+ }
+ }
+
+ //Replace runtime cert array
+ m.LoadedCerts = certList
+
+ return nil
+}
+
+// Match cert by CN
+func (m *Manager) CertMatchExists(serverName string) bool {
+ for _, certCacheEntry := range m.LoadedCerts {
+ if certCacheEntry.Cert.VerifyHostname(serverName) == nil || certCacheEntry.Cert.Issuer.CommonName == serverName {
+ return true
+ }
+ }
+ return false
+}
+
+// Get cert entry by matching server name, return pubKey and priKey if found
+// check with CertMatchExists before calling to the load function
+func (m *Manager) GetCertByX509CNHostname(serverName string) (string, string) {
+ for _, certCacheEntry := range m.LoadedCerts {
+ if certCacheEntry.Cert.VerifyHostname(serverName) == nil || certCacheEntry.Cert.Issuer.CommonName == serverName {
+ return certCacheEntry.PubKey, certCacheEntry.PriKey
+ }
+ }
+
+ return "", ""
+}
+
+// Return a list of domains by filename
func (m *Manager) ListCertDomains() ([]string, error) {
filenames, err := m.ListCerts()
if err != nil {
@@ -48,8 +139,9 @@ func (m *Manager) ListCertDomains() ([]string, error) {
return filenames, nil
}
+// Return a list of cert files (public and private keys)
func (m *Manager) ListCerts() ([]string, error) {
- certs, err := ioutil.ReadDir(m.CertStore)
+ certs, err := os.ReadDir(m.CertStore)
if err != nil {
return []string{}, err
}
@@ -64,44 +156,52 @@ func (m *Manager) ListCerts() ([]string, error) {
return filenames, nil
}
+// Get a certificate from disk where its certificate matches with the helloinfo
func (m *Manager) GetCert(helloInfo *tls.ClientHelloInfo) (*tls.Certificate, error) {
//Check if the domain corrisponding cert exists
- pubKey := "./tmp/localhost.crt"
+ pubKey := "./tmp/localhost.pem"
priKey := "./tmp/localhost.key"
- //Check if this is initial setup
- if !utils.FileExists(pubKey) {
- buildInPubKey, _ := buildinCertStore.ReadFile(filepath.Base(pubKey))
- os.WriteFile(pubKey, buildInPubKey, 0775)
- }
-
- if !utils.FileExists(priKey) {
- buildInPriKey, _ := buildinCertStore.ReadFile(filepath.Base(priKey))
- os.WriteFile(priKey, buildInPriKey, 0775)
- }
-
- if utils.FileExists(filepath.Join(m.CertStore, helloInfo.ServerName+".crt")) && utils.FileExists(filepath.Join(m.CertStore, helloInfo.ServerName+".key")) {
- pubKey = filepath.Join(m.CertStore, helloInfo.ServerName+".crt")
+ if utils.FileExists(filepath.Join(m.CertStore, helloInfo.ServerName+".pem")) && utils.FileExists(filepath.Join(m.CertStore, helloInfo.ServerName+".key")) {
+ //Direct hit
+ pubKey = filepath.Join(m.CertStore, helloInfo.ServerName+".pem")
priKey = filepath.Join(m.CertStore, helloInfo.ServerName+".key")
-
+ } else if m.CertMatchExists(helloInfo.ServerName) {
+ //Use x509
+ pubKey, priKey = m.GetCertByX509CNHostname(helloInfo.ServerName)
} else {
- domainCerts, _ := m.ListCertDomains()
- cloestDomainCert := matchClosestDomainCertificate(helloInfo.ServerName, domainCerts)
- if cloestDomainCert != "" {
- //There is a matching parent domain for this subdomain. Use this instead.
- pubKey = filepath.Join(m.CertStore, cloestDomainCert+".crt")
- priKey = filepath.Join(m.CertStore, cloestDomainCert+".key")
- } else if m.DefaultCertExists() {
- //Use default.crt and default.key
- pubKey = filepath.Join(m.CertStore, "default.crt")
+ //Fallback to legacy method of matching certificates
+ /*
+ domainCerts, _ := m.ListCertDomains()
+ cloestDomainCert := matchClosestDomainCertificate(helloInfo.ServerName, domainCerts)
+ if cloestDomainCert != "" {
+ //There is a matching parent domain for this subdomain. Use this instead.
+ pubKey = filepath.Join(m.CertStore, cloestDomainCert+".pem")
+ priKey = filepath.Join(m.CertStore, cloestDomainCert+".key")
+ } else if m.DefaultCertExists() {
+ //Use default.pem and default.key
+ pubKey = filepath.Join(m.CertStore, "default.pem")
+ priKey = filepath.Join(m.CertStore, "default.key")
+ if m.verbal {
+ log.Println("No matching certificate found. Serving with default")
+ }
+ } else {
+ if m.verbal {
+ log.Println("Matching certificate not found. Serving with build-in certificate. Requesting server name: ", helloInfo.ServerName)
+ }
+ }*/
+
+ if m.DefaultCertExists() {
+ //Use default.pem and default.key
+ pubKey = filepath.Join(m.CertStore, "default.pem")
priKey = filepath.Join(m.CertStore, "default.key")
- if m.verbal {
- log.Println("No matching certificate found. Serving with default")
- }
+ //if m.verbal {
+ // log.Println("No matching certificate found. Serving with default")
+ //}
} else {
- if m.verbal {
- log.Println("Matching certificate not found. Serving with build-in certificate. Requesting server name: ", helloInfo.ServerName)
- }
+ //if m.verbal {
+ // log.Println("Matching certificate not found. Serving with build-in certificate. Requesting server name: ", helloInfo.ServerName)
+ //}
}
}
@@ -117,17 +217,17 @@ func (m *Manager) GetCert(helloInfo *tls.ClientHelloInfo) (*tls.Certificate, err
// Check if both the default cert public key and private key exists
func (m *Manager) DefaultCertExists() bool {
- return utils.FileExists(filepath.Join(m.CertStore, "default.crt")) && utils.FileExists(filepath.Join(m.CertStore, "default.key"))
+ return utils.FileExists(filepath.Join(m.CertStore, "default.pem")) && utils.FileExists(filepath.Join(m.CertStore, "default.key"))
}
// Check if the default cert exists returning seperate results for pubkey and prikey
func (m *Manager) DefaultCertExistsSep() (bool, bool) {
- return utils.FileExists(filepath.Join(m.CertStore, "default.crt")), utils.FileExists(filepath.Join(m.CertStore, "default.key"))
+ return utils.FileExists(filepath.Join(m.CertStore, "default.pem")), utils.FileExists(filepath.Join(m.CertStore, "default.key"))
}
// Delete the cert if exists
func (m *Manager) RemoveCert(domain string) error {
- pubKey := filepath.Join(m.CertStore, domain+".crt")
+ pubKey := filepath.Join(m.CertStore, domain+".pem")
priKey := filepath.Join(m.CertStore, domain+".key")
if utils.FileExists(pubKey) {
err := os.Remove(pubKey)
@@ -143,6 +243,9 @@ func (m *Manager) RemoveCert(domain string) error {
}
}
+ //Update the cert list
+ m.UpdateLoadedCertList()
+
return nil
}
@@ -171,15 +274,11 @@ func IsValidTLSFile(file io.Reader) bool {
return false
}
// Check if the certificate is a valid TLS/SSL certificate
- return cert.IsCA == false && cert.KeyUsage&x509.KeyUsageDigitalSignature != 0 && cert.KeyUsage&x509.KeyUsageKeyEncipherment != 0
+ return !cert.IsCA && cert.KeyUsage&x509.KeyUsageDigitalSignature != 0 && cert.KeyUsage&x509.KeyUsageKeyEncipherment != 0
} else if strings.Contains(block.Type, "PRIVATE KEY") {
// The file contains a private key
_, err := x509.ParsePKCS1PrivateKey(block.Bytes)
- if err != nil {
- // Handle the error
- return false
- }
- return true
+ return err == nil
} else {
return false
}
diff --git a/src/mod/uptime/uptime.go b/src/mod/uptime/uptime.go
index 1308592..256b317 100644
--- a/src/mod/uptime/uptime.go
+++ b/src/mod/uptime/uptime.go
@@ -217,7 +217,11 @@ func getWebsiteStatusWithLatency(url string) (bool, int64, int) {
}
func getWebsiteStatus(url string) (int, error) {
- resp, err := http.Get(url)
+ client := http.Client{
+ Timeout: 10 * time.Second,
+ }
+
+ resp, err := client.Get(url)
if err != nil {
//Try replace the http with https and vise versa
rewriteURL := ""
@@ -227,7 +231,7 @@ func getWebsiteStatus(url string) (int, error) {
rewriteURL = strings.ReplaceAll(url, "http://", "https://")
}
- resp, err = http.Get(rewriteURL)
+ resp, err = client.Get(rewriteURL)
if err != nil {
if strings.Contains(err.Error(), "http: server gave HTTP response to HTTPS client") {
//Invalid downstream reverse proxy settings, but it is online
diff --git a/src/mod/webserv/handler.go b/src/mod/webserv/handler.go
index 5db1837..1aa96e6 100644
--- a/src/mod/webserv/handler.go
+++ b/src/mod/webserv/handler.go
@@ -72,6 +72,7 @@ func (ws *WebServer) HandlePortChange(w http.ResponseWriter, r *http.Request) {
utils.SendErrorResponse(w, err.Error())
return
}
+
utils.SendOK(w)
}
diff --git a/src/mod/webserv/webserv.go b/src/mod/webserv/webserv.go
index 9eb7ee7..d516501 100644
--- a/src/mod/webserv/webserv.go
+++ b/src/mod/webserv/webserv.go
@@ -89,7 +89,7 @@ func (ws *WebServer) RestorePreviousState() {
ws.option.EnableDirectoryListing = enableDirList
//Check the running state
- webservRunning := false
+ webservRunning := true
ws.option.Sysdb.Read("webserv", "enabled", &webservRunning)
if webservRunning {
ws.Start()
@@ -124,6 +124,11 @@ func (ws *WebServer) ChangePort(port string) error {
return nil
}
+// Get current using port in options
+func (ws *WebServer) GetListeningPort() string {
+ return ws.option.Port
+}
+
// Start starts the web server.
func (ws *WebServer) Start() error {
ws.mu.Lock()
diff --git a/src/reverseproxy.go b/src/reverseproxy.go
index f1bd381..10e06bb 100644
--- a/src/reverseproxy.go
+++ b/src/reverseproxy.go
@@ -21,6 +21,9 @@ var (
// Add user customizable reverse proxy
func ReverseProxtInit() {
+ /*
+ Load Reverse Proxy Global Settings
+ */
inboundPort := 80
if sysdb.KeyExists("settings", "inbound") {
sysdb.Read("settings", "inbound", &inboundPort)
@@ -45,6 +48,14 @@ func ReverseProxtInit() {
SystemWideLogger.Println("Force latest TLS mode disabled. Minimum TLS version is set to v1.0")
}
+ developmentMode := false
+ sysdb.Read("settings", "devMode", &developmentMode)
+ if useTls {
+ SystemWideLogger.Println("Development mode enabled. Using no-store Cache Control policy")
+ } else {
+ SystemWideLogger.Println("Development mode disabled. Proxying with default Cache Control policy")
+ }
+
listenOnPort80 := false
sysdb.Read("settings", "listenP80", &listenOnPort80)
if listenOnPort80 {
@@ -63,11 +74,19 @@ func ReverseProxtInit() {
SystemWideLogger.Println("Force HTTPS mode disabled")
}
+ /*
+ Create a new proxy object
+ The DynamicProxy is the parent of all reverse proxy handlers,
+ use for managemening and provide functions to access proxy handlers
+ */
+
dprouter, err := dynamicproxy.NewDynamicProxy(dynamicproxy.RouterOption{
HostUUID: nodeUUID,
+ HostVersion: version,
Port: inboundPort,
UseTls: useTls,
ForceTLSLatest: forceLatestTLSVersion,
+ NoCache: developmentMode,
ListenOnPort80: listenOnPort80,
ForceHttpsRedirect: forceHttpsRedirect,
TlsManager: tlsCertManager,
@@ -83,45 +102,28 @@ func ReverseProxtInit() {
dynamicProxyRouter = dprouter
- //Load all conf from files
+ /*
+
+ Load all conf from files
+
+ */
confs, _ := filepath.Glob("./conf/proxy/*.config")
for _, conf := range confs {
- record, err := LoadReverseProxyConfig(conf)
+ err := LoadReverseProxyConfig(conf)
if err != nil {
SystemWideLogger.PrintAndLog("Proxy", "Failed to load config file: "+filepath.Base(conf), err)
return
}
+ }
- if record.ProxyType == "root" {
- dynamicProxyRouter.SetRootProxy(&dynamicproxy.RootOptions{
- ProxyLocation: record.ProxyTarget,
- RequireTLS: record.UseTLS,
- })
- } else if record.ProxyType == "subd" {
- dynamicProxyRouter.AddSubdomainRoutingService(&dynamicproxy.SubdOptions{
- MatchingDomain: record.Rootname,
- Domain: record.ProxyTarget,
- RequireTLS: record.UseTLS,
- BypassGlobalTLS: record.BypassGlobalTLS,
- SkipCertValidations: record.SkipTlsValidation,
- RequireBasicAuth: record.RequireBasicAuth,
- BasicAuthCredentials: record.BasicAuthCredentials,
- BasicAuthExceptionRules: record.BasicAuthExceptionRules,
- })
- } else if record.ProxyType == "vdir" {
- dynamicProxyRouter.AddVirtualDirectoryProxyService(&dynamicproxy.VdirOptions{
- RootName: record.Rootname,
- Domain: record.ProxyTarget,
- RequireTLS: record.UseTLS,
- BypassGlobalTLS: record.BypassGlobalTLS,
- SkipCertValidations: record.SkipTlsValidation,
- RequireBasicAuth: record.RequireBasicAuth,
- BasicAuthCredentials: record.BasicAuthCredentials,
- BasicAuthExceptionRules: record.BasicAuthExceptionRules,
- })
- } else {
- SystemWideLogger.PrintAndLog("Proxy", "Unsupported endpoint type: "+record.ProxyType+". Skipping "+filepath.Base(conf), nil)
+ if dynamicProxyRouter.Root == nil {
+ //Root config not set (new deployment?), use internal static web server as root
+ defaultRootRouter, err := GetDefaultRootConfig()
+ if err != nil {
+ SystemWideLogger.PrintAndLog("Proxy", "Failed to generate default root routing", err)
+ return
}
+ dynamicProxyRouter.SetProxyRouteAsRoot(defaultRootRouter)
}
//Start Service
@@ -173,7 +175,7 @@ func ReverseProxyHandleOnOff(w http.ResponseWriter, r *http.Request) {
}
func ReverseProxyHandleAddEndpoint(w http.ResponseWriter, r *http.Request) {
- eptype, err := utils.PostPara(r, "type") //Support root, vdir and subd
+ eptype, err := utils.PostPara(r, "type") //Support root and host
if err != nil {
utils.SendErrorResponse(w, "type not defined")
return
@@ -241,96 +243,112 @@ func ReverseProxyHandleAddEndpoint(w http.ResponseWriter, r *http.Request) {
}
}
- rootname := ""
- if eptype == "vdir" {
- vdir, err := utils.PostPara(r, "rootname")
- if err != nil {
- utils.SendErrorResponse(w, "vdir not defined")
- return
- }
-
- //Vdir must start with /
- if !strings.HasPrefix(vdir, "/") {
- vdir = "/" + vdir
- }
- rootname = vdir
-
- thisOption := dynamicproxy.VdirOptions{
- RootName: vdir,
- Domain: endpoint,
- RequireTLS: useTLS,
- BypassGlobalTLS: useBypassGlobalTLS,
- SkipCertValidations: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: basicAuthCredentials,
- }
- dynamicProxyRouter.AddVirtualDirectoryProxyService(&thisOption)
-
- } else if eptype == "subd" {
- subdomain, err := utils.PostPara(r, "rootname")
+ var proxyEndpointCreated *dynamicproxy.ProxyEndpoint
+ if eptype == "host" {
+ rootOrMatchingDomain, err := utils.PostPara(r, "rootname")
if err != nil {
utils.SendErrorResponse(w, "subdomain not defined")
return
}
- rootname = subdomain
- thisOption := dynamicproxy.SubdOptions{
- MatchingDomain: subdomain,
+ thisProxyEndpoint := dynamicproxy.ProxyEndpoint{
+ //I/O
+ ProxyType: dynamicproxy.ProxyType_Host,
+ RootOrMatchingDomain: rootOrMatchingDomain,
+ Domain: endpoint,
+ //TLS
+ RequireTLS: useTLS,
+ BypassGlobalTLS: useBypassGlobalTLS,
+ SkipCertValidations: skipTlsValidation,
+ //VDir
+ VirtualDirectories: []*dynamicproxy.VirtualDirectoryEndpoint{},
+ //Custom headers
+ UserDefinedHeaders: []*dynamicproxy.UserDefinedHeader{},
+ //Auth
+ RequireBasicAuth: requireBasicAuth,
+ BasicAuthCredentials: basicAuthCredentials,
+ BasicAuthExceptionRules: []*dynamicproxy.BasicAuthExceptionRule{},
+ DefaultSiteOption: 0,
+ DefaultSiteValue: "",
+ }
+
+ preparedEndpoint, err := dynamicProxyRouter.PrepareProxyRoute(&thisProxyEndpoint)
+ if err != nil {
+ utils.SendErrorResponse(w, "unable to prepare proxy route to target endpoint: "+err.Error())
+ return
+ }
+
+ dynamicProxyRouter.AddProxyRouteToRuntime(preparedEndpoint)
+ proxyEndpointCreated = &thisProxyEndpoint
+ } else if eptype == "root" {
+ //Get the default site options and target
+ dsOptString, err := utils.PostPara(r, "defaultSiteOpt")
+ if err != nil {
+ utils.SendErrorResponse(w, "default site action not defined")
+ return
+ }
+
+ var defaultSiteOption int = 1
+ opt, err := strconv.Atoi(dsOptString)
+ if err != nil {
+ utils.SendErrorResponse(w, "invalid default site option")
+ return
+ }
+
+ defaultSiteOption = opt
+
+ dsVal, err := utils.PostPara(r, "defaultSiteVal")
+ if err != nil && (defaultSiteOption == 1 || defaultSiteOption == 2) {
+ //Reverse proxy or redirect, must require value to be set
+ utils.SendErrorResponse(w, "target not defined")
+ return
+ }
+
+ //Write the root options to file
+ rootRoutingEndpoint := dynamicproxy.ProxyEndpoint{
+ ProxyType: dynamicproxy.ProxyType_Root,
+ RootOrMatchingDomain: "/",
Domain: endpoint,
RequireTLS: useTLS,
- BypassGlobalTLS: useBypassGlobalTLS,
- SkipCertValidations: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: basicAuthCredentials,
+ BypassGlobalTLS: false,
+ SkipCertValidations: false,
+
+ DefaultSiteOption: defaultSiteOption,
+ DefaultSiteValue: dsVal,
}
- dynamicProxyRouter.AddSubdomainRoutingService(&thisOption)
- } else if eptype == "root" {
- rootname = "root"
- thisOption := dynamicproxy.RootOptions{
- ProxyLocation: endpoint,
- RequireTLS: useTLS,
+ preparedRootProxyRoute, err := dynamicProxyRouter.PrepareProxyRoute(&rootRoutingEndpoint)
+ if err != nil {
+ utils.SendErrorResponse(w, "unable to prepare root routing: "+err.Error())
+ return
}
- dynamicProxyRouter.SetRootProxy(&thisOption)
+
+ dynamicProxyRouter.SetProxyRouteAsRoot(preparedRootProxyRoute)
+ proxyEndpointCreated = &rootRoutingEndpoint
} else {
//Invalid eptype
- utils.SendErrorResponse(w, "Invalid endpoint type")
+ utils.SendErrorResponse(w, "invalid endpoint type")
return
}
- //Save it
- thisProxyConfigRecord := Record{
- ProxyType: eptype,
- Rootname: rootname,
- ProxyTarget: endpoint,
- UseTLS: useTLS,
- BypassGlobalTLS: useBypassGlobalTLS,
- SkipTlsValidation: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: basicAuthCredentials,
+ //Save the config to file
+ err = SaveReverseProxyConfig(proxyEndpointCreated)
+ if err != nil {
+ SystemWideLogger.PrintAndLog("Proxy", "Unable to save new proxy rule to file", err)
+ return
}
- SaveReverseProxyConfigToFile(&thisProxyConfigRecord)
//Update utm if exists
- if uptimeMonitor != nil {
- uptimeMonitor.Config.Targets = GetUptimeTargetsFromReverseProxyRules(dynamicProxyRouter)
- uptimeMonitor.CleanRecords()
- }
+ UpdateUptimeMonitorTargets()
utils.SendOK(w)
}
/*
ReverseProxyHandleEditEndpoint handles proxy endpoint edit
-This endpoint do not handle
-basic auth credential update. The credential
-will be loaded from old config and reused
+(host only, for root use Default Site page to edit)
+This endpoint do not handle basic auth credential update.
+The credential will be loaded from old config and reused
*/
func ReverseProxyHandleEditEndpoint(w http.ResponseWriter, r *http.Request) {
- eptype, err := utils.PostPara(r, "type") //Support root, vdir and subd
- if err != nil {
- utils.SendErrorResponse(w, "type not defined")
- return
- }
-
rootNameOrMatchingDomain, err := utils.PostPara(r, "rootname")
if err != nil {
utils.SendErrorResponse(w, "Target proxy rule not defined")
@@ -371,50 +389,31 @@ func ReverseProxyHandleEditEndpoint(w http.ResponseWriter, r *http.Request) {
requireBasicAuth := (rba == "true")
//Load the previous basic auth credentials from current proxy rules
- targetProxyEntry, err := dynamicProxyRouter.LoadProxy(eptype, rootNameOrMatchingDomain)
+ targetProxyEntry, err := dynamicProxyRouter.LoadProxy(rootNameOrMatchingDomain)
if err != nil {
utils.SendErrorResponse(w, "Target proxy config not found or could not be loaded")
return
}
- if eptype == "vdir" {
- thisOption := dynamicproxy.VdirOptions{
- RootName: targetProxyEntry.RootOrMatchingDomain,
- Domain: endpoint,
- RequireTLS: useTLS,
- BypassGlobalTLS: false,
- SkipCertValidations: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: targetProxyEntry.BasicAuthCredentials,
- }
- targetProxyEntry.Remove()
- dynamicProxyRouter.AddVirtualDirectoryProxyService(&thisOption)
+ //Generate a new proxyEndpoint from the new config
+ newProxyEndpoint := dynamicproxy.CopyEndpoint(targetProxyEntry)
+ newProxyEndpoint.Domain = endpoint
+ newProxyEndpoint.RequireTLS = useTLS
+ newProxyEndpoint.BypassGlobalTLS = bypassGlobalTLS
+ newProxyEndpoint.SkipCertValidations = skipTlsValidation
+ newProxyEndpoint.RequireBasicAuth = requireBasicAuth
- } else if eptype == "subd" {
- thisOption := dynamicproxy.SubdOptions{
- MatchingDomain: targetProxyEntry.RootOrMatchingDomain,
- Domain: endpoint,
- RequireTLS: useTLS,
- BypassGlobalTLS: bypassGlobalTLS,
- SkipCertValidations: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: targetProxyEntry.BasicAuthCredentials,
- }
- targetProxyEntry.Remove()
- dynamicProxyRouter.AddSubdomainRoutingService(&thisOption)
+ //Prepare to replace the current routing rule
+ readyRoutingRule, err := dynamicProxyRouter.PrepareProxyRoute(newProxyEndpoint)
+ if err != nil {
+ utils.SendErrorResponse(w, err.Error())
+ return
}
+ targetProxyEntry.Remove()
+ dynamicProxyRouter.AddProxyRouteToRuntime(readyRoutingRule)
//Save it to file
- thisProxyConfigRecord := Record{
- ProxyType: eptype,
- Rootname: targetProxyEntry.RootOrMatchingDomain,
- ProxyTarget: endpoint,
- UseTLS: useTLS,
- SkipTlsValidation: skipTlsValidation,
- RequireBasicAuth: requireBasicAuth,
- BasicAuthCredentials: targetProxyEntry.BasicAuthCredentials,
- }
- SaveReverseProxyConfigToFile(&thisProxyConfigRecord)
+ SaveReverseProxyConfig(newProxyEndpoint)
//Update uptime monitor
UpdateUptimeMonitorTargets()
@@ -429,21 +428,19 @@ func DeleteProxyEndpoint(w http.ResponseWriter, r *http.Request) {
return
}
- ptype, err := utils.PostPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
//Remove the config from runtime
- err = dynamicProxyRouter.RemoveProxyEndpointByRootname(ptype, ep)
+ err = dynamicProxyRouter.RemoveProxyEndpointByRootname(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
}
//Remove the config from file
- RemoveReverseProxyConfigFile(ep)
+ err = RemoveReverseProxyConfig(ep)
+ if err != nil {
+ utils.SendErrorResponse(w, err.Error())
+ return
+ }
//Update utm if exists
if uptimeMonitor != nil {
@@ -473,14 +470,8 @@ func UpdateProxyBasicAuthCredentials(w http.ResponseWriter, r *http.Request) {
return
}
- ptype, err := utils.GetPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
//Load the target proxy object from router
- targetProxy, err := dynamicProxyRouter.LoadProxy(ptype, ep)
+ targetProxy, err := dynamicProxyRouter.LoadProxy(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
@@ -502,17 +493,6 @@ func UpdateProxyBasicAuthCredentials(w http.ResponseWriter, r *http.Request) {
return
}
- ptype, err := utils.PostPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
- if ptype != "vdir" && ptype != "subd" {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
creds, err := utils.PostPara(r, "creds")
if err != nil {
utils.SendErrorResponse(w, "Invalid ptype given")
@@ -520,7 +500,7 @@ func UpdateProxyBasicAuthCredentials(w http.ResponseWriter, r *http.Request) {
}
//Load the target proxy object from router
- targetProxy, err := dynamicProxyRouter.LoadProxy(ptype, ep)
+ targetProxy, err := dynamicProxyRouter.LoadProxy(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
@@ -570,7 +550,7 @@ func UpdateProxyBasicAuthCredentials(w http.ResponseWriter, r *http.Request) {
targetProxy.BasicAuthCredentials = mergedCredentials
//Save it to file
- SaveReverseProxyEndpointToFile(targetProxy)
+ SaveReverseProxyConfig(targetProxy)
//Replace runtime configuration
targetProxy.UpdateToRuntime()
@@ -593,14 +573,8 @@ func ListProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request) {
return
}
- ptype, err := utils.GetPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
//Load the target proxy object from router
- targetProxy, err := dynamicProxyRouter.LoadProxy(ptype, ep)
+ targetProxy, err := dynamicProxyRouter.LoadProxy(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
@@ -624,12 +598,6 @@ func AddProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request) {
return
}
- ptype, err := utils.PostPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
matchingPrefix, err := utils.PostPara(r, "prefix")
if err != nil {
utils.SendErrorResponse(w, "Invalid matching prefix given")
@@ -637,7 +605,7 @@ func AddProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request) {
}
//Load the target proxy object from router
- targetProxy, err := dynamicProxyRouter.LoadProxy(ptype, ep)
+ targetProxy, err := dynamicProxyRouter.LoadProxy(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
@@ -666,7 +634,7 @@ func AddProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request) {
//Save configs to runtime and file
targetProxy.UpdateToRuntime()
- SaveReverseProxyEndpointToFile(targetProxy)
+ SaveReverseProxyConfig(targetProxy)
utils.SendOK(w)
}
@@ -679,12 +647,6 @@ func RemoveProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request)
return
}
- ptype, err := utils.PostPara(r, "ptype")
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ptype given")
- return
- }
-
matchingPrefix, err := utils.PostPara(r, "prefix")
if err != nil {
utils.SendErrorResponse(w, "Invalid matching prefix given")
@@ -692,7 +654,7 @@ func RemoveProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request)
}
// Load the target proxy object from router
- targetProxy, err := dynamicProxyRouter.LoadProxy(ptype, ep)
+ targetProxy, err := dynamicProxyRouter.LoadProxy(ep)
if err != nil {
utils.SendErrorResponse(w, err.Error())
return
@@ -717,7 +679,7 @@ func RemoveProxyBasicAuthExceptionPaths(w http.ResponseWriter, r *http.Request)
// Save configs to runtime and file
targetProxy.UpdateToRuntime()
- SaveReverseProxyEndpointToFile(targetProxy)
+ SaveReverseProxyConfig(targetProxy)
utils.SendOK(w)
}
@@ -728,16 +690,28 @@ func ReverseProxyStatus(w http.ResponseWriter, r *http.Request) {
}
func ReverseProxyList(w http.ResponseWriter, r *http.Request) {
- eptype, err := utils.PostPara(r, "type") //Support root, vdir and subd
+ eptype, err := utils.PostPara(r, "type") //Support root and host
if err != nil {
utils.SendErrorResponse(w, "type not defined")
return
}
- if eptype == "vdir" {
+ if eptype == "host" {
results := []*dynamicproxy.ProxyEndpoint{}
dynamicProxyRouter.ProxyEndpoints.Range(func(key, value interface{}) bool {
- results = append(results, value.(*dynamicproxy.ProxyEndpoint))
+ thisEndpoint := dynamicproxy.CopyEndpoint(value.(*dynamicproxy.ProxyEndpoint))
+
+ //Clear the auth passwords before showing to front-end
+ cleanedCredentials := []*dynamicproxy.BasicAuthCredentials{}
+ for _, user := range thisEndpoint.BasicAuthCredentials {
+ cleanedCredentials = append(cleanedCredentials, &dynamicproxy.BasicAuthCredentials{
+ Username: user.Username,
+ PasswordHash: "",
+ })
+ }
+
+ thisEndpoint.BasicAuthCredentials = cleanedCredentials
+ results = append(results, thisEndpoint)
return true
})
@@ -745,19 +719,6 @@ func ReverseProxyList(w http.ResponseWriter, r *http.Request) {
return results[i].Domain < results[j].Domain
})
- js, _ := json.Marshal(results)
- utils.SendJSONResponse(w, string(js))
- } else if eptype == "subd" {
- results := []*dynamicproxy.ProxyEndpoint{}
- dynamicProxyRouter.SubdomainEndpoint.Range(func(key, value interface{}) bool {
- results = append(results, value.(*dynamicproxy.ProxyEndpoint))
- return true
- })
-
- sort.Slice(results, func(i, j int) bool {
- return results[i].RootOrMatchingDomain < results[j].RootOrMatchingDomain
- })
-
js, _ := json.Marshal(results)
utils.SendJSONResponse(w, string(js))
} else if eptype == "root" {
@@ -789,7 +750,7 @@ func HandleUpdatePort80Listener(w http.ResponseWriter, r *http.Request) {
} else if enabled == "false" {
sysdb.Write("settings", "listenP80", false)
SystemWideLogger.Println("Disabling port 80 listener")
- dynamicProxyRouter.UpdatePort80ListenerState(true)
+ dynamicProxyRouter.UpdatePort80ListenerState(false)
} else {
utils.SendErrorResponse(w, "invalid mode given: "+enabled)
}
@@ -837,6 +798,30 @@ func HandleManagementProxyCheck(w http.ResponseWriter, r *http.Request) {
utils.SendJSONResponse(w, string(js))
}
+func HandleDevelopmentModeChange(w http.ResponseWriter, r *http.Request) {
+ enableDevelopmentModeStr, err := utils.GetPara(r, "enable")
+ if err != nil {
+ //Load the current development mode toggle state
+ js, _ := json.Marshal(dynamicProxyRouter.Option.NoCache)
+ utils.SendJSONResponse(w, string(js))
+ } else {
+ //Write changes to runtime
+ enableDevelopmentMode := false
+ if enableDevelopmentModeStr == "true" {
+ enableDevelopmentMode = true
+ }
+
+ //Write changes to runtime
+ dynamicProxyRouter.Option.NoCache = enableDevelopmentMode
+
+ //Write changes to database
+ sysdb.Write("settings", "devMode", enableDevelopmentMode)
+
+ utils.SendOK(w)
+ }
+
+}
+
// Handle incoming port set. Change the current proxy incoming port
func HandleIncomingPortSet(w http.ResponseWriter, r *http.Request) {
newIncomingPort, err := utils.PostPara(r, "incoming")
@@ -882,33 +867,138 @@ func HandleIncomingPortSet(w http.ResponseWriter, r *http.Request) {
utils.SendOK(w)
}
-// Handle list of root route options
-func HandleRootRouteOptionList(w http.ResponseWriter, r *http.Request) {
- js, _ := json.Marshal(dynamicProxyRouter.RootRoutingOptions)
- utils.SendJSONResponse(w, string(js))
-}
+/* Handle Custom Header Rules */
+//List all the custom header defined in this proxy rule
-// Handle update of the root route edge case options. See dynamicproxy/rootRoute.go
-func HandleRootRouteOptionsUpdate(w http.ResponseWriter, r *http.Request) {
- enableUnsetSubdomainRedirect, err := utils.PostBool(r, "unsetRedirect")
+func HandleCustomHeaderList(w http.ResponseWriter, r *http.Request) {
+ epType, err := utils.PostPara(r, "type")
if err != nil {
- utils.SendErrorResponse(w, err.Error())
+ utils.SendErrorResponse(w, "endpoint type not defined")
return
}
- unsetRedirectTarget, _ := utils.PostPara(r, "unsetRedirectTarget")
-
- newRootOption := dynamicproxy.RootRoutingOptions{
- EnableRedirectForUnsetRules: enableUnsetSubdomainRedirect,
- UnsetRuleRedirectTarget: unsetRedirectTarget,
+ domain, err := utils.PostPara(r, "domain")
+ if err != nil {
+ utils.SendErrorResponse(w, "domain or matching rule not defined")
+ return
}
- dynamicProxyRouter.RootRoutingOptions = &newRootOption
- err = newRootOption.SaveToFile()
+ var targetProxyEndpoint *dynamicproxy.ProxyEndpoint
+ if epType == "root" {
+ targetProxyEndpoint = dynamicProxyRouter.Root
+ } else {
+ ep, err := dynamicProxyRouter.LoadProxy(domain)
+ if err != nil {
+ utils.SendErrorResponse(w, "target endpoint not exists")
+ return
+ }
+
+ targetProxyEndpoint = ep
+ }
+
+ //List all custom headers
+ customHeaderList := targetProxyEndpoint.UserDefinedHeaders
+ if customHeaderList == nil {
+ customHeaderList = []*dynamicproxy.UserDefinedHeader{}
+ }
+ js, _ := json.Marshal(customHeaderList)
+ utils.SendJSONResponse(w, string(js))
+
+}
+
+// Add a new header to the target endpoint
+func HandleCustomHeaderAdd(w http.ResponseWriter, r *http.Request) {
+ epType, err := utils.PostPara(r, "type")
if err != nil {
- utils.SendErrorResponse(w, err.Error())
+ utils.SendErrorResponse(w, "endpoint type not defined")
+ return
+ }
+
+ domain, err := utils.PostPara(r, "domain")
+ if err != nil {
+ utils.SendErrorResponse(w, "domain or matching rule not defined")
+ return
+ }
+
+ name, err := utils.PostPara(r, "name")
+ if err != nil {
+ utils.SendErrorResponse(w, "HTTP header name not set")
+ return
+ }
+
+ value, err := utils.PostPara(r, "value")
+ if err != nil {
+ utils.SendErrorResponse(w, "HTTP header value not set")
+ return
+ }
+
+ var targetProxyEndpoint *dynamicproxy.ProxyEndpoint
+ if epType == "root" {
+ targetProxyEndpoint = dynamicProxyRouter.Root
+ } else {
+ ep, err := dynamicProxyRouter.LoadProxy(domain)
+ if err != nil {
+ utils.SendErrorResponse(w, "target endpoint not exists")
+ return
+ }
+
+ targetProxyEndpoint = ep
+ }
+
+ //Create a new custom header object
+ targetProxyEndpoint.AddUserDefinedHeader(name, value)
+
+ //Save it (no need reload as header are not handled by dpcore)
+ err = SaveReverseProxyConfig(targetProxyEndpoint)
+ if err != nil {
+ utils.SendErrorResponse(w, "unable to save update")
return
}
utils.SendOK(w)
}
+
+// Remove a header from the target endpoint
+func HandleCustomHeaderRemove(w http.ResponseWriter, r *http.Request) {
+ epType, err := utils.PostPara(r, "type")
+ if err != nil {
+ utils.SendErrorResponse(w, "endpoint type not defined")
+ return
+ }
+
+ domain, err := utils.PostPara(r, "domain")
+ if err != nil {
+ utils.SendErrorResponse(w, "domain or matching rule not defined")
+ return
+ }
+
+ name, err := utils.PostPara(r, "name")
+ if err != nil {
+ utils.SendErrorResponse(w, "HTTP header name not set")
+ return
+ }
+
+ var targetProxyEndpoint *dynamicproxy.ProxyEndpoint
+ if epType == "root" {
+ targetProxyEndpoint = dynamicProxyRouter.Root
+ } else {
+ ep, err := dynamicProxyRouter.LoadProxy(domain)
+ if err != nil {
+ utils.SendErrorResponse(w, "target endpoint not exists")
+ return
+ }
+
+ targetProxyEndpoint = ep
+ }
+
+ targetProxyEndpoint.RemoveUserDefinedHeader(name)
+
+ err = SaveReverseProxyConfig(targetProxyEndpoint)
+ if err != nil {
+ utils.SendErrorResponse(w, "unable to save update")
+ return
+ }
+
+ utils.SendOK(w)
+
+}
diff --git a/src/router.go b/src/router.go
index d02befc..3b64237 100644
--- a/src/router.go
+++ b/src/router.go
@@ -15,6 +15,8 @@ import (
This script holds the static resources router
for the reverse proxy service
+
+ If you are looking for reverse proxy handler, see Server.go in mod/dynamicproxy/
*/
func FSHandler(handler http.Handler) http.Handler {
diff --git a/src/routingrule.go b/src/routingrule.go
new file mode 100644
index 0000000..f704376
--- /dev/null
+++ b/src/routingrule.go
@@ -0,0 +1,35 @@
+package main
+
+import (
+ "net/http"
+ "strings"
+
+ "imuslab.com/zoraxy/mod/dynamicproxy"
+)
+
+/*
+ Routing Rule
+
+ This script handle special routing rules for some utilities functions
+*/
+
+// Register the system build-in routing rules into the core
+func registerBuildInRoutingRules() {
+ //Cloudflare email decoder
+ //It decode the email address if you are proxying a cloudflare protected site
+ //[email-protected] -> real@email.com
+ dynamicProxyRouter.AddRoutingRules(&dynamicproxy.RoutingRule{
+ ID: "cloudflare-decoder",
+ MatchRule: func(r *http.Request) bool {
+ return strings.HasSuffix(r.RequestURI, "cloudflare-static/email-decode.min.js")
+ },
+ RoutingHandler: func(w http.ResponseWriter, r *http.Request) {
+ decoder := "function fixObfuscatedEmails(){let t=document.getElementsByClassName(\"__cf_email__\");for(let e=0;e
Key Type | -Exists | -
---|---|
Default Public Key | -- |
Default Private Key | -- |
Upload Default Keypairs
- - - -Provide certificates for multiple domains reverse proxy
Current list of loaded certificates
Domain | Last Update | Expire At | +Renew | Remove |
---|
Key Type | +Found | +
---|---|
Fallback Public Key | ++ |
Fallback Private Key | ++ |
Upload Default Keypairs
+ + +Management features regarding CA and ACME
+The default CA to use when create a new subdomain proxy endpoint with TLS certificate
To join this network using command line, type sudo zerotier-cli join
on your device terminal
Optionally you can add the network controller (ZeroTier running on the Zoraxy node) as member for cross GAN reverse proxy to bypass NAT limitations.
+If you need custom header, content or status code other than basic redirects, you can use the advance path rules editor.
-You can create a proxy endpoing by subdomain or virtual directories
-Enter the username and password for allowing them to access this proxy endpoint
-Username | -Password | -Remove | -
---|---|---|
No Entered Credential | -
You can add more proxy rules to support more site via domain / subdomains
+Enter the username and password for allowing them to access this proxy endpoint
+Username | +Password | +Remove | +
---|---|---|
No Entered Credential | +
s1.arozos.com
arozos.com
/s1/home/
/s1/room-
s1.arozos.com
*.arozos.com
/s1/room-101
/s1/room-102/
/s1/room-103/map.txt
www.arozos.com
foo.bar.arozos.com
Overall Network I/O in Current Host Server
+Graph Render Paused
+Graph Render Paused
Inbound Port (Port to be proxied)
If you have no idea what are these, you can leave them as default :)