diff --git a/AGENTS.md b/AGENTS.md
index 713c18c46f..d0e6761643 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -41,6 +41,7 @@ REPOSITORY_ROOT/
│ ├── Create-FlagFromSVG.ps1 # Create flag images
│ ├── Create-OUIListFromWeb.ps1 # Update OUI (MAC vendor) list
│ ├── Create-PortListFromWeb.ps1 # Update port list database
+│ ├── Create-PublicSuffixListFromWeb.ps1 # Update public suffix list (RDAP: registered domain of a hostname)
│ ├── Create-ReleaseTable.ps1 # Create the SHA256 sums / file table for release notes
│ ├── Create-WhoisServerListFromWebAndWhois.ps1 # Update WHOIS servers
│ ├── Create-WorldMapFromWeb.ps1 # Create the world map (Traceroute map)
diff --git a/Scripts/Create-PublicSuffixListFromWeb.ps1 b/Scripts/Create-PublicSuffixListFromWeb.ps1
new file mode 100644
index 0000000000..0ce6a4a6dd
--- /dev/null
+++ b/Scripts/Create-PublicSuffixListFromWeb.ps1
@@ -0,0 +1,44 @@
+# Filepath in the resources
+[string]$OutFilePath = Join-Path -Path (Split-Path $PSScriptRoot -Parent) -ChildPath "Source\NETworkManager.Models\Resources\PublicSuffixList.dat"
+
+# Download the public suffix list (MPL 2.0) from publicsuffix.org
+$List = (Invoke-WebRequest -Uri "https://publicsuffix.org/list/public_suffix_list.dat").Content -split "[`r`n]+"
+
+# Keep the license notice, version and commit of the list
+$Header = $List | Where-Object { $_ -match "^// (This Source Code Form|License, v\. 2\.0|file, You can obtain|VERSION:|COMMIT:)" }
+
+# Only the ICANN section is used, since the private section (e.g. github.io) doesn't contain registered domains
+$IsICANN = $false
+$IdnMapping = New-Object System.Globalization.IdnMapping
+
+$Rules = foreach ($Line in $List) {
+ if ($Line -eq "// ===BEGIN ICANN DOMAINS===") {
+ $IsICANN = $true
+ continue
+ }
+
+ if ($Line -eq "// ===END ICANN DOMAINS===") {
+ break
+ }
+
+ $Rule = $Line.Trim()
+
+ if (-not $IsICANN -or [string]::IsNullOrEmpty($Rule) -or $Rule.StartsWith("//")) {
+ continue
+ }
+
+ # Rules are converted to A-labels (punycode), like the queries. Wildcard (*.) and exception (!) prefixes are kept.
+ $Prefix = if ($Rule.StartsWith("*.")) { "*." } elseif ($Rule.StartsWith("!")) { "!" } else { "" }
+
+ $Prefix + $IdnMapping.GetAscii($Rule.Substring($Prefix.Length)).ToLowerInvariant()
+}
+
+$Description = @"
+$($Header -join "`n")
+//
+// ICANN section of the public suffix list from https://publicsuffix.org/list/public_suffix_list.dat, with the
+// rules converted to A-labels (punycode).
+// Generated $(Get-Date) by Scripts/Create-PublicSuffixListFromWeb.ps1
+"@
+
+Set-Content -Path $OutFilePath -Value (@($Description) + $Rules) -Encoding utf8NoBOM
diff --git a/Source/NETworkManager.Converters/HostnameHasDomainToBooleanConverter.cs b/Source/NETworkManager.Converters/HostnameHasDomainToBooleanConverter.cs
new file mode 100644
index 0000000000..be188890e9
--- /dev/null
+++ b/Source/NETworkManager.Converters/HostnameHasDomainToBooleanConverter.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+
+namespace NETworkManager.Converters;
+
+///
+/// Convert a hostname to : true if it has a domain (e.g. "server01.borntoberoot.net"), false for
+/// a single label like a NetBIOS name ("SERVER01").
+///
+public sealed class HostnameHasDomainToBooleanConverter : IValueConverter
+{
+ ///
+ /// Convert a hostname to .
+ ///
+ /// Hostname as .
+ ///
+ ///
+ ///
+ /// True if the hostname has a domain, otherwise false.
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value is string hostname && hostname.Trim('.').Contains('.');
+ }
+
+ ///
+ /// !!! Method not implemented !!!
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/Source/NETworkManager.Converters/RDAPQueryTypeToWatermarkConverter.cs b/Source/NETworkManager.Converters/RDAPQueryTypeToWatermarkConverter.cs
new file mode 100644
index 0000000000..f3281bae55
--- /dev/null
+++ b/Source/NETworkManager.Converters/RDAPQueryTypeToWatermarkConverter.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+using NETworkManager.Localization.Resources;
+using NETworkManager.Models.RDAP;
+
+namespace NETworkManager.Converters;
+
+///
+/// Convert to an example input (watermark).
+///
+public sealed class RDAPQueryTypeToWatermarkConverter : IValueConverter
+{
+ ///
+ /// Convert to an example input (watermark).
+ ///
+ /// Object from type .
+ ///
+ ///
+ ///
+ /// Example input for the .
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value switch
+ {
+ RDAPQueryType.Nameserver => StaticStrings.ExampleRDAPNameserver,
+ RDAPQueryType.TLD => StaticStrings.ExampleTLD,
+ RDAPQueryType.IPAddress => StaticStrings.ExampleIPAddressOrCIDR,
+ RDAPQueryType.ASN => StaticStrings.ExampleASN,
+ RDAPQueryType.Entity => StaticStrings.ExampleRDAPEntityHandle,
+ _ => StaticStrings.ExampleDomain
+ };
+ }
+
+ ///
+ /// !!! Method not implemented !!!
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/Source/NETworkManager.Documentation/ResourceManager.cs b/Source/NETworkManager.Documentation/ResourceManager.cs
index 9fdb827a05..643cbc1e58 100644
--- a/Source/NETworkManager.Documentation/ResourceManager.cs
+++ b/Source/NETworkManager.Documentation/ResourceManager.cs
@@ -27,6 +27,9 @@ public static class ResourceManager
Strings.Resource_ListTLD_Description),
new("natural-earth-geojson", "https://github.com/martynafford/natural-earth-geojson",
- Strings.Resource_NaturalEarth_Description)
+ Strings.Resource_NaturalEarth_Description),
+
+ new("Public Suffix List", "https://publicsuffix.org/",
+ Strings.Resource_PublicSuffixList_Description)
];
}
\ No newline at end of file
diff --git a/Source/NETworkManager.Localization/Resources/StaticStrings.Designer.cs b/Source/NETworkManager.Localization/Resources/StaticStrings.Designer.cs
index 9086aaf302..a8fd398f88 100644
--- a/Source/NETworkManager.Localization/Resources/StaticStrings.Designer.cs
+++ b/Source/NETworkManager.Localization/Resources/StaticStrings.Designer.cs
@@ -591,6 +591,15 @@ public static string ExampleRDAPEntityHandle {
}
}
+ ///
+ /// Looks up a localized string similar to a.iana-servers.net.
+ ///
+ public static string ExampleRDAPNameserver {
+ get {
+ return ResourceManager.GetString("ExampleRDAPNameserver", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to COM5.
///
diff --git a/Source/NETworkManager.Localization/Resources/StaticStrings.resx b/Source/NETworkManager.Localization/Resources/StaticStrings.resx
index 64d770e8d1..e881eaa0a9 100644
--- a/Source/NETworkManager.Localization/Resources/StaticStrings.resx
+++ b/Source/NETworkManager.Localization/Resources/StaticStrings.resx
@@ -372,4 +372,7 @@
ORG-RIEN1-RIPE
+
+ a.iana-servers.net
+
\ No newline at end of file
diff --git a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
index f009997dd5..a741b6bd2c 100644
--- a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
+++ b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
@@ -1274,6 +1274,15 @@ public static string ASName {
}
}
+ ///
+ /// Looks up a localized string similar to AS numbers.
+ ///
+ public static string ASNumbers {
+ get {
+ return ResourceManager.GetString("ASNumbers", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to At least one application must be visible!.
///
@@ -4318,6 +4327,15 @@ public static string EnterValidMACAddress {
}
}
+ ///
+ /// Looks up a localized string similar to Enter a valid nameserver (e.g., "ns1.example.com")!.
+ ///
+ public static string EnterValidNameserver {
+ get {
+ return ResourceManager.GetString("EnterValidNameserver", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Enter a valid number!.
///
@@ -4354,6 +4372,15 @@ public static string EnterValidPortOrPortRange {
}
}
+ ///
+ /// Looks up a localized string similar to Enter a valid domain, IP address, AS number or entity handle!.
+ ///
+ public static string EnterValidRDAPQuery {
+ get {
+ return ResourceManager.GetString("EnterValidRDAPQuery", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Enter a valid subnet (e.g., 192.168.178.133/26)!.
///
@@ -9455,6 +9482,15 @@ public static string RDAPBootstrapUnavailableX {
}
}
+ ///
+ /// Looks up a localized string similar to RDAP....
+ ///
+ public static string RDAPDots {
+ get {
+ return ResourceManager.GetString("RDAPDots", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to The server returned an error: {0}.
///
@@ -9536,6 +9572,15 @@ public static string RDAPQueryType_ASN {
}
}
+ ///
+ /// Looks up a localized string similar to Auto.
+ ///
+ public static string RDAPQueryType_Auto {
+ get {
+ return ResourceManager.GetString("RDAPQueryType_Auto", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Domain.
///
@@ -9563,6 +9608,15 @@ public static string RDAPQueryType_IPAddress {
}
}
+ ///
+ /// Looks up a localized string similar to Nameserver.
+ ///
+ public static string RDAPQueryType_Nameserver {
+ get {
+ return ResourceManager.GetString("RDAPQueryType_Nameserver", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to TLD.
///
@@ -9599,6 +9653,15 @@ public static string RDAPReferralFailedX {
}
}
+ ///
+ /// Looks up a localized string similar to The RDAP server did not respond within {0} seconds..
+ ///
+ public static string RDAPTimeoutAfterXSeconds {
+ get {
+ return ResourceManager.GetString("RDAPTimeoutAfterXSeconds", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Too many redirects..
///
@@ -9608,6 +9671,15 @@ public static string RDAPTooManyRedirects {
}
}
+ ///
+ /// Looks up a localized string similar to "{0}" is not a registered domain, showing the registration data of "{1}"..
+ ///
+ public static string RDAPXIsNotARegisteredDomainShowingY {
+ get {
+ return ResourceManager.GetString("RDAPXIsNotARegisteredDomainShowingY", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Received.
///
@@ -10985,6 +11057,15 @@ public static string Resource_OUI_Description {
}
}
+ ///
+ /// Looks up a localized string similar to List of public suffixes (e.g. "co.uk") from publicsuffix.org (MPL-2.0), which is used to get the registered domain of a hostname for RDAP queries..
+ ///
+ public static string Resource_PublicSuffixList_Description {
+ get {
+ return ResourceManager.GetString("Resource_PublicSuffixList_Description", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Service Name and Transport Protocol Port Number Registry from iana.org..
///
diff --git a/Source/NETworkManager.Localization/Resources/Strings.resx b/Source/NETworkManager.Localization/Resources/Strings.resx
index 8a727ed0af..c0559d2548 100644
--- a/Source/NETworkManager.Localization/Resources/Strings.resx
+++ b/Source/NETworkManager.Localization/Resources/Strings.resx
@@ -4809,4 +4809,31 @@ Cloudflare may log your IP address and network information. See Cloudflare's pri
Delete rules ({0})
+
+ Auto
+
+
+ Enter a valid domain, IP address, AS number or entity handle!
+
+
+ The RDAP server did not respond within {0} seconds.
+
+
+ Nameserver
+
+
+ Enter a valid nameserver (e.g., "ns1.example.com")!
+
+
+ AS numbers
+
+
+ RDAP...
+
+
+ "{0}" is not a registered domain, showing the registration data of "{1}".
+
+
+ List of public suffixes (e.g. "co.uk") from publicsuffix.org (MPL-2.0), which is used to get the registered domain of a hostname for RDAP queries.
+
\ No newline at end of file
diff --git a/Source/NETworkManager.Models/NETworkManager.Models.csproj b/Source/NETworkManager.Models/NETworkManager.Models.csproj
index 834de3882f..7f177215fb 100644
--- a/Source/NETworkManager.Models/NETworkManager.Models.csproj
+++ b/Source/NETworkManager.Models/NETworkManager.Models.csproj
@@ -15,6 +15,7 @@
+
@@ -23,6 +24,7 @@
+
diff --git a/Source/NETworkManager.Models/RDAP/PublicSuffixList.cs b/Source/NETworkManager.Models/RDAP/PublicSuffixList.cs
new file mode 100644
index 0000000000..1c5b0df6b3
--- /dev/null
+++ b/Source/NETworkManager.Models/RDAP/PublicSuffixList.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using log4net;
+
+namespace NETworkManager.Models.RDAP;
+
+///
+/// Public suffix list (ICANN section, see Scripts/Create-PublicSuffixListFromWeb.ps1) to get the registered domain of
+/// a hostname (e.g. "bbc.co.uk" for "www.bbc.co.uk"). Registries only know registered domains, not their
+/// subdomains or public suffixes like "co.uk".
+///
+public static class PublicSuffixList
+{
+ private static readonly ILog Log = LogManager.GetLogger(typeof(PublicSuffixList));
+
+ private const string Resource = "NETworkManager.Models.Resources.PublicSuffixList.dat";
+
+ private static readonly Lazy<(HashSet Rules, HashSet Wildcards, HashSet Exceptions)>
+ List = new(Load);
+
+ ///
+ /// Gets the registered domain (public suffix plus one label) of a domain name, following the algorithm of
+ /// https://publicsuffix.org/list/: an exception rule wins, otherwise the longest matching rule, otherwise the
+ /// TLD ("*").
+ ///
+ /// Domain name in lowercase A-label form (e.g. "www.bbc.co.uk").
+ /// Registered domain (e.g. "bbc.co.uk"), or null if the domain is a public suffix itself.
+ public static string GetRegisteredDomain(string domain)
+ {
+ var (rules, wildcards, exceptions) = List.Value;
+
+ var labels = domain.Split('.');
+
+ // Index of the first label of the public suffix, the TLD by default.
+ var suffixIndex = labels.Length - 1;
+
+ for (var i = 0; i < labels.Length; i++)
+ {
+ var name = string.Join('.', labels[i..]);
+
+ if (exceptions.Contains(name))
+ {
+ suffixIndex = i + 1;
+ break;
+ }
+
+ if (rules.Contains(name) || i + 1 < labels.Length && wildcards.Contains(string.Join('.', labels[(i + 1)..])))
+ {
+ suffixIndex = i;
+ break;
+ }
+ }
+
+ return suffixIndex > 0 ? string.Join('.', labels[(suffixIndex - 1)..]) : null;
+ }
+
+ private static (HashSet, HashSet, HashSet) Load()
+ {
+ HashSet rules = new(StringComparer.Ordinal);
+ HashSet wildcards = new(StringComparer.Ordinal);
+ HashSet exceptions = new(StringComparer.Ordinal);
+
+ try
+ {
+ using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Resource);
+
+ if (stream == null)
+ return (rules, wildcards, exceptions);
+
+ using var reader = new StreamReader(stream);
+
+ while (reader.ReadLine() is { } line)
+ {
+ if (line.Length == 0 || line.StartsWith("//"))
+ continue;
+
+ if (line.StartsWith("*."))
+ wildcards.Add(line[2..]);
+ else if (line.StartsWith('!'))
+ exceptions.Add(line[1..]);
+ else
+ rules.Add(line);
+ }
+ }
+ catch (Exception ex)
+ {
+ // Without the list, the TLD is used as public suffix (default rule).
+ Log.Error("Could not load the public suffix list.", ex);
+ }
+
+ return (rules, wildcards, exceptions);
+ }
+}
diff --git a/Source/NETworkManager.Models/RDAP/RDAPBootstrapService.cs b/Source/NETworkManager.Models/RDAP/RDAPBootstrapService.cs
index 65864e292a..b01eac4a6f 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPBootstrapService.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPBootstrapService.cs
@@ -55,6 +55,13 @@ public class RDAPBootstrapService : SingletonBase
///
private static readonly TimeSpan RetryInterval = TimeSpan.FromHours(1);
+ ///
+ /// Wait time before the next automatic attempt for a file that is not cached (e.g. the first query was made
+ /// offline). It is short, since the query type can't be used without the file, but a blocked data.iana.org
+ /// doesn't cost a timeout with every query.
+ ///
+ private static readonly TimeSpan MissingFileRetryInterval = TimeSpan.FromMinutes(1);
+
///
/// Number of failed automatic attempts after which a cached file is used until the next regular
/// (e.g. if data.iana.org is blocked). "Update now" always checks.
@@ -67,6 +74,11 @@ public class RDAPBootstrapService : SingletonBase
private string _cacheDirectory;
private List _cacheInfos;
+ ///
+ /// The cached files have been read (). They are only read again if a file changed.
+ ///
+ private bool _registriesLoaded;
+
private Dictionary> _dns;
private List<(IPNetwork Network, List Urls)> _ipv4;
private List<(IPNetwork Network, List Urls)> _ipv6;
@@ -173,7 +185,8 @@ public List GetBaseUrls(RDAPQuery query)
var urls = query.Type switch
{
RDAPQueryType.TLD => [IANARootZoneUrl],
- RDAPQueryType.Domain => FindDomain(query.DomainName),
+ // A nameserver is served by the registry of its TLD (RFC 9224 4).
+ RDAPQueryType.Domain or RDAPQueryType.Nameserver => FindDomain(query.DomainName),
RDAPQueryType.IPAddress => FindIPAddress(query.IPAddress, query.PrefixLength),
RDAPQueryType.ASN => FindASN(query.ASN),
RDAPQueryType.Entity => FindEntity(query.Handle),
@@ -319,12 +332,19 @@ private async Task UpdateAsync(string cacheDirectory, bool force, CancellationTo
Directory.CreateDirectory(_cacheDirectory);
+ // Load the cached files first (once), so a file that can't be parsed is downloaded again in this update (see
+ // ReadServices).
+ if (!_registriesLoaded)
+ LoadRegistries();
+
var attempted = false;
var contentChanged = false;
Exception networkError = null;
foreach (var info in _cacheInfos)
{
+ var path = Path.Combine(_cacheDirectory, info.FileName);
+
// "Expires" is the time of the next check, after a successful update as well as after a failure.
if (!force && info.Expires > DateTime.Now)
continue;
@@ -340,8 +360,6 @@ private async Task UpdateAsync(string cacheDirectory, bool force, CancellationTo
continue;
}
- var path = Path.Combine(_cacheDirectory, info.FileName);
-
try
{
contentChanged |= await DownloadAsync(info, path, File.Exists(path), cancellationToken)
@@ -361,7 +379,7 @@ private async Task UpdateAsync(string cacheDirectory, bool force, CancellationTo
}
// The cached copy is kept and used, if an update fails.
- if (contentChanged || _dns == null)
+ if (contentChanged)
LoadRegistries();
if (attempted)
@@ -382,7 +400,7 @@ private async Task UpdateAsync(string cacheDirectory, bool force, CancellationTo
///
/// Records a failed update. A cached file is retried after , at most
/// times, then after the regular . A missing file
- /// is retried after , since the query type cannot be used without it.
+ /// is retried after .
///
private void RecordFailure(RDAPBootstrapCacheInfo info, Exception ex)
{
@@ -391,9 +409,11 @@ private void RecordFailure(RDAPBootstrapCacheInfo info, Exception ex)
var exists = File.Exists(Path.Combine(_cacheDirectory, info.FileName));
- info.Expires = DateTime.Now + (exists && info.FailedAttempts >= MaxFailedAttempts
- ? RefreshInterval
- : RetryInterval);
+ info.Expires = DateTime.Now + (!exists
+ ? MissingFileRetryInterval
+ : info.FailedAttempts >= MaxFailedAttempts
+ ? RefreshInterval
+ : RetryInterval);
}
///
@@ -557,7 +577,7 @@ private void LoadCacheInfos(string cacheDirectory)
return;
_cacheDirectory = cacheDirectory;
- _dns = null;
+ _registriesLoaded = false;
List stored = null;
@@ -650,6 +670,8 @@ private static RDAPBootstrapCacheInfo Clone(RDAPBootstrapCacheInfo info)
private void LoadRegistries()
{
+ _registriesLoaded = true;
+
_dns = ToDictionary(ReadServices(RDAPBootstrapFileType.DNS));
_objectTags = ToDictionary(ReadServices(RDAPBootstrapFileType.ObjectTags));
_ipv4 = ToNetworks(ReadServices(RDAPBootstrapFileType.IPv4));
@@ -680,6 +702,16 @@ private void LoadRegistries()
catch (Exception ex)
{
Log.Error($"Could not parse RDAP bootstrap file {path}.", ex);
+
+ // Download the file again with the next query. Without ETag and Last-Modified, the request is not
+ // conditional, so the server can't answer with "304 Not Modified" and the file is replaced.
+ var info = _cacheInfos.First(x => x.Type == type);
+
+ info.ETag = null;
+ info.LastModified = null;
+ info.Expires = null;
+ info.LastError = ex.Message;
+
return null;
}
}
diff --git a/Source/NETworkManager.Models/RDAP/RDAPClient.cs b/Source/NETworkManager.Models/RDAP/RDAPClient.cs
index bd7ca7c3f2..6a5c43597b 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPClient.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPClient.cs
@@ -114,11 +114,19 @@ public async Task QueryAsync(RDAPQuery query, string cacheDirectory,
if (query.Type != RDAPQueryType.TLD)
await bootstrapService.EnsureUpToDateAsync(cacheDirectory, cancellationToken).ConfigureAwait(false);
- var baseUrls = bootstrapService.GetBaseUrls(query);
+ return await QueryServersAsync(query, bootstrapService.GetBaseUrls(query), timeout, followReferral,
+ cancellationToken).ConfigureAwait(false);
+ }
+ ///
+ /// Queries the servers in order until one answers.
+ ///
+ private async Task QueryServersAsync(RDAPQuery query, List baseUrls, TimeSpan timeout,
+ bool followReferral, CancellationToken cancellationToken)
+ {
RDAPException lastNetworkError = null;
- // Try the next server only on network errors. Any HTTP answer is authoritative for the query.
+ // Try the next server only on network errors and timeouts. Any HTTP answer is authoritative for the query.
foreach (var baseUrl in baseUrls)
{
try
@@ -131,7 +139,7 @@ public async Task QueryAsync(RDAPQuery query, string cacheDirectory,
return result;
}
- catch (RDAPException ex) when (ex.Kind == RDAPErrorKind.Network)
+ catch (RDAPException ex) when (ex.Kind is RDAPErrorKind.Network or RDAPErrorKind.Timeout)
{
Log.Warn($"RDAP request to {ex.RequestUrl} failed: {ex.Message}");
lastNetworkError = ex;
@@ -151,14 +159,17 @@ public async Task QueryAsync(RDAPQuery query, string cacheDirectory,
/// URL of the referral, or null if there is none.
public static string GetReferralUrl(RDAPResponse response, string requestUrl)
{
+ // Broken servers may send null items in an array.
+ var links = response.Links?.OfType().ToList() ?? [];
+
var selfUrls = new List { requestUrl };
- selfUrls.AddRange(response.Links?.Where(x => HasRel(x, "self")).Select(x => x.Href) ?? []);
+ selfUrls.AddRange(links.Where(x => HasRel(x, "self")).Select(x => x.Href));
- var candidates = response.Links?
+ var candidates = links
.Where(x => HasRel(x, "related") && IsHttpUrl(x.Href) &&
!selfUrls.Any(self => UrlEquals(self, x.Href)))
- .ToList() ?? [];
+ .ToList();
return (candidates.FirstOrDefault(x => IsRDAPMediaType(x.Type)) ??
candidates.FirstOrDefault(x => string.IsNullOrEmpty(x.Type) && HasRDAPPath(x.Href)))?.Href;
@@ -236,11 +247,16 @@ private async Task GetAsync(RDAPQuery query, string url, TimeSpan ti
// Blocked by ConnectToPublicAddressAsync.
throw new RDAPException(inner.Kind, inner.Message, ex) { RequestUrl = currentUrl.AbsoluteUri };
}
- catch (Exception ex) when (ex is HttpRequestException or OperationCanceledException)
+ catch (OperationCanceledException ex)
{
- var message = ex is OperationCanceledException ? $"Timeout after {timeout.TotalSeconds} s." : ex.Message;
-
- throw new RDAPException(RDAPErrorKind.Network, message, ex) { RequestUrl = currentUrl.AbsoluteUri };
+ // The message is only logged, the view model shows a localized one.
+ throw new RDAPException(RDAPErrorKind.Timeout,
+ FormattableString.Invariant($"Timeout after {timeout.TotalSeconds} s."), ex)
+ { RequestUrl = currentUrl.AbsoluteUri };
+ }
+ catch (HttpRequestException ex)
+ {
+ throw new RDAPException(RDAPErrorKind.Network, ex.Message, ex) { RequestUrl = currentUrl.AbsoluteUri };
}
using (response)
@@ -271,7 +287,9 @@ private async Task GetAsync(RDAPQuery query, string url, TimeSpan ti
///
/// Checks the target of a referral, which is sent by the registry and therefore untrusted. Only HTTPS is allowed
/// (no downgrade to plain text) and the host must not resolve to a local or private address, so a response
- /// cannot make the client send requests into the local network.
+ /// cannot make the client send requests into the local network. If the host can't be resolved locally and the
+ /// request goes through a proxy, the referral is followed without the check, since the proxy resolves the host
+ /// (networks where only the proxy resolves public names).
///
private static async Task ValidateReferralTargetAsync(Uri url, CancellationToken cancellationToken)
{
@@ -294,9 +312,14 @@ private static async Task ValidateReferralTargetAsync(Uri url, CancellationToken
{
addresses = await Dns.GetHostAddressesAsync(url.DnsSafeHost, cancellationToken).ConfigureAwait(false);
}
+ catch (SocketException) when (IsProxied(url))
+ {
+ // The proxy resolves the host.
+ return;
+ }
catch (SocketException ex)
{
- // Fail closed: a referral is only followed if its address could be checked.
+ // Fail closed: without a proxy, a referral is only followed if its address could be checked.
throw new RDAPException(RDAPErrorKind.Network, ex.Message, ex) { RequestUrl = url.AbsoluteUri };
}
}
@@ -305,6 +328,16 @@ private static async Task ValidateReferralTargetAsync(Uri url, CancellationToken
throw new RDAPException(RDAPErrorKind.PrivateAddress, url.AbsoluteUri) { RequestUrl = url.AbsoluteUri };
}
+ ///
+ /// Whether a request to the URL goes through the system proxy (the proxy of the referral client).
+ ///
+ private static bool IsProxied(Uri url)
+ {
+ var proxy = HttpClient.DefaultProxy;
+
+ return !proxy.IsBypassed(url) && proxy.GetProxy(url) != null;
+ }
+
///
/// Connect callback of the referral client: resolves the host once, checks all addresses and connects to exactly
/// these addresses, so a second DNS answer (DNS rebinding) cannot redirect the connection to a local or private
@@ -344,7 +377,9 @@ private static async ValueTask ConnectToPublicAddressAsync(SocketsHttpCo
}
///
- /// Loopback, private (RFC 1918, RFC 4193), shared (RFC 6598), link-local, unspecified and multicast addresses.
+ /// Loopback, private (RFC 1918, RFC 4193), shared (RFC 6598), link-local, unspecified, multicast and special
+ /// purpose (IETF protocol assignments, benchmarking) addresses. IPv6 addresses that contain an IPv4 address
+ /// (NAT64, 6to4) are checked by that IPv4 address, since they are translated or tunneled to it.
///
private static bool IsLocalOrPrivateAddress(IPAddress address)
{
@@ -361,7 +396,19 @@ private static bool IsLocalOrPrivateAddress(IPAddress address)
bytes[0] == 172 && (bytes[1] & 0xF0) == 16 ||
bytes[0] == 192 && bytes[1] == 168 ||
bytes[0] == 169 && bytes[1] == 254 ||
- bytes[0] == 100 && (bytes[1] & 0xC0) == 64;
+ bytes[0] == 100 && (bytes[1] & 0xC0) == 64 ||
+ bytes[0] == 192 && bytes[1] == 0 && bytes[2] == 0 ||
+ bytes[0] == 198 && (bytes[1] & 0xFE) == 18;
+
+ // NAT64 (RFC 6052): the well-known prefix 64:ff9b::/96 contains the IPv4 address in the last 4 bytes. Other
+ // addresses in 64:ff9b::/32, e.g. the local-use prefix 64:ff9b:1::/48 (RFC 8215), are translated by the local
+ // network operator and are therefore treated as local.
+ if (bytes[0] == 0x00 && bytes[1] == 0x64 && bytes[2] == 0xFF && bytes[3] == 0x9B)
+ return bytes[4..12].Any(x => x != 0) || IsLocalOrPrivateAddress(new IPAddress(bytes[12..]));
+
+ // 6to4 (RFC 3056): 2002::/16 contains the IPv4 address in bytes 2-5.
+ if (bytes[0] == 0x20 && bytes[1] == 0x02)
+ return IsLocalOrPrivateAddress(new IPAddress(bytes[2..6]));
return address.Equals(IPAddress.IPv6Any) || address.IsIPv6LinkLocal || address.IsIPv6SiteLocal ||
address.IsIPv6Multicast || (bytes[0] & 0xFE) == 0xFC;
diff --git a/Source/NETworkManager.Models/RDAP/RDAPException.cs b/Source/NETworkManager.Models/RDAP/RDAPException.cs
index 14fcab7597..1253fe719f 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPException.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPException.cs
@@ -68,9 +68,14 @@ public enum RDAPErrorKind
InvalidResponse,
///
- /// DNS, connection, TLS or timeout error for all known servers.
+ /// DNS, connection or TLS error for all known servers.
///
- Network
+ Network,
+
+ ///
+ /// The server did not respond within the timeout.
+ ///
+ Timeout
}
///
diff --git a/Source/NETworkManager.Models/RDAP/RDAPQuery.cs b/Source/NETworkManager.Models/RDAP/RDAPQuery.cs
index 0df4ffaeef..c3d5430680 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPQuery.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPQuery.cs
@@ -23,7 +23,7 @@ public class RDAPQuery
public string PathSegment { get; init; }
///
- /// Domain name in A-label form (Domain and TLD queries only).
+ /// Domain name in A-label form (Domain, Nameserver and TLD queries only).
///
public string DomainName { get; init; }
diff --git a/Source/NETworkManager.Models/RDAP/RDAPQueryParseError.cs b/Source/NETworkManager.Models/RDAP/RDAPQueryParseError.cs
index 4212a78fb8..fa2aa95d0e 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPQueryParseError.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPQueryParseError.cs
@@ -6,7 +6,9 @@ namespace NETworkManager.Models.RDAP;
public enum RDAPQueryParseError
{
None,
+ InvalidQuery,
InvalidDomain,
+ InvalidNameserver,
InvalidTLD,
InvalidIPAddress,
InvalidASN,
diff --git a/Source/NETworkManager.Models/RDAP/RDAPQueryParser.cs b/Source/NETworkManager.Models/RDAP/RDAPQueryParser.cs
index 9e640c2c86..4c7382b11d 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPQueryParser.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPQueryParser.cs
@@ -23,7 +23,7 @@ public static partial class RDAPQueryParser
///
/// Parses the input for the given query type.
///
- /// Type of the query.
+ /// Type of the query. detects the type from the input.
/// User input.
/// Normalized query if the input is valid.
/// if the input is valid, otherwise the error.
@@ -36,9 +36,12 @@ public static RDAPQueryParseError TryParse(RDAPQueryType type, string input, out
if (string.IsNullOrEmpty(input))
return GetError(type);
- query = type switch
+ var parseType = type == RDAPQueryType.Auto ? DetectType(input) : type;
+
+ query = parseType switch
{
RDAPQueryType.Domain => ParseDomain(input),
+ RDAPQueryType.Nameserver => ParseNameserver(input),
RDAPQueryType.TLD => ParseTLD(input),
RDAPQueryType.IPAddress => ParseIPAddress(input),
RDAPQueryType.ASN => ParseASN(input),
@@ -52,7 +55,8 @@ public static RDAPQueryParseError TryParse(RDAPQueryType type, string input, out
///
/// Detects the query type of an input without a type (e.g. data redirected from another tool): IP address or
/// CIDR, AS number ("AS15169", "15169", "1.10"), TLD (single label), entity handle (single label with a hyphen,
- /// e.g. "ORG-RIEN1-RIPE"), otherwise domain.
+ /// e.g. "ORG-RIEN1-RIPE"), otherwise domain. The detected type is not validated, use
+ /// for that.
///
/// User input.
/// Detected query type.
@@ -81,7 +85,9 @@ private static RDAPQueryParseError GetError(RDAPQueryType type)
{
return type switch
{
+ RDAPQueryType.Auto => RDAPQueryParseError.InvalidQuery,
RDAPQueryType.Domain => RDAPQueryParseError.InvalidDomain,
+ RDAPQueryType.Nameserver => RDAPQueryParseError.InvalidNameserver,
RDAPQueryType.TLD => RDAPQueryParseError.InvalidTLD,
RDAPQueryType.IPAddress => RDAPQueryParseError.InvalidIPAddress,
RDAPQueryType.ASN => RDAPQueryParseError.InvalidASN,
@@ -105,11 +111,20 @@ private static string ToALabel(string domain)
}
}
+ ///
+ /// A top-level domain is never all-numeric (RFC 3696 2), so inputs like "8.8.8.8" or "13335" are rejected as
+ /// domain or TLD.
+ ///
+ private static bool HasNumericTLD(string domain)
+ {
+ return domain[(domain.LastIndexOf('.') + 1)..].All(char.IsAsciiDigit);
+ }
+
private static RDAPQuery ParseDomain(string input)
{
var domain = ToALabel(input.Trim('.'));
- if (string.IsNullOrEmpty(domain))
+ if (string.IsNullOrEmpty(domain) || HasNumericTLD(domain))
return null;
// A single label is a TLD, which is only served by the IANA root zone RDAP server.
@@ -125,12 +140,48 @@ private static RDAPQuery ParseDomain(string input)
};
}
+ ///
+ /// Gets the query for the registered domain of a domain query, if the domain is a subdomain (e.g. "bbc.co.uk" for
+ /// "www.bbc.co.uk", see ). Registries only know registered domains and answer a
+ /// subdomain with 404 (e.g. Verisign, Nominet) or 400 (e.g. PIR, Identity Digital, SWITCH, auDA).
+ ///
+ /// Domain query.
+ /// Query for the registered domain, or null if the domain is a registered domain or a public suffix.
+ public static RDAPQuery GetRegisteredDomain(RDAPQuery query)
+ {
+ if (query.Type != RDAPQueryType.Domain)
+ return null;
+
+ var registeredDomain = PublicSuffixList.GetRegisteredDomain(query.DomainName);
+
+ return registeredDomain == null || registeredDomain == query.DomainName ? null : ParseDomain(registeredDomain);
+ }
+
+ ///
+ /// Parses a nameserver (host name with at least two labels, RFC 9082 3.1.4).
+ ///
+ private static RDAPQuery ParseNameserver(string input)
+ {
+ var name = ToALabel(input.Trim('.'));
+
+ if (string.IsNullOrEmpty(name) || !name.Contains('.') || HasNumericTLD(name))
+ return null;
+
+ return new RDAPQuery
+ {
+ Type = RDAPQueryType.Nameserver,
+ Value = name,
+ DomainName = name,
+ PathSegment = $"nameserver/{name}"
+ };
+ }
+
private static RDAPQuery ParseTLD(string input)
{
// rdap.iana.org returns 400 for ".de", so the leading dot must be removed.
var tld = ToALabel(input.Trim('.'));
- if (string.IsNullOrEmpty(tld) || tld.Contains('.'))
+ if (string.IsNullOrEmpty(tld) || tld.Contains('.') || HasNumericTLD(tld))
return null;
return CreateTLDQuery(tld);
@@ -249,9 +300,15 @@ private static RDAPQuery ParseASN(string input)
};
}
+ ///
+ /// An entity can only be resolved via its service provider tag after the last hyphen (RFC 8521), so a handle
+ /// without a tag (e.g. "8.8.8.8") is rejected.
+ ///
private static RDAPQuery ParseEntity(string input)
{
- if (input.Any(char.IsWhiteSpace) || input.Contains('/'))
+ var index = input.LastIndexOf('-');
+
+ if (input.Any(char.IsWhiteSpace) || input.Contains('/') || index <= 0 || index == input.Length - 1)
return null;
return new RDAPQuery
diff --git a/Source/NETworkManager.Models/RDAP/RDAPQueryType.cs b/Source/NETworkManager.Models/RDAP/RDAPQueryType.cs
index 7c5f9a0ea9..3845ae2086 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPQueryType.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPQueryType.cs
@@ -5,11 +5,21 @@ namespace NETworkManager.Models.RDAP;
///
public enum RDAPQueryType
{
+ ///
+ /// Detects the type from the input (see ).
+ ///
+ Auto,
+
///
/// Domain name (e.g. example.com), resolved via the IANA DNS bootstrap.
///
Domain,
+ ///
+ /// Nameserver (e.g. a.iana-servers.net), resolved via the IANA DNS bootstrap (registry of its TLD).
+ ///
+ Nameserver,
+
///
/// Top-level domain (e.g. de), queried directly against the IANA root zone RDAP server.
///
diff --git a/Source/NETworkManager.Models/RDAP/RDAPResponse.cs b/Source/NETworkManager.Models/RDAP/RDAPResponse.cs
index 581bb2f7fe..81ca04a743 100644
--- a/Source/NETworkManager.Models/RDAP/RDAPResponse.cs
+++ b/Source/NETworkManager.Models/RDAP/RDAPResponse.cs
@@ -46,6 +46,18 @@ public class RDAPObject
// Entity
[JsonProperty("roles")] public List Roles { get; set; }
+ ///
+ /// IP networks of an entity (RFC 9083 5.1), e.g. sent by ARIN for an organization.
+ ///
+ [JsonProperty("networks")]
+ public List Networks { get; set; }
+
+ ///
+ /// AS numbers of an entity (RFC 9083 5.1), e.g. sent by ARIN for an organization.
+ ///
+ [JsonProperty("autnums")]
+ public List Autnums { get; set; }
+
///
/// jCard (RFC 7095). Kept as raw JSON, since its shape varies between servers. See .
///
diff --git a/Source/NETworkManager.Models/Resources/PublicSuffixList.dat b/Source/NETworkManager.Models/Resources/PublicSuffixList.dat
new file mode 100644
index 0000000000..b7349810d3
--- /dev/null
+++ b/Source/NETworkManager.Models/Resources/PublicSuffixList.dat
@@ -0,0 +1,6958 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
+// VERSION: 2026-10-20_08-40-56_UTC
+// COMMIT: 5dd321ffe02039e2431382a095cf80e27ff5eb94
+//
+// ICANN section of the public suffix list from https://publicsuffix.org/list/public_suffix_list.dat, with the
+// rules converted to A-labels (punycode).
+// Generated 10/21/2026 14:07:34 by Scripts/Create-PublicSuffixListFromWeb.ps1
+ac
+com.ac
+edu.ac
+gov.ac
+mil.ac
+net.ac
+org.ac
+ad
+ae
+ac.ae
+co.ae
+gov.ae
+mil.ae
+net.ae
+org.ae
+sch.ae
+aero
+airline.aero
+airport.aero
+accident-investigation.aero
+accident-prevention.aero
+aerobatic.aero
+aeroclub.aero
+aerodrome.aero
+agents.aero
+air-surveillance.aero
+air-traffic-control.aero
+aircraft.aero
+airtraffic.aero
+ambulance.aero
+association.aero
+author.aero
+ballooning.aero
+broker.aero
+caa.aero
+cargo.aero
+catering.aero
+certification.aero
+championship.aero
+charter.aero
+civilaviation.aero
+club.aero
+conference.aero
+consultant.aero
+consulting.aero
+control.aero
+council.aero
+crew.aero
+design.aero
+dgca.aero
+educator.aero
+emergency.aero
+engine.aero
+engineer.aero
+entertainment.aero
+equipment.aero
+exchange.aero
+express.aero
+federation.aero
+flight.aero
+freight.aero
+fuel.aero
+gliding.aero
+government.aero
+groundhandling.aero
+group.aero
+hanggliding.aero
+homebuilt.aero
+insurance.aero
+journal.aero
+journalist.aero
+leasing.aero
+logistics.aero
+magazine.aero
+maintenance.aero
+marketplace.aero
+media.aero
+microlight.aero
+modelling.aero
+navigation.aero
+parachuting.aero
+paragliding.aero
+passenger-association.aero
+pilot.aero
+press.aero
+production.aero
+recreation.aero
+repbody.aero
+res.aero
+research.aero
+rotorcraft.aero
+safety.aero
+scientist.aero
+services.aero
+show.aero
+skydiving.aero
+software.aero
+student.aero
+taxi.aero
+trader.aero
+trading.aero
+trainer.aero
+union.aero
+workinggroup.aero
+works.aero
+af
+com.af
+edu.af
+gov.af
+net.af
+org.af
+ag
+co.ag
+com.ag
+net.ag
+nom.ag
+org.ag
+ai
+com.ai
+net.ai
+off.ai
+org.ai
+al
+com.al
+edu.al
+gov.al
+mil.al
+net.al
+org.al
+am
+co.am
+com.am
+commune.am
+net.am
+org.am
+ao
+co.ao
+ed.ao
+edu.ao
+gov.ao
+gv.ao
+it.ao
+og.ao
+org.ao
+pb.ao
+aq
+ar
+bet.ar
+com.ar
+coop.ar
+edu.ar
+gob.ar
+gov.ar
+int.ar
+mil.ar
+musica.ar
+mutual.ar
+net.ar
+org.ar
+seg.ar
+senasa.ar
+tur.ar
+arpa
+e164.arpa
+home.arpa
+in-addr.arpa
+ip6.arpa
+iris.arpa
+uri.arpa
+urn.arpa
+as
+gov.as
+asia
+at
+ac.at
+sth.ac.at
+co.at
+gv.at
+or.at
+au
+asn.au
+com.au
+edu.au
+gov.au
+id.au
+net.au
+org.au
+conf.au
+oz.au
+act.au
+nsw.au
+nt.au
+qld.au
+sa.au
+tas.au
+vic.au
+wa.au
+act.edu.au
+catholic.edu.au
+nsw.edu.au
+nt.edu.au
+qld.edu.au
+sa.edu.au
+tas.edu.au
+vic.edu.au
+wa.edu.au
+qld.gov.au
+sa.gov.au
+tas.gov.au
+vic.gov.au
+wa.gov.au
+aw
+com.aw
+ax
+az
+biz.az
+co.az
+com.az
+edu.az
+gov.az
+info.az
+int.az
+mil.az
+name.az
+net.az
+org.az
+pp.az
+pro.az
+ba
+com.ba
+edu.ba
+gov.ba
+mil.ba
+net.ba
+org.ba
+bb
+biz.bb
+co.bb
+com.bb
+edu.bb
+gov.bb
+info.bb
+net.bb
+org.bb
+store.bb
+tv.bb
+bd
+ac.bd
+ai.bd
+co.bd
+com.bd
+edu.bd
+gov.bd
+id.bd
+info.bd
+it.bd
+mil.bd
+net.bd
+org.bd
+sch.bd
+tv.bd
+be
+ac.be
+bf
+gov.bf
+bg
+0.bg
+1.bg
+2.bg
+3.bg
+4.bg
+5.bg
+6.bg
+7.bg
+8.bg
+9.bg
+a.bg
+b.bg
+c.bg
+d.bg
+e.bg
+f.bg
+g.bg
+h.bg
+i.bg
+j.bg
+k.bg
+l.bg
+m.bg
+n.bg
+o.bg
+p.bg
+q.bg
+r.bg
+s.bg
+t.bg
+u.bg
+v.bg
+w.bg
+x.bg
+y.bg
+z.bg
+bh
+com.bh
+edu.bh
+gov.bh
+net.bh
+org.bh
+bi
+co.bi
+com.bi
+edu.bi
+or.bi
+org.bi
+biz
+bj
+africa.bj
+agro.bj
+architectes.bj
+assur.bj
+avocats.bj
+co.bj
+com.bj
+eco.bj
+econo.bj
+edu.bj
+info.bj
+loisirs.bj
+money.bj
+net.bj
+org.bj
+ote.bj
+restaurant.bj
+resto.bj
+tourism.bj
+univ.bj
+bm
+com.bm
+edu.bm
+gov.bm
+net.bm
+org.bm
+bn
+com.bn
+edu.bn
+gov.bn
+net.bn
+org.bn
+bo
+com.bo
+edu.bo
+gob.bo
+int.bo
+mil.bo
+net.bo
+org.bo
+tv.bo
+web.bo
+academia.bo
+agro.bo
+arte.bo
+blog.bo
+bolivia.bo
+ciencia.bo
+cooperativa.bo
+democracia.bo
+deporte.bo
+ecologia.bo
+economia.bo
+empresa.bo
+ia.bo
+indigena.bo
+industria.bo
+info.bo
+medicina.bo
+movimiento.bo
+musica.bo
+natural.bo
+nombre.bo
+noticias.bo
+patria.bo
+plurinacional.bo
+politica.bo
+profesional.bo
+pueblo.bo
+revista.bo
+salud.bo
+tecnologia.bo
+tksat.bo
+transporte.bo
+wiki.bo
+br
+9guacu.br
+abc.br
+adm.br
+adv.br
+agr.br
+aju.br
+am.br
+anani.br
+aparecida.br
+api.br
+app.br
+arq.br
+art.br
+ato.br
+b.br
+barueri.br
+belem.br
+bet.br
+bhz.br
+bib.br
+bio.br
+blog.br
+bmd.br
+boavista.br
+bsb.br
+campinagrande.br
+campinas.br
+caxias.br
+cim.br
+cng.br
+cnt.br
+com.br
+contagem.br
+coop.br
+coz.br
+cri.br
+cuiaba.br
+curitiba.br
+def.br
+des.br
+det.br
+dev.br
+ecn.br
+eco.br
+edu.br
+emp.br
+enf.br
+eng.br
+esp.br
+etc.br
+eti.br
+far.br
+feira.br
+flog.br
+floripa.br
+fm.br
+fnd.br
+fortal.br
+fot.br
+foz.br
+fst.br
+g12.br
+geo.br
+ggf.br
+goiania.br
+gov.br
+ac.gov.br
+al.gov.br
+am.gov.br
+ap.gov.br
+ba.gov.br
+ce.gov.br
+df.gov.br
+es.gov.br
+go.gov.br
+ma.gov.br
+mg.gov.br
+ms.gov.br
+mt.gov.br
+pa.gov.br
+pb.gov.br
+pe.gov.br
+pi.gov.br
+pr.gov.br
+rj.gov.br
+rn.gov.br
+ro.gov.br
+rr.gov.br
+rs.gov.br
+sc.gov.br
+se.gov.br
+sp.gov.br
+to.gov.br
+gru.br
+ia.br
+imb.br
+ind.br
+inf.br
+jab.br
+jampa.br
+jdf.br
+joinville.br
+jor.br
+jus.br
+leg.br
+leilao.br
+lel.br
+log.br
+londrina.br
+macapa.br
+maceio.br
+manaus.br
+maringa.br
+mat.br
+med.br
+mil.br
+morena.br
+mp.br
+mus.br
+natal.br
+net.br
+niteroi.br
+*.nom.br
+not.br
+ntr.br
+odo.br
+ong.br
+org.br
+osasco.br
+palmas.br
+poa.br
+ppg.br
+pro.br
+psc.br
+psi.br
+pvh.br
+qsl.br
+radio.br
+rec.br
+recife.br
+rep.br
+ribeirao.br
+rio.br
+riobranco.br
+riopreto.br
+salvador.br
+sampa.br
+santamaria.br
+santoandre.br
+saobernardo.br
+saogonca.br
+seg.br
+sjc.br
+slg.br
+slz.br
+social.br
+sorocaba.br
+srv.br
+taxi.br
+tc.br
+tec.br
+teo.br
+the.br
+tmp.br
+trd.br
+tur.br
+tv.br
+udi.br
+vet.br
+vix.br
+vlog.br
+wiki.br
+xyz.br
+zlg.br
+bs
+com.bs
+edu.bs
+gov.bs
+net.bs
+org.bs
+bt
+com.bt
+edu.bt
+gov.bt
+net.bt
+org.bt
+bv
+bw
+ac.bw
+co.bw
+gov.bw
+net.bw
+org.bw
+by
+gov.by
+mil.by
+com.by
+of.by
+bz
+co.bz
+com.bz
+edu.bz
+gov.bz
+net.bz
+org.bz
+ca
+ab.ca
+bc.ca
+mb.ca
+nb.ca
+nf.ca
+nl.ca
+ns.ca
+nt.ca
+nu.ca
+on.ca
+pe.ca
+qc.ca
+sk.ca
+yk.ca
+gc.ca
+cat
+cc
+cd
+gov.cd
+cf
+cg
+ch
+ci
+ac.ci
+xn--aroport-bya.ci
+asso.ci
+co.ci
+com.ci
+ed.ci
+edu.ci
+go.ci
+gouv.ci
+int.ci
+net.ci
+or.ci
+org.ci
+*.ck
+!www.ck
+cl
+co.cl
+gob.cl
+gov.cl
+mil.cl
+cm
+co.cm
+com.cm
+gov.cm
+net.cm
+cn
+ac.cn
+com.cn
+edu.cn
+gov.cn
+mil.cn
+net.cn
+org.cn
+xn--55qx5d.cn
+xn--od0alg.cn
+xn--io0a7i.cn
+ah.cn
+bj.cn
+cq.cn
+fj.cn
+gd.cn
+gs.cn
+gx.cn
+gz.cn
+ha.cn
+hb.cn
+he.cn
+hi.cn
+hk.cn
+hl.cn
+hn.cn
+jl.cn
+js.cn
+jx.cn
+ln.cn
+mo.cn
+nm.cn
+nx.cn
+qh.cn
+sc.cn
+sd.cn
+sh.cn
+sn.cn
+sx.cn
+tj.cn
+tw.cn
+xj.cn
+xz.cn
+yn.cn
+zj.cn
+co
+com.co
+edu.co
+gov.co
+mil.co
+net.co
+nom.co
+org.co
+com
+coop
+cr
+ac.cr
+co.cr
+ed.cr
+fi.cr
+go.cr
+or.cr
+sa.cr
+cu
+com.cu
+edu.cu
+gob.cu
+inf.cu
+nat.cu
+net.cu
+org.cu
+cv
+com.cv
+edu.cv
+id.cv
+int.cv
+net.cv
+nome.cv
+org.cv
+publ.cv
+cw
+com.cw
+edu.cw
+net.cw
+org.cw
+cx
+gov.cx
+cy
+ac.cy
+biz.cy
+com.cy
+ekloges.cy
+gov.cy
+ltd.cy
+mil.cy
+net.cy
+org.cy
+press.cy
+pro.cy
+tm.cy
+cz
+gov.cz
+de
+dj
+dk
+dm
+co.dm
+com.dm
+edu.dm
+gov.dm
+net.dm
+org.dm
+do
+art.do
+com.do
+edu.do
+gob.do
+gov.do
+mil.do
+net.do
+org.do
+sld.do
+web.do
+dz
+art.dz
+asso.dz
+com.dz
+edu.dz
+gov.dz
+net.dz
+org.dz
+pol.dz
+soc.dz
+tm.dz
+ec
+abg.ec
+adm.ec
+agron.ec
+arqt.ec
+art.ec
+bar.ec
+chef.ec
+com.ec
+cont.ec
+cpa.ec
+cue.ec
+dent.ec
+dgn.ec
+disco.ec
+doc.ec
+edu.ec
+eng.ec
+esm.ec
+fin.ec
+fot.ec
+gal.ec
+gob.ec
+gov.ec
+gye.ec
+ibr.ec
+info.ec
+k12.ec
+lat.ec
+loj.ec
+med.ec
+mil.ec
+mktg.ec
+mon.ec
+net.ec
+ntr.ec
+odont.ec
+org.ec
+pro.ec
+prof.ec
+psic.ec
+psiq.ec
+pub.ec
+rio.ec
+rrpp.ec
+sal.ec
+tech.ec
+tul.ec
+tur.ec
+uio.ec
+vet.ec
+xxx.ec
+edu
+ee
+aip.ee
+com.ee
+edu.ee
+fie.ee
+gov.ee
+lib.ee
+med.ee
+org.ee
+pri.ee
+riik.ee
+eg
+ac.eg
+com.eg
+edu.eg
+eun.eg
+gov.eg
+info.eg
+me.eg
+mil.eg
+name.eg
+net.eg
+org.eg
+sci.eg
+sport.eg
+tv.eg
+*.er
+es
+com.es
+edu.es
+gob.es
+nom.es
+org.es
+et
+biz.et
+com.et
+edu.et
+gov.et
+info.et
+name.et
+net.et
+org.et
+eu
+fi
+aland.fi
+fj
+ac.fj
+biz.fj
+com.fj
+edu.fj
+gov.fj
+id.fj
+info.fj
+mil.fj
+name.fj
+net.fj
+org.fj
+pro.fj
+*.fk
+fm
+com.fm
+edu.fm
+net.fm
+org.fm
+fo
+fr
+asso.fr
+com.fr
+gouv.fr
+nom.fr
+prd.fr
+tm.fr
+avoues.fr
+cci.fr
+greta.fr
+huissier-justice.fr
+ga
+gb
+gd
+edu.gd
+gov.gd
+ge
+com.ge
+cyb.ge
+edu.ge
+gov.ge
+llc.ge
+net.ge
+online.ge
+org.ge
+pvt.ge
+school.ge
+tnx.ge
+gf
+gg
+co.gg
+net.gg
+org.gg
+gh
+biz.gh
+com.gh
+edu.gh
+gov.gh
+mil.gh
+net.gh
+org.gh
+gi
+com.gi
+edu.gi
+gov.gi
+ltd.gi
+mod.gi
+org.gi
+gl
+co.gl
+com.gl
+edu.gl
+net.gl
+org.gl
+gm
+gn
+ac.gn
+com.gn
+edu.gn
+gov.gn
+net.gn
+org.gn
+gov
+gp
+asso.gp
+com.gp
+edu.gp
+mobi.gp
+net.gp
+org.gp
+gq
+gr
+com.gr
+edu.gr
+gov.gr
+net.gr
+org.gr
+gs
+gt
+com.gt
+edu.gt
+gob.gt
+ind.gt
+mil.gt
+net.gt
+org.gt
+gu
+com.gu
+edu.gu
+gov.gu
+guam.gu
+info.gu
+net.gu
+org.gu
+web.gu
+gw
+gy
+co.gy
+com.gy
+edu.gy
+gov.gy
+net.gy
+org.gy
+hk
+com.hk
+edu.hk
+gov.hk
+idv.hk
+net.hk
+org.hk
+xn--ciqpn.hk
+xn--gmqw5a.hk
+xn--55qx5d.hk
+xn--mxtq1m.hk
+xn--lcvr32d.hk
+xn--wcvs22d.hk
+xn--gmq050i.hk
+xn--uc0atv.hk
+xn--uc0ay4a.hk
+xn--od0alg.hk
+xn--zf0avx.hk
+xn--mk0axi.hk
+xn--tn0ag.hk
+xn--od0aq3b.hk
+xn--io0a7i.hk
+hm
+hn
+com.hn
+edu.hn
+gob.hn
+mil.hn
+net.hn
+org.hn
+hr
+com.hr
+from.hr
+iz.hr
+name.hr
+ht
+adult.ht
+art.ht
+asso.ht
+com.ht
+coop.ht
+edu.ht
+firm.ht
+gouv.ht
+info.ht
+med.ht
+net.ht
+org.ht
+perso.ht
+pol.ht
+pro.ht
+rel.ht
+shop.ht
+hu
+2000.hu
+agrar.hu
+bolt.hu
+casino.hu
+city.hu
+co.hu
+erotica.hu
+erotika.hu
+film.hu
+forum.hu
+games.hu
+hotel.hu
+info.hu
+ingatlan.hu
+jogasz.hu
+konyvelo.hu
+lakas.hu
+media.hu
+news.hu
+org.hu
+priv.hu
+reklam.hu
+sex.hu
+shop.hu
+sport.hu
+suli.hu
+szex.hu
+tm.hu
+tozsde.hu
+utazas.hu
+video.hu
+id
+ac.id
+ai.id
+biz.id
+co.id
+desa.id
+go.id
+kop.id
+mil.id
+my.id
+net.id
+or.id
+ponpes.id
+sch.id
+web.id
+xn--9tfky.id
+ie
+gov.ie
+il
+ac.il
+co.il
+gov.il
+idf.il
+k12.il
+muni.il
+net.il
+org.il
+xn--4dbrk0ce
+xn--4dbgdty6c.xn--4dbrk0ce
+xn--5dbhl8d.xn--4dbrk0ce
+xn--8dbq2a.xn--4dbrk0ce
+xn--hebda8b.xn--4dbrk0ce
+im
+ac.im
+co.im
+ltd.co.im
+plc.co.im
+com.im
+net.im
+org.im
+tt.im
+tv.im
+in
+5g.in
+6g.in
+ac.in
+aero.in
+ai.in
+alumni.in
+am.in
+bank.in
+bihar.in
+biz.in
+business.in
+ca.in
+cn.in
+co.in
+com.in
+coop.in
+cs.in
+delhi.in
+dr.in
+edu.in
+er.in
+fin.in
+firm.in
+gen.in
+gov.in
+gujarat.in
+ind.in
+info.in
+int.in
+internet.in
+io.in
+me.in
+mil.in
+net.in
+nic.in
+org.in
+pg.in
+post.in
+pro.in
+res.in
+school.in
+travel.in
+tv.in
+ub.in
+uk.in
+up.in
+us.in
+info
+int
+eu.int
+io
+co.io
+com.io
+edu.io
+gov.io
+mil.io
+net.io
+nom.io
+org.io
+iq
+com.iq
+edu.iq
+gov.iq
+mil.iq
+net.iq
+org.iq
+ir
+ac.ir
+co.ir
+gov.ir
+id.ir
+net.ir
+org.ir
+sch.ir
+xn--mgba3a4f16a.ir
+xn--mgba3a4fra.ir
+is
+it
+edu.it
+gov.it
+abr.it
+abruzzo.it
+aosta-valley.it
+aostavalley.it
+bas.it
+basilicata.it
+cal.it
+calabria.it
+cam.it
+campania.it
+emilia-romagna.it
+emiliaromagna.it
+emr.it
+friuli-v-giulia.it
+friuli-ve-giulia.it
+friuli-vegiulia.it
+friuli-venezia-giulia.it
+friuli-veneziagiulia.it
+friuli-vgiulia.it
+friuliv-giulia.it
+friulive-giulia.it
+friulivegiulia.it
+friulivenezia-giulia.it
+friuliveneziagiulia.it
+friulivgiulia.it
+fvg.it
+laz.it
+lazio.it
+lig.it
+liguria.it
+lom.it
+lombardia.it
+lombardy.it
+lucania.it
+mar.it
+marche.it
+mol.it
+molise.it
+piedmont.it
+piemonte.it
+pmn.it
+pug.it
+puglia.it
+sar.it
+sardegna.it
+sardinia.it
+sic.it
+sicilia.it
+sicily.it
+taa.it
+tos.it
+toscana.it
+trentin-sud-tirol.it
+xn--trentin-sd-tirol-rzb.it
+trentin-sudtirol.it
+xn--trentin-sdtirol-7vb.it
+trentin-sued-tirol.it
+trentin-suedtirol.it
+trentino-a-adige.it
+trentino-aadige.it
+trentino-alto-adige.it
+trentino-altoadige.it
+trentino-s-tirol.it
+trentino-stirol.it
+trentino-sud-tirol.it
+xn--trentino-sd-tirol-c3b.it
+trentino-sudtirol.it
+xn--trentino-sdtirol-szb.it
+trentino-sued-tirol.it
+trentino-suedtirol.it
+trentinoa-adige.it
+trentinoaadige.it
+trentinoalto-adige.it
+trentinoaltoadige.it
+trentinos-tirol.it
+trentinostirol.it
+trentinosud-tirol.it
+xn--trentinosd-tirol-rzb.it
+xn--trentinosdtirol-7vb.it
+trentinosued-tirol.it
+trentinosuedtirol.it
+trentinsud-tirol.it
+xn--trentinsd-tirol-6vb.it
+trentinsudtirol.it
+xn--trentinsdtirol-nsb.it
+trentinsued-tirol.it
+trentinsuedtirol.it
+tuscany.it
+umb.it
+umbria.it
+val-d-aosta.it
+val-daosta.it
+vald-aosta.it
+valle-aosta.it
+valle-d-aosta.it
+valle-daosta.it
+valleaosta.it
+valled-aosta.it
+valledaosta.it
+vallee-aoste.it
+xn--valle-aoste-ebb.it
+vallee-d-aoste.it
+xn--valle-d-aoste-ehb.it
+valleeaoste.it
+xn--valleaoste-e7a.it
+valleedaoste.it
+xn--valledaoste-ebb.it
+vao.it
+vda.it
+ven.it
+veneto.it
+ag.it
+agrigento.it
+al.it
+alessandria.it
+alto-adige.it
+altoadige.it
+an.it
+ancona.it
+andria-barletta-trani.it
+andria-trani-barletta.it
+andriabarlettatrani.it
+andriatranibarletta.it
+ao.it
+aosta.it
+aoste.it
+ap.it
+aq.it
+ar.it
+arezzo.it
+ascoli-piceno.it
+ascolipiceno.it
+asti.it
+at.it
+av.it
+avellino.it
+ba.it
+balsan.it
+balsan-sudtirol.it
+xn--balsan-sdtirol-nsb.it
+balsan-suedtirol.it
+bari.it
+barletta-trani-andria.it
+barlettatraniandria.it
+belluno.it
+benevento.it
+bergamo.it
+bg.it
+bi.it
+biella.it
+bl.it
+bn.it
+bo.it
+bologna.it
+bolzano.it
+bolzano-altoadige.it
+bozen.it
+bozen-sudtirol.it
+xn--bozen-sdtirol-2ob.it
+bozen-suedtirol.it
+br.it
+brescia.it
+brindisi.it
+bs.it
+bt.it
+bulsan.it
+bulsan-sudtirol.it
+xn--bulsan-sdtirol-nsb.it
+bulsan-suedtirol.it
+bz.it
+ca.it
+cagliari.it
+caltanissetta.it
+campidano-medio.it
+campidanomedio.it
+campobasso.it
+carbonia-iglesias.it
+carboniaiglesias.it
+carrara-massa.it
+carraramassa.it
+caserta.it
+catania.it
+catanzaro.it
+cb.it
+ce.it
+cesena-forli.it
+xn--cesena-forl-mcb.it
+cesenaforli.it
+xn--cesenaforl-i8a.it
+ch.it
+chieti.it
+ci.it
+cl.it
+cn.it
+co.it
+como.it
+cosenza.it
+cr.it
+cremona.it
+crotone.it
+cs.it
+ct.it
+cuneo.it
+cz.it
+dell-ogliastra.it
+dellogliastra.it
+en.it
+enna.it
+fc.it
+fe.it
+fermo.it
+ferrara.it
+fg.it
+fi.it
+firenze.it
+florence.it
+fm.it
+foggia.it
+forli-cesena.it
+xn--forl-cesena-fcb.it
+forlicesena.it
+xn--forlcesena-c8a.it
+fr.it
+frosinone.it
+ge.it
+genoa.it
+genova.it
+go.it
+gorizia.it
+gr.it
+grosseto.it
+iglesias-carbonia.it
+iglesiascarbonia.it
+im.it
+imperia.it
+is.it
+isernia.it
+kr.it
+la-spezia.it
+laquila.it
+laspezia.it
+latina.it
+lc.it
+le.it
+lecce.it
+lecco.it
+li.it
+livorno.it
+lo.it
+lodi.it
+lt.it
+lu.it
+lucca.it
+macerata.it
+mantova.it
+massa-carrara.it
+massacarrara.it
+matera.it
+mb.it
+mc.it
+me.it
+medio-campidano.it
+mediocampidano.it
+messina.it
+mi.it
+milan.it
+milano.it
+mn.it
+mo.it
+modena.it
+monza.it
+monza-brianza.it
+monza-e-della-brianza.it
+monzabrianza.it
+monzaebrianza.it
+monzaedellabrianza.it
+ms.it
+mt.it
+na.it
+naples.it
+napoli.it
+no.it
+novara.it
+nu.it
+nuoro.it
+og.it
+ogliastra.it
+olbia-tempio.it
+olbiatempio.it
+or.it
+oristano.it
+ot.it
+pa.it
+padova.it
+padua.it
+palermo.it
+parma.it
+pavia.it
+pc.it
+pd.it
+pe.it
+perugia.it
+pesaro-urbino.it
+pesarourbino.it
+pescara.it
+pg.it
+pi.it
+piacenza.it
+pisa.it
+pistoia.it
+pn.it
+po.it
+pordenone.it
+potenza.it
+pr.it
+prato.it
+pt.it
+pu.it
+pv.it
+pz.it
+ra.it
+ragusa.it
+ravenna.it
+rc.it
+re.it
+reggio-calabria.it
+reggio-emilia.it
+reggiocalabria.it
+reggioemilia.it
+rg.it
+ri.it
+rieti.it
+rimini.it
+rm.it
+rn.it
+ro.it
+roma.it
+rome.it
+rovigo.it
+sa.it
+salerno.it
+sassari.it
+savona.it
+si.it
+siena.it
+siracusa.it
+so.it
+sondrio.it
+sp.it
+sr.it
+ss.it
+su.it
+sud-sardegna.it
+sudsardegna.it
+xn--sdtirol-n2a.it
+suedtirol.it
+sv.it
+ta.it
+taranto.it
+te.it
+tempio-olbia.it
+tempioolbia.it
+teramo.it
+terni.it
+tn.it
+to.it
+torino.it
+tp.it
+tr.it
+trani-andria-barletta.it
+trani-barletta-andria.it
+traniandriabarletta.it
+tranibarlettaandria.it
+trapani.it
+trentino.it
+trento.it
+treviso.it
+trieste.it
+ts.it
+turin.it
+tv.it
+ud.it
+udine.it
+urbino-pesaro.it
+urbinopesaro.it
+va.it
+varese.it
+vb.it
+vc.it
+ve.it
+venezia.it
+venice.it
+verbania.it
+verbano-cusio-ossola.it
+vercelli.it
+verona.it
+vi.it
+vibo-valentia.it
+vibovalentia.it
+vicenza.it
+viterbo.it
+vr.it
+vs.it
+vt.it
+vv.it
+je
+co.je
+net.je
+org.je
+*.jm
+jo
+agri.jo
+ai.jo
+com.jo
+edu.jo
+eng.jo
+fm.jo
+gov.jo
+mil.jo
+net.jo
+org.jo
+per.jo
+phd.jo
+sch.jo
+tv.jo
+jobs
+jp
+ac.jp
+ad.jp
+co.jp
+ed.jp
+go.jp
+gr.jp
+lg.jp
+ne.jp
+or.jp
+aichi.jp
+akita.jp
+aomori.jp
+chiba.jp
+ehime.jp
+fukui.jp
+fukuoka.jp
+fukushima.jp
+gifu.jp
+gunma.jp
+hiroshima.jp
+hokkaido.jp
+hyogo.jp
+ibaraki.jp
+ishikawa.jp
+iwate.jp
+kagawa.jp
+kagoshima.jp
+kanagawa.jp
+kochi.jp
+kumamoto.jp
+kyoto.jp
+mie.jp
+miyagi.jp
+miyazaki.jp
+nagano.jp
+nagasaki.jp
+nara.jp
+niigata.jp
+oita.jp
+okayama.jp
+okinawa.jp
+osaka.jp
+saga.jp
+saitama.jp
+shiga.jp
+shimane.jp
+shizuoka.jp
+tochigi.jp
+tokushima.jp
+tokyo.jp
+tottori.jp
+toyama.jp
+wakayama.jp
+yamagata.jp
+yamaguchi.jp
+yamanashi.jp
+xn--ehqz56n.jp
+xn--1lqs03n.jp
+xn--qqqt11m.jp
+xn--f6qx53a.jp
+xn--djrs72d6uy.jp
+xn--mkru45i.jp
+xn--0trq7p7nn.jp
+xn--5js045d.jp
+xn--kbrq7o.jp
+xn--pssu33l.jp
+xn--ntsq17g.jp
+xn--uisz3g.jp
+xn--6btw5a.jp
+xn--1ctwo.jp
+xn--6orx2r.jp
+xn--rht61e.jp
+xn--rht27z.jp
+xn--nit225k.jp
+xn--rht3d.jp
+xn--djty4k.jp
+xn--klty5x.jp
+xn--kltx9a.jp
+xn--kltp7d.jp
+xn--c3s14m.jp
+xn--vgu402c.jp
+xn--efvn9s.jp
+xn--1lqs71d.jp
+xn--4pvxs.jp
+xn--uuwu58a.jp
+xn--zbx025d.jp
+xn--8pvr4u.jp
+xn--5rtp49c.jp
+xn--ntso0iqx3a.jp
+xn--elqq16h.jp
+xn--4it168d.jp
+xn--klt787d.jp
+xn--rny31h.jp
+xn--7t0a264c.jp
+xn--uist22h.jp
+xn--8ltr62k.jp
+xn--2m4a15e.jp
+xn--32vp30h.jp
+xn--4it797k.jp
+xn--5rtq34k.jp
+xn--k7yn95e.jp
+xn--tor131o.jp
+xn--d5qv7z876c.jp
+*.kawasaki.jp
+!city.kawasaki.jp
+*.kitakyushu.jp
+!city.kitakyushu.jp
+*.kobe.jp
+!city.kobe.jp
+*.nagoya.jp
+!city.nagoya.jp
+*.sapporo.jp
+!city.sapporo.jp
+*.sendai.jp
+!city.sendai.jp
+*.yokohama.jp
+!city.yokohama.jp
+aisai.aichi.jp
+ama.aichi.jp
+anjo.aichi.jp
+asuke.aichi.jp
+chiryu.aichi.jp
+chita.aichi.jp
+fuso.aichi.jp
+gamagori.aichi.jp
+handa.aichi.jp
+hazu.aichi.jp
+hekinan.aichi.jp
+higashiura.aichi.jp
+ichinomiya.aichi.jp
+inazawa.aichi.jp
+inuyama.aichi.jp
+isshiki.aichi.jp
+iwakura.aichi.jp
+kanie.aichi.jp
+kariya.aichi.jp
+kasugai.aichi.jp
+kira.aichi.jp
+kiyosu.aichi.jp
+komaki.aichi.jp
+konan.aichi.jp
+kota.aichi.jp
+mihama.aichi.jp
+miyoshi.aichi.jp
+nishio.aichi.jp
+nisshin.aichi.jp
+obu.aichi.jp
+oguchi.aichi.jp
+oharu.aichi.jp
+okazaki.aichi.jp
+owariasahi.aichi.jp
+seto.aichi.jp
+shikatsu.aichi.jp
+shinshiro.aichi.jp
+shitara.aichi.jp
+tahara.aichi.jp
+takahama.aichi.jp
+tobishima.aichi.jp
+toei.aichi.jp
+togo.aichi.jp
+tokai.aichi.jp
+tokoname.aichi.jp
+toyoake.aichi.jp
+toyohashi.aichi.jp
+toyokawa.aichi.jp
+toyone.aichi.jp
+toyota.aichi.jp
+tsushima.aichi.jp
+yatomi.aichi.jp
+akita.akita.jp
+daisen.akita.jp
+fujisato.akita.jp
+gojome.akita.jp
+hachirogata.akita.jp
+happou.akita.jp
+higashinaruse.akita.jp
+honjo.akita.jp
+honjyo.akita.jp
+ikawa.akita.jp
+kamikoani.akita.jp
+kamioka.akita.jp
+katagami.akita.jp
+kazuno.akita.jp
+kitaakita.akita.jp
+kosaka.akita.jp
+kyowa.akita.jp
+misato.akita.jp
+mitane.akita.jp
+moriyoshi.akita.jp
+nikaho.akita.jp
+noshiro.akita.jp
+odate.akita.jp
+oga.akita.jp
+ogata.akita.jp
+semboku.akita.jp
+yokote.akita.jp
+yurihonjo.akita.jp
+aomori.aomori.jp
+gonohe.aomori.jp
+hachinohe.aomori.jp
+hashikami.aomori.jp
+hiranai.aomori.jp
+hirosaki.aomori.jp
+itayanagi.aomori.jp
+kuroishi.aomori.jp
+misawa.aomori.jp
+mutsu.aomori.jp
+nakadomari.aomori.jp
+noheji.aomori.jp
+oirase.aomori.jp
+owani.aomori.jp
+rokunohe.aomori.jp
+sannohe.aomori.jp
+shichinohe.aomori.jp
+shingo.aomori.jp
+takko.aomori.jp
+towada.aomori.jp
+tsugaru.aomori.jp
+tsuruta.aomori.jp
+abiko.chiba.jp
+asahi.chiba.jp
+chonan.chiba.jp
+chosei.chiba.jp
+choshi.chiba.jp
+chuo.chiba.jp
+funabashi.chiba.jp
+futtsu.chiba.jp
+hanamigawa.chiba.jp
+ichihara.chiba.jp
+ichikawa.chiba.jp
+ichinomiya.chiba.jp
+inzai.chiba.jp
+isumi.chiba.jp
+kamagaya.chiba.jp
+kamogawa.chiba.jp
+kashiwa.chiba.jp
+katori.chiba.jp
+katsuura.chiba.jp
+kimitsu.chiba.jp
+kisarazu.chiba.jp
+kozaki.chiba.jp
+kujukuri.chiba.jp
+kyonan.chiba.jp
+matsudo.chiba.jp
+midori.chiba.jp
+mihama.chiba.jp
+minamiboso.chiba.jp
+mobara.chiba.jp
+mutsuzawa.chiba.jp
+nagara.chiba.jp
+nagareyama.chiba.jp
+narashino.chiba.jp
+narita.chiba.jp
+noda.chiba.jp
+oamishirasato.chiba.jp
+omigawa.chiba.jp
+onjuku.chiba.jp
+otaki.chiba.jp
+sakae.chiba.jp
+sakura.chiba.jp
+shimofusa.chiba.jp
+shirako.chiba.jp
+shiroi.chiba.jp
+shisui.chiba.jp
+sodegaura.chiba.jp
+sosa.chiba.jp
+tako.chiba.jp
+tateyama.chiba.jp
+togane.chiba.jp
+tohnosho.chiba.jp
+tomisato.chiba.jp
+urayasu.chiba.jp
+yachimata.chiba.jp
+yachiyo.chiba.jp
+yokaichiba.chiba.jp
+yokoshibahikari.chiba.jp
+yotsukaido.chiba.jp
+ainan.ehime.jp
+honai.ehime.jp
+ikata.ehime.jp
+imabari.ehime.jp
+iyo.ehime.jp
+kamijima.ehime.jp
+kihoku.ehime.jp
+kumakogen.ehime.jp
+masaki.ehime.jp
+matsuno.ehime.jp
+matsuyama.ehime.jp
+namikata.ehime.jp
+niihama.ehime.jp
+ozu.ehime.jp
+saijo.ehime.jp
+seiyo.ehime.jp
+shikokuchuo.ehime.jp
+tobe.ehime.jp
+toon.ehime.jp
+uchiko.ehime.jp
+uwajima.ehime.jp
+yawatahama.ehime.jp
+echizen.fukui.jp
+eiheiji.fukui.jp
+fukui.fukui.jp
+ikeda.fukui.jp
+katsuyama.fukui.jp
+mihama.fukui.jp
+minamiechizen.fukui.jp
+obama.fukui.jp
+ohi.fukui.jp
+ono.fukui.jp
+sabae.fukui.jp
+sakai.fukui.jp
+takahama.fukui.jp
+tsuruga.fukui.jp
+wakasa.fukui.jp
+ashiya.fukuoka.jp
+buzen.fukuoka.jp
+chikugo.fukuoka.jp
+chikuho.fukuoka.jp
+chikujo.fukuoka.jp
+chikushino.fukuoka.jp
+chikuzen.fukuoka.jp
+chuo.fukuoka.jp
+dazaifu.fukuoka.jp
+fukuchi.fukuoka.jp
+hakata.fukuoka.jp
+higashi.fukuoka.jp
+hirokawa.fukuoka.jp
+hisayama.fukuoka.jp
+iizuka.fukuoka.jp
+inatsuki.fukuoka.jp
+kaho.fukuoka.jp
+kasuga.fukuoka.jp
+kasuya.fukuoka.jp
+kawara.fukuoka.jp
+keisen.fukuoka.jp
+koga.fukuoka.jp
+kurate.fukuoka.jp
+kurogi.fukuoka.jp
+kurume.fukuoka.jp
+minami.fukuoka.jp
+miyako.fukuoka.jp
+miyama.fukuoka.jp
+miyawaka.fukuoka.jp
+mizumaki.fukuoka.jp
+munakata.fukuoka.jp
+nakagawa.fukuoka.jp
+nakama.fukuoka.jp
+nishi.fukuoka.jp
+nogata.fukuoka.jp
+ogori.fukuoka.jp
+okagaki.fukuoka.jp
+okawa.fukuoka.jp
+oki.fukuoka.jp
+omuta.fukuoka.jp
+onga.fukuoka.jp
+onojo.fukuoka.jp
+oto.fukuoka.jp
+saigawa.fukuoka.jp
+sasaguri.fukuoka.jp
+shingu.fukuoka.jp
+shinyoshitomi.fukuoka.jp
+shonai.fukuoka.jp
+soeda.fukuoka.jp
+sue.fukuoka.jp
+tachiarai.fukuoka.jp
+tagawa.fukuoka.jp
+takata.fukuoka.jp
+toho.fukuoka.jp
+toyotsu.fukuoka.jp
+tsuiki.fukuoka.jp
+ukiha.fukuoka.jp
+umi.fukuoka.jp
+usui.fukuoka.jp
+yamada.fukuoka.jp
+yame.fukuoka.jp
+yanagawa.fukuoka.jp
+yukuhashi.fukuoka.jp
+aizubange.fukushima.jp
+aizumisato.fukushima.jp
+aizuwakamatsu.fukushima.jp
+asakawa.fukushima.jp
+bandai.fukushima.jp
+date.fukushima.jp
+fukushima.fukushima.jp
+furudono.fukushima.jp
+futaba.fukushima.jp
+hanawa.fukushima.jp
+higashi.fukushima.jp
+hirata.fukushima.jp
+hirono.fukushima.jp
+iitate.fukushima.jp
+inawashiro.fukushima.jp
+ishikawa.fukushima.jp
+iwaki.fukushima.jp
+izumizaki.fukushima.jp
+kagamiishi.fukushima.jp
+kaneyama.fukushima.jp
+kawamata.fukushima.jp
+kitakata.fukushima.jp
+kitashiobara.fukushima.jp
+koori.fukushima.jp
+koriyama.fukushima.jp
+kunimi.fukushima.jp
+miharu.fukushima.jp
+mishima.fukushima.jp
+namie.fukushima.jp
+nango.fukushima.jp
+nishiaizu.fukushima.jp
+nishigo.fukushima.jp
+okuma.fukushima.jp
+omotego.fukushima.jp
+ono.fukushima.jp
+otama.fukushima.jp
+samegawa.fukushima.jp
+shimogo.fukushima.jp
+shirakawa.fukushima.jp
+showa.fukushima.jp
+soma.fukushima.jp
+sukagawa.fukushima.jp
+taishin.fukushima.jp
+tamakawa.fukushima.jp
+tanagura.fukushima.jp
+tenei.fukushima.jp
+yabuki.fukushima.jp
+yamato.fukushima.jp
+yamatsuri.fukushima.jp
+yanaizu.fukushima.jp
+yugawa.fukushima.jp
+anpachi.gifu.jp
+ena.gifu.jp
+gifu.gifu.jp
+ginan.gifu.jp
+godo.gifu.jp
+gujo.gifu.jp
+hashima.gifu.jp
+hichiso.gifu.jp
+hida.gifu.jp
+higashishirakawa.gifu.jp
+ibigawa.gifu.jp
+ikeda.gifu.jp
+kakamigahara.gifu.jp
+kani.gifu.jp
+kasahara.gifu.jp
+kasamatsu.gifu.jp
+kawaue.gifu.jp
+kitagata.gifu.jp
+mino.gifu.jp
+minokamo.gifu.jp
+mitake.gifu.jp
+mizunami.gifu.jp
+motosu.gifu.jp
+nakatsugawa.gifu.jp
+ogaki.gifu.jp
+sakahogi.gifu.jp
+seki.gifu.jp
+sekigahara.gifu.jp
+shirakawa.gifu.jp
+tajimi.gifu.jp
+takayama.gifu.jp
+tarui.gifu.jp
+toki.gifu.jp
+tomika.gifu.jp
+wanouchi.gifu.jp
+yamagata.gifu.jp
+yaotsu.gifu.jp
+yoro.gifu.jp
+annaka.gunma.jp
+chiyoda.gunma.jp
+fujioka.gunma.jp
+higashiagatsuma.gunma.jp
+isesaki.gunma.jp
+itakura.gunma.jp
+kanna.gunma.jp
+kanra.gunma.jp
+katashina.gunma.jp
+kawaba.gunma.jp
+kiryu.gunma.jp
+kusatsu.gunma.jp
+maebashi.gunma.jp
+meiwa.gunma.jp
+midori.gunma.jp
+minakami.gunma.jp
+naganohara.gunma.jp
+nakanojo.gunma.jp
+nanmoku.gunma.jp
+numata.gunma.jp
+oizumi.gunma.jp
+ora.gunma.jp
+ota.gunma.jp
+shibukawa.gunma.jp
+shimonita.gunma.jp
+shinto.gunma.jp
+showa.gunma.jp
+takasaki.gunma.jp
+takayama.gunma.jp
+tamamura.gunma.jp
+tatebayashi.gunma.jp
+tomioka.gunma.jp
+tsukiyono.gunma.jp
+tsumagoi.gunma.jp
+ueno.gunma.jp
+yoshioka.gunma.jp
+asaminami.hiroshima.jp
+daiwa.hiroshima.jp
+etajima.hiroshima.jp
+fuchu.hiroshima.jp
+fukuyama.hiroshima.jp
+hatsukaichi.hiroshima.jp
+higashihiroshima.hiroshima.jp
+hongo.hiroshima.jp
+jinsekikogen.hiroshima.jp
+kaita.hiroshima.jp
+kui.hiroshima.jp
+kumano.hiroshima.jp
+kure.hiroshima.jp
+mihara.hiroshima.jp
+miyoshi.hiroshima.jp
+naka.hiroshima.jp
+onomichi.hiroshima.jp
+osakikamijima.hiroshima.jp
+otake.hiroshima.jp
+saka.hiroshima.jp
+sera.hiroshima.jp
+seranishi.hiroshima.jp
+shinichi.hiroshima.jp
+shobara.hiroshima.jp
+takehara.hiroshima.jp
+abashiri.hokkaido.jp
+abira.hokkaido.jp
+aibetsu.hokkaido.jp
+akabira.hokkaido.jp
+akkeshi.hokkaido.jp
+asahikawa.hokkaido.jp
+ashibetsu.hokkaido.jp
+ashoro.hokkaido.jp
+assabu.hokkaido.jp
+atsuma.hokkaido.jp
+bibai.hokkaido.jp
+biei.hokkaido.jp
+bifuka.hokkaido.jp
+bihoro.hokkaido.jp
+biratori.hokkaido.jp
+chippubetsu.hokkaido.jp
+chitose.hokkaido.jp
+date.hokkaido.jp
+ebetsu.hokkaido.jp
+embetsu.hokkaido.jp
+eniwa.hokkaido.jp
+erimo.hokkaido.jp
+esan.hokkaido.jp
+esashi.hokkaido.jp
+fukagawa.hokkaido.jp
+fukushima.hokkaido.jp
+furano.hokkaido.jp
+furubira.hokkaido.jp
+haboro.hokkaido.jp
+hakodate.hokkaido.jp
+hamatonbetsu.hokkaido.jp
+hidaka.hokkaido.jp
+higashikagura.hokkaido.jp
+higashikawa.hokkaido.jp
+hiroo.hokkaido.jp
+hokuryu.hokkaido.jp
+hokuto.hokkaido.jp
+honbetsu.hokkaido.jp
+horokanai.hokkaido.jp
+horonobe.hokkaido.jp
+ikeda.hokkaido.jp
+imakane.hokkaido.jp
+ishikari.hokkaido.jp
+iwamizawa.hokkaido.jp
+iwanai.hokkaido.jp
+kamifurano.hokkaido.jp
+kamikawa.hokkaido.jp
+kamishihoro.hokkaido.jp
+kamisunagawa.hokkaido.jp
+kamoenai.hokkaido.jp
+kayabe.hokkaido.jp
+kembuchi.hokkaido.jp
+kikonai.hokkaido.jp
+kimobetsu.hokkaido.jp
+kitahiroshima.hokkaido.jp
+kitami.hokkaido.jp
+kiyosato.hokkaido.jp
+koshimizu.hokkaido.jp
+kunneppu.hokkaido.jp
+kuriyama.hokkaido.jp
+kuromatsunai.hokkaido.jp
+kushiro.hokkaido.jp
+kutchan.hokkaido.jp
+kyowa.hokkaido.jp
+mashike.hokkaido.jp
+matsumae.hokkaido.jp
+mikasa.hokkaido.jp
+minamifurano.hokkaido.jp
+mombetsu.hokkaido.jp
+moseushi.hokkaido.jp
+mukawa.hokkaido.jp
+muroran.hokkaido.jp
+naie.hokkaido.jp
+nakagawa.hokkaido.jp
+nakasatsunai.hokkaido.jp
+nakatombetsu.hokkaido.jp
+nanae.hokkaido.jp
+nanporo.hokkaido.jp
+nayoro.hokkaido.jp
+nemuro.hokkaido.jp
+niikappu.hokkaido.jp
+niki.hokkaido.jp
+nishiokoppe.hokkaido.jp
+noboribetsu.hokkaido.jp
+numata.hokkaido.jp
+obihiro.hokkaido.jp
+obira.hokkaido.jp
+oketo.hokkaido.jp
+okoppe.hokkaido.jp
+otaru.hokkaido.jp
+otobe.hokkaido.jp
+otofuke.hokkaido.jp
+otoineppu.hokkaido.jp
+oumu.hokkaido.jp
+ozora.hokkaido.jp
+pippu.hokkaido.jp
+rankoshi.hokkaido.jp
+rebun.hokkaido.jp
+rikubetsu.hokkaido.jp
+rishiri.hokkaido.jp
+rishirifuji.hokkaido.jp
+saroma.hokkaido.jp
+sarufutsu.hokkaido.jp
+shakotan.hokkaido.jp
+shari.hokkaido.jp
+shibecha.hokkaido.jp
+shibetsu.hokkaido.jp
+shikabe.hokkaido.jp
+shikaoi.hokkaido.jp
+shimamaki.hokkaido.jp
+shimizu.hokkaido.jp
+shimokawa.hokkaido.jp
+shinshinotsu.hokkaido.jp
+shintoku.hokkaido.jp
+shiranuka.hokkaido.jp
+shiraoi.hokkaido.jp
+shiriuchi.hokkaido.jp
+sobetsu.hokkaido.jp
+sunagawa.hokkaido.jp
+taiki.hokkaido.jp
+takasu.hokkaido.jp
+takikawa.hokkaido.jp
+takinoue.hokkaido.jp
+teshikaga.hokkaido.jp
+tobetsu.hokkaido.jp
+tohma.hokkaido.jp
+tomakomai.hokkaido.jp
+tomari.hokkaido.jp
+toya.hokkaido.jp
+toyako.hokkaido.jp
+toyotomi.hokkaido.jp
+toyoura.hokkaido.jp
+tsubetsu.hokkaido.jp
+tsukigata.hokkaido.jp
+urakawa.hokkaido.jp
+urausu.hokkaido.jp
+uryu.hokkaido.jp
+utashinai.hokkaido.jp
+wakkanai.hokkaido.jp
+wassamu.hokkaido.jp
+yakumo.hokkaido.jp
+yoichi.hokkaido.jp
+aioi.hyogo.jp
+akashi.hyogo.jp
+ako.hyogo.jp
+amagasaki.hyogo.jp
+aogaki.hyogo.jp
+asago.hyogo.jp
+ashiya.hyogo.jp
+awaji.hyogo.jp
+fukusaki.hyogo.jp
+goshiki.hyogo.jp
+harima.hyogo.jp
+himeji.hyogo.jp
+ichikawa.hyogo.jp
+inagawa.hyogo.jp
+itami.hyogo.jp
+kakogawa.hyogo.jp
+kamigori.hyogo.jp
+kamikawa.hyogo.jp
+kasai.hyogo.jp
+kasuga.hyogo.jp
+kawanishi.hyogo.jp
+miki.hyogo.jp
+minamiawaji.hyogo.jp
+nishinomiya.hyogo.jp
+nishiwaki.hyogo.jp
+ono.hyogo.jp
+sanda.hyogo.jp
+sannan.hyogo.jp
+sasayama.hyogo.jp
+sayo.hyogo.jp
+shingu.hyogo.jp
+shinonsen.hyogo.jp
+shiso.hyogo.jp
+sumoto.hyogo.jp
+taishi.hyogo.jp
+taka.hyogo.jp
+takarazuka.hyogo.jp
+takasago.hyogo.jp
+takino.hyogo.jp
+tamba.hyogo.jp
+tatsuno.hyogo.jp
+toyooka.hyogo.jp
+yabu.hyogo.jp
+yashiro.hyogo.jp
+yoka.hyogo.jp
+yokawa.hyogo.jp
+ami.ibaraki.jp
+asahi.ibaraki.jp
+bando.ibaraki.jp
+chikusei.ibaraki.jp
+daigo.ibaraki.jp
+fujishiro.ibaraki.jp
+hitachi.ibaraki.jp
+hitachinaka.ibaraki.jp
+hitachiomiya.ibaraki.jp
+hitachiota.ibaraki.jp
+ibaraki.ibaraki.jp
+ina.ibaraki.jp
+inashiki.ibaraki.jp
+itako.ibaraki.jp
+iwama.ibaraki.jp
+joso.ibaraki.jp
+kamisu.ibaraki.jp
+kasama.ibaraki.jp
+kashima.ibaraki.jp
+kasumigaura.ibaraki.jp
+koga.ibaraki.jp
+miho.ibaraki.jp
+mito.ibaraki.jp
+moriya.ibaraki.jp
+naka.ibaraki.jp
+namegata.ibaraki.jp
+oarai.ibaraki.jp
+ogawa.ibaraki.jp
+omitama.ibaraki.jp
+ryugasaki.ibaraki.jp
+sakai.ibaraki.jp
+sakuragawa.ibaraki.jp
+shimodate.ibaraki.jp
+shimotsuma.ibaraki.jp
+shirosato.ibaraki.jp
+sowa.ibaraki.jp
+suifu.ibaraki.jp
+takahagi.ibaraki.jp
+tamatsukuri.ibaraki.jp
+tokai.ibaraki.jp
+tomobe.ibaraki.jp
+tone.ibaraki.jp
+toride.ibaraki.jp
+tsuchiura.ibaraki.jp
+tsukuba.ibaraki.jp
+uchihara.ibaraki.jp
+ushiku.ibaraki.jp
+yachiyo.ibaraki.jp
+yamagata.ibaraki.jp
+yawara.ibaraki.jp
+yuki.ibaraki.jp
+anamizu.ishikawa.jp
+hakui.ishikawa.jp
+hakusan.ishikawa.jp
+kaga.ishikawa.jp
+kahoku.ishikawa.jp
+kanazawa.ishikawa.jp
+kawakita.ishikawa.jp
+komatsu.ishikawa.jp
+nakanoto.ishikawa.jp
+nanao.ishikawa.jp
+nomi.ishikawa.jp
+nonoichi.ishikawa.jp
+noto.ishikawa.jp
+shika.ishikawa.jp
+suzu.ishikawa.jp
+tsubata.ishikawa.jp
+tsurugi.ishikawa.jp
+uchinada.ishikawa.jp
+wajima.ishikawa.jp
+fudai.iwate.jp
+fujisawa.iwate.jp
+hanamaki.iwate.jp
+hiraizumi.iwate.jp
+hirono.iwate.jp
+ichinohe.iwate.jp
+ichinoseki.iwate.jp
+iwaizumi.iwate.jp
+iwate.iwate.jp
+joboji.iwate.jp
+kamaishi.iwate.jp
+kanegasaki.iwate.jp
+karumai.iwate.jp
+kawai.iwate.jp
+kitakami.iwate.jp
+kuji.iwate.jp
+kunohe.iwate.jp
+kuzumaki.iwate.jp
+miyako.iwate.jp
+mizusawa.iwate.jp
+morioka.iwate.jp
+ninohe.iwate.jp
+noda.iwate.jp
+ofunato.iwate.jp
+oshu.iwate.jp
+otsuchi.iwate.jp
+rikuzentakata.iwate.jp
+shiwa.iwate.jp
+shizukuishi.iwate.jp
+sumita.iwate.jp
+tanohata.iwate.jp
+tono.iwate.jp
+yahaba.iwate.jp
+yamada.iwate.jp
+ayagawa.kagawa.jp
+higashikagawa.kagawa.jp
+kanonji.kagawa.jp
+kotohira.kagawa.jp
+manno.kagawa.jp
+marugame.kagawa.jp
+mitoyo.kagawa.jp
+naoshima.kagawa.jp
+sanuki.kagawa.jp
+tadotsu.kagawa.jp
+takamatsu.kagawa.jp
+tonosho.kagawa.jp
+uchinomi.kagawa.jp
+utazu.kagawa.jp
+zentsuji.kagawa.jp
+akune.kagoshima.jp
+amami.kagoshima.jp
+hioki.kagoshima.jp
+isa.kagoshima.jp
+isen.kagoshima.jp
+izumi.kagoshima.jp
+kagoshima.kagoshima.jp
+kanoya.kagoshima.jp
+kawanabe.kagoshima.jp
+kinko.kagoshima.jp
+kouyama.kagoshima.jp
+makurazaki.kagoshima.jp
+matsumoto.kagoshima.jp
+minamitane.kagoshima.jp
+nakatane.kagoshima.jp
+nishinoomote.kagoshima.jp
+satsumasendai.kagoshima.jp
+soo.kagoshima.jp
+tarumizu.kagoshima.jp
+yusui.kagoshima.jp
+aikawa.kanagawa.jp
+atsugi.kanagawa.jp
+ayase.kanagawa.jp
+chigasaki.kanagawa.jp
+ebina.kanagawa.jp
+fujisawa.kanagawa.jp
+hadano.kanagawa.jp
+hakone.kanagawa.jp
+hiratsuka.kanagawa.jp
+isehara.kanagawa.jp
+kaisei.kanagawa.jp
+kamakura.kanagawa.jp
+kiyokawa.kanagawa.jp
+matsuda.kanagawa.jp
+minamiashigara.kanagawa.jp
+miura.kanagawa.jp
+nakai.kanagawa.jp
+ninomiya.kanagawa.jp
+odawara.kanagawa.jp
+oi.kanagawa.jp
+oiso.kanagawa.jp
+sagamihara.kanagawa.jp
+samukawa.kanagawa.jp
+tsukui.kanagawa.jp
+yamakita.kanagawa.jp
+yamato.kanagawa.jp
+yokosuka.kanagawa.jp
+yugawara.kanagawa.jp
+zama.kanagawa.jp
+zushi.kanagawa.jp
+aki.kochi.jp
+geisei.kochi.jp
+hidaka.kochi.jp
+higashitsuno.kochi.jp
+ino.kochi.jp
+kagami.kochi.jp
+kami.kochi.jp
+kitagawa.kochi.jp
+kochi.kochi.jp
+mihara.kochi.jp
+motoyama.kochi.jp
+muroto.kochi.jp
+nahari.kochi.jp
+nakamura.kochi.jp
+nankoku.kochi.jp
+nishitosa.kochi.jp
+niyodogawa.kochi.jp
+ochi.kochi.jp
+okawa.kochi.jp
+otoyo.kochi.jp
+otsuki.kochi.jp
+sakawa.kochi.jp
+sukumo.kochi.jp
+susaki.kochi.jp
+tosa.kochi.jp
+tosashimizu.kochi.jp
+toyo.kochi.jp
+tsuno.kochi.jp
+umaji.kochi.jp
+yasuda.kochi.jp
+yusuhara.kochi.jp
+amakusa.kumamoto.jp
+arao.kumamoto.jp
+aso.kumamoto.jp
+choyo.kumamoto.jp
+gyokuto.kumamoto.jp
+kamiamakusa.kumamoto.jp
+kikuchi.kumamoto.jp
+kumamoto.kumamoto.jp
+mashiki.kumamoto.jp
+mifune.kumamoto.jp
+minamata.kumamoto.jp
+minamioguni.kumamoto.jp
+nagasu.kumamoto.jp
+nishihara.kumamoto.jp
+oguni.kumamoto.jp
+ozu.kumamoto.jp
+sumoto.kumamoto.jp
+takamori.kumamoto.jp
+uki.kumamoto.jp
+uto.kumamoto.jp
+yamaga.kumamoto.jp
+yamato.kumamoto.jp
+yatsushiro.kumamoto.jp
+ayabe.kyoto.jp
+fukuchiyama.kyoto.jp
+higashiyama.kyoto.jp
+ide.kyoto.jp
+ine.kyoto.jp
+joyo.kyoto.jp
+kameoka.kyoto.jp
+kamo.kyoto.jp
+kita.kyoto.jp
+kizu.kyoto.jp
+kumiyama.kyoto.jp
+kyotamba.kyoto.jp
+kyotanabe.kyoto.jp
+kyotango.kyoto.jp
+maizuru.kyoto.jp
+minami.kyoto.jp
+minamiyamashiro.kyoto.jp
+miyazu.kyoto.jp
+muko.kyoto.jp
+nagaokakyo.kyoto.jp
+nakagyo.kyoto.jp
+nantan.kyoto.jp
+oyamazaki.kyoto.jp
+sakyo.kyoto.jp
+seika.kyoto.jp
+tanabe.kyoto.jp
+uji.kyoto.jp
+ujitawara.kyoto.jp
+wazuka.kyoto.jp
+yamashina.kyoto.jp
+yawata.kyoto.jp
+asahi.mie.jp
+inabe.mie.jp
+ise.mie.jp
+kameyama.mie.jp
+kawagoe.mie.jp
+kiho.mie.jp
+kisosaki.mie.jp
+kiwa.mie.jp
+komono.mie.jp
+kumano.mie.jp
+kuwana.mie.jp
+matsusaka.mie.jp
+meiwa.mie.jp
+mihama.mie.jp
+minamiise.mie.jp
+misugi.mie.jp
+miyama.mie.jp
+nabari.mie.jp
+shima.mie.jp
+suzuka.mie.jp
+tado.mie.jp
+taiki.mie.jp
+taki.mie.jp
+tamaki.mie.jp
+toba.mie.jp
+tsu.mie.jp
+udono.mie.jp
+ureshino.mie.jp
+watarai.mie.jp
+yokkaichi.mie.jp
+furukawa.miyagi.jp
+higashimatsushima.miyagi.jp
+ishinomaki.miyagi.jp
+iwanuma.miyagi.jp
+kakuda.miyagi.jp
+kami.miyagi.jp
+kawasaki.miyagi.jp
+marumori.miyagi.jp
+matsushima.miyagi.jp
+minamisanriku.miyagi.jp
+misato.miyagi.jp
+murata.miyagi.jp
+natori.miyagi.jp
+ogawara.miyagi.jp
+ohira.miyagi.jp
+onagawa.miyagi.jp
+osaki.miyagi.jp
+rifu.miyagi.jp
+semine.miyagi.jp
+shibata.miyagi.jp
+shichikashuku.miyagi.jp
+shikama.miyagi.jp
+shiogama.miyagi.jp
+shiroishi.miyagi.jp
+tagajo.miyagi.jp
+taiwa.miyagi.jp
+tome.miyagi.jp
+tomiya.miyagi.jp
+wakuya.miyagi.jp
+watari.miyagi.jp
+yamamoto.miyagi.jp
+zao.miyagi.jp
+aya.miyazaki.jp
+ebino.miyazaki.jp
+gokase.miyazaki.jp
+hyuga.miyazaki.jp
+kadogawa.miyazaki.jp
+kawaminami.miyazaki.jp
+kijo.miyazaki.jp
+kitagawa.miyazaki.jp
+kitakata.miyazaki.jp
+kitaura.miyazaki.jp
+kobayashi.miyazaki.jp
+kunitomi.miyazaki.jp
+kushima.miyazaki.jp
+mimata.miyazaki.jp
+miyakonojo.miyazaki.jp
+miyazaki.miyazaki.jp
+morotsuka.miyazaki.jp
+nichinan.miyazaki.jp
+nishimera.miyazaki.jp
+nobeoka.miyazaki.jp
+saito.miyazaki.jp
+shiiba.miyazaki.jp
+shintomi.miyazaki.jp
+takaharu.miyazaki.jp
+takanabe.miyazaki.jp
+takazaki.miyazaki.jp
+tsuno.miyazaki.jp
+achi.nagano.jp
+agematsu.nagano.jp
+anan.nagano.jp
+aoki.nagano.jp
+asahi.nagano.jp
+azumino.nagano.jp
+chikuhoku.nagano.jp
+chikuma.nagano.jp
+chino.nagano.jp
+fujimi.nagano.jp
+hakuba.nagano.jp
+hara.nagano.jp
+hiraya.nagano.jp
+iida.nagano.jp
+iijima.nagano.jp
+iiyama.nagano.jp
+iizuna.nagano.jp
+ikeda.nagano.jp
+ikusaka.nagano.jp
+ina.nagano.jp
+karuizawa.nagano.jp
+kawakami.nagano.jp
+kiso.nagano.jp
+kisofukushima.nagano.jp
+kitaaiki.nagano.jp
+komagane.nagano.jp
+komoro.nagano.jp
+matsukawa.nagano.jp
+matsumoto.nagano.jp
+miasa.nagano.jp
+minamiaiki.nagano.jp
+minamimaki.nagano.jp
+minamiminowa.nagano.jp
+minowa.nagano.jp
+miyada.nagano.jp
+miyota.nagano.jp
+mochizuki.nagano.jp
+nagano.nagano.jp
+nagawa.nagano.jp
+nagiso.nagano.jp
+nakagawa.nagano.jp
+nakano.nagano.jp
+nozawaonsen.nagano.jp
+obuse.nagano.jp
+ogawa.nagano.jp
+okaya.nagano.jp
+omachi.nagano.jp
+omi.nagano.jp
+ookuwa.nagano.jp
+ooshika.nagano.jp
+otaki.nagano.jp
+otari.nagano.jp
+sakae.nagano.jp
+sakaki.nagano.jp
+saku.nagano.jp
+sakuho.nagano.jp
+shimosuwa.nagano.jp
+shinanomachi.nagano.jp
+shiojiri.nagano.jp
+suwa.nagano.jp
+suzaka.nagano.jp
+takagi.nagano.jp
+takamori.nagano.jp
+takayama.nagano.jp
+tateshina.nagano.jp
+tatsuno.nagano.jp
+togakushi.nagano.jp
+togura.nagano.jp
+tomi.nagano.jp
+ueda.nagano.jp
+wada.nagano.jp
+yamagata.nagano.jp
+yamanouchi.nagano.jp
+yasaka.nagano.jp
+yasuoka.nagano.jp
+chijiwa.nagasaki.jp
+futsu.nagasaki.jp
+goto.nagasaki.jp
+hasami.nagasaki.jp
+hirado.nagasaki.jp
+iki.nagasaki.jp
+isahaya.nagasaki.jp
+kawatana.nagasaki.jp
+kuchinotsu.nagasaki.jp
+matsuura.nagasaki.jp
+nagasaki.nagasaki.jp
+obama.nagasaki.jp
+omura.nagasaki.jp
+oseto.nagasaki.jp
+saikai.nagasaki.jp
+sasebo.nagasaki.jp
+seihi.nagasaki.jp
+shimabara.nagasaki.jp
+shinkamigoto.nagasaki.jp
+togitsu.nagasaki.jp
+tsushima.nagasaki.jp
+unzen.nagasaki.jp
+ando.nara.jp
+gose.nara.jp
+heguri.nara.jp
+higashiyoshino.nara.jp
+ikaruga.nara.jp
+ikoma.nara.jp
+kamikitayama.nara.jp
+kanmaki.nara.jp
+kashiba.nara.jp
+kashihara.nara.jp
+katsuragi.nara.jp
+kawai.nara.jp
+kawakami.nara.jp
+kawanishi.nara.jp
+koryo.nara.jp
+kurotaki.nara.jp
+mitsue.nara.jp
+miyake.nara.jp
+nara.nara.jp
+nosegawa.nara.jp
+oji.nara.jp
+ouda.nara.jp
+oyodo.nara.jp
+sakurai.nara.jp
+sango.nara.jp
+shimoichi.nara.jp
+shimokitayama.nara.jp
+shinjo.nara.jp
+soni.nara.jp
+takatori.nara.jp
+tawaramoto.nara.jp
+tenkawa.nara.jp
+tenri.nara.jp
+uda.nara.jp
+yamatokoriyama.nara.jp
+yamatotakada.nara.jp
+yamazoe.nara.jp
+yoshino.nara.jp
+aga.niigata.jp
+agano.niigata.jp
+gosen.niigata.jp
+itoigawa.niigata.jp
+izumozaki.niigata.jp
+joetsu.niigata.jp
+kamo.niigata.jp
+kariwa.niigata.jp
+kashiwazaki.niigata.jp
+minamiuonuma.niigata.jp
+mitsuke.niigata.jp
+muika.niigata.jp
+murakami.niigata.jp
+myoko.niigata.jp
+nagaoka.niigata.jp
+niigata.niigata.jp
+ojiya.niigata.jp
+omi.niigata.jp
+sado.niigata.jp
+sanjo.niigata.jp
+seiro.niigata.jp
+seirou.niigata.jp
+sekikawa.niigata.jp
+shibata.niigata.jp
+tagami.niigata.jp
+tainai.niigata.jp
+tochio.niigata.jp
+tokamachi.niigata.jp
+tsubame.niigata.jp
+tsunan.niigata.jp
+uonuma.niigata.jp
+yahiko.niigata.jp
+yoita.niigata.jp
+yuzawa.niigata.jp
+beppu.oita.jp
+bungoono.oita.jp
+bungotakada.oita.jp
+hasama.oita.jp
+hiji.oita.jp
+himeshima.oita.jp
+hita.oita.jp
+kamitsue.oita.jp
+kokonoe.oita.jp
+kuju.oita.jp
+kunisaki.oita.jp
+kusu.oita.jp
+oita.oita.jp
+saiki.oita.jp
+taketa.oita.jp
+tsukumi.oita.jp
+usa.oita.jp
+usuki.oita.jp
+yufu.oita.jp
+akaiwa.okayama.jp
+asakuchi.okayama.jp
+bizen.okayama.jp
+hayashima.okayama.jp
+ibara.okayama.jp
+kagamino.okayama.jp
+kasaoka.okayama.jp
+kibichuo.okayama.jp
+kumenan.okayama.jp
+kurashiki.okayama.jp
+maniwa.okayama.jp
+misaki.okayama.jp
+nagi.okayama.jp
+niimi.okayama.jp
+nishiawakura.okayama.jp
+okayama.okayama.jp
+satosho.okayama.jp
+setouchi.okayama.jp
+shinjo.okayama.jp
+shoo.okayama.jp
+soja.okayama.jp
+takahashi.okayama.jp
+tamano.okayama.jp
+tsuyama.okayama.jp
+wake.okayama.jp
+yakage.okayama.jp
+aguni.okinawa.jp
+ginowan.okinawa.jp
+ginoza.okinawa.jp
+gushikami.okinawa.jp
+haebaru.okinawa.jp
+higashi.okinawa.jp
+hirara.okinawa.jp
+iheya.okinawa.jp
+ishigaki.okinawa.jp
+ishikawa.okinawa.jp
+itoman.okinawa.jp
+izena.okinawa.jp
+kadena.okinawa.jp
+kin.okinawa.jp
+kitadaito.okinawa.jp
+kitanakagusuku.okinawa.jp
+kumejima.okinawa.jp
+kunigami.okinawa.jp
+minamidaito.okinawa.jp
+motobu.okinawa.jp
+nago.okinawa.jp
+naha.okinawa.jp
+nakagusuku.okinawa.jp
+nakijin.okinawa.jp
+nanjo.okinawa.jp
+nishihara.okinawa.jp
+ogimi.okinawa.jp
+okinawa.okinawa.jp
+onna.okinawa.jp
+shimoji.okinawa.jp
+taketomi.okinawa.jp
+tarama.okinawa.jp
+tokashiki.okinawa.jp
+tomigusuku.okinawa.jp
+tonaki.okinawa.jp
+urasoe.okinawa.jp
+uruma.okinawa.jp
+yaese.okinawa.jp
+yomitan.okinawa.jp
+yonabaru.okinawa.jp
+yonaguni.okinawa.jp
+zamami.okinawa.jp
+abeno.osaka.jp
+chihayaakasaka.osaka.jp
+chuo.osaka.jp
+daito.osaka.jp
+fujiidera.osaka.jp
+habikino.osaka.jp
+hannan.osaka.jp
+higashiosaka.osaka.jp
+higashisumiyoshi.osaka.jp
+higashiyodogawa.osaka.jp
+hirakata.osaka.jp
+ibaraki.osaka.jp
+ikeda.osaka.jp
+izumi.osaka.jp
+izumiotsu.osaka.jp
+izumisano.osaka.jp
+kadoma.osaka.jp
+kaizuka.osaka.jp
+kanan.osaka.jp
+kashiwara.osaka.jp
+katano.osaka.jp
+kawachinagano.osaka.jp
+kishiwada.osaka.jp
+kita.osaka.jp
+kumatori.osaka.jp
+matsubara.osaka.jp
+minato.osaka.jp
+minoh.osaka.jp
+misaki.osaka.jp
+moriguchi.osaka.jp
+neyagawa.osaka.jp
+nishi.osaka.jp
+nose.osaka.jp
+osakasayama.osaka.jp
+sakai.osaka.jp
+sayama.osaka.jp
+sennan.osaka.jp
+settsu.osaka.jp
+shijonawate.osaka.jp
+shimamoto.osaka.jp
+suita.osaka.jp
+tadaoka.osaka.jp
+taishi.osaka.jp
+tajiri.osaka.jp
+takaishi.osaka.jp
+takatsuki.osaka.jp
+tondabayashi.osaka.jp
+toyonaka.osaka.jp
+toyono.osaka.jp
+yao.osaka.jp
+ariake.saga.jp
+arita.saga.jp
+fukudomi.saga.jp
+genkai.saga.jp
+hamatama.saga.jp
+hizen.saga.jp
+imari.saga.jp
+kamimine.saga.jp
+kanzaki.saga.jp
+karatsu.saga.jp
+kashima.saga.jp
+kitagata.saga.jp
+kitahata.saga.jp
+kiyama.saga.jp
+kouhoku.saga.jp
+kyuragi.saga.jp
+nishiarita.saga.jp
+ogi.saga.jp
+omachi.saga.jp
+ouchi.saga.jp
+saga.saga.jp
+shiroishi.saga.jp
+taku.saga.jp
+tara.saga.jp
+tosu.saga.jp
+yoshinogari.saga.jp
+arakawa.saitama.jp
+asaka.saitama.jp
+chichibu.saitama.jp
+fujimi.saitama.jp
+fujimino.saitama.jp
+fukaya.saitama.jp
+hanno.saitama.jp
+hanyu.saitama.jp
+hasuda.saitama.jp
+hatogaya.saitama.jp
+hatoyama.saitama.jp
+hidaka.saitama.jp
+higashichichibu.saitama.jp
+higashimatsuyama.saitama.jp
+honjo.saitama.jp
+ina.saitama.jp
+iruma.saitama.jp
+iwatsuki.saitama.jp
+kamiizumi.saitama.jp
+kamikawa.saitama.jp
+kamisato.saitama.jp
+kasukabe.saitama.jp
+kawagoe.saitama.jp
+kawaguchi.saitama.jp
+kawajima.saitama.jp
+kazo.saitama.jp
+kitamoto.saitama.jp
+koshigaya.saitama.jp
+kounosu.saitama.jp
+kuki.saitama.jp
+kumagaya.saitama.jp
+matsubushi.saitama.jp
+minano.saitama.jp
+misato.saitama.jp
+miyashiro.saitama.jp
+miyoshi.saitama.jp
+moroyama.saitama.jp
+nagatoro.saitama.jp
+namegawa.saitama.jp
+niiza.saitama.jp
+ogano.saitama.jp
+ogawa.saitama.jp
+ogose.saitama.jp
+okegawa.saitama.jp
+omiya.saitama.jp
+otaki.saitama.jp
+ranzan.saitama.jp
+ryokami.saitama.jp
+saitama.saitama.jp
+sakado.saitama.jp
+satte.saitama.jp
+sayama.saitama.jp
+shiki.saitama.jp
+shiraoka.saitama.jp
+soka.saitama.jp
+sugito.saitama.jp
+toda.saitama.jp
+tokigawa.saitama.jp
+tokorozawa.saitama.jp
+tsurugashima.saitama.jp
+urawa.saitama.jp
+warabi.saitama.jp
+yashio.saitama.jp
+yokoze.saitama.jp
+yono.saitama.jp
+yorii.saitama.jp
+yoshida.saitama.jp
+yoshikawa.saitama.jp
+yoshimi.saitama.jp
+aisho.shiga.jp
+gamo.shiga.jp
+higashiomi.shiga.jp
+hikone.shiga.jp
+koka.shiga.jp
+konan.shiga.jp
+kosei.shiga.jp
+koto.shiga.jp
+kusatsu.shiga.jp
+maibara.shiga.jp
+moriyama.shiga.jp
+nagahama.shiga.jp
+nishiazai.shiga.jp
+notogawa.shiga.jp
+omihachiman.shiga.jp
+otsu.shiga.jp
+ritto.shiga.jp
+ryuoh.shiga.jp
+takashima.shiga.jp
+takatsuki.shiga.jp
+torahime.shiga.jp
+toyosato.shiga.jp
+yasu.shiga.jp
+akagi.shimane.jp
+ama.shimane.jp
+gotsu.shimane.jp
+hamada.shimane.jp
+higashiizumo.shimane.jp
+hikawa.shimane.jp
+hikimi.shimane.jp
+izumo.shimane.jp
+kakinoki.shimane.jp
+masuda.shimane.jp
+matsue.shimane.jp
+misato.shimane.jp
+nishinoshima.shimane.jp
+ohda.shimane.jp
+okinoshima.shimane.jp
+okuizumo.shimane.jp
+shimane.shimane.jp
+tamayu.shimane.jp
+tsuwano.shimane.jp
+unnan.shimane.jp
+yakumo.shimane.jp
+yasugi.shimane.jp
+yatsuka.shimane.jp
+arai.shizuoka.jp
+atami.shizuoka.jp
+fuji.shizuoka.jp
+fujieda.shizuoka.jp
+fujikawa.shizuoka.jp
+fujinomiya.shizuoka.jp
+fukuroi.shizuoka.jp
+gotemba.shizuoka.jp
+haibara.shizuoka.jp
+hamamatsu.shizuoka.jp
+higashiizu.shizuoka.jp
+ito.shizuoka.jp
+iwata.shizuoka.jp
+izu.shizuoka.jp
+izunokuni.shizuoka.jp
+kakegawa.shizuoka.jp
+kannami.shizuoka.jp
+kawanehon.shizuoka.jp
+kawazu.shizuoka.jp
+kikugawa.shizuoka.jp
+kosai.shizuoka.jp
+makinohara.shizuoka.jp
+matsuzaki.shizuoka.jp
+minamiizu.shizuoka.jp
+mishima.shizuoka.jp
+morimachi.shizuoka.jp
+nishiizu.shizuoka.jp
+numazu.shizuoka.jp
+omaezaki.shizuoka.jp
+shimada.shizuoka.jp
+shimizu.shizuoka.jp
+shimoda.shizuoka.jp
+shizuoka.shizuoka.jp
+susono.shizuoka.jp
+yaizu.shizuoka.jp
+yoshida.shizuoka.jp
+ashikaga.tochigi.jp
+bato.tochigi.jp
+haga.tochigi.jp
+ichikai.tochigi.jp
+iwafune.tochigi.jp
+kaminokawa.tochigi.jp
+kanuma.tochigi.jp
+karasuyama.tochigi.jp
+kuroiso.tochigi.jp
+mashiko.tochigi.jp
+mibu.tochigi.jp
+moka.tochigi.jp
+motegi.tochigi.jp
+nasu.tochigi.jp
+nasushiobara.tochigi.jp
+nikko.tochigi.jp
+nishikata.tochigi.jp
+nogi.tochigi.jp
+ohira.tochigi.jp
+ohtawara.tochigi.jp
+oyama.tochigi.jp
+sakura.tochigi.jp
+sano.tochigi.jp
+shimotsuke.tochigi.jp
+shioya.tochigi.jp
+takanezawa.tochigi.jp
+tochigi.tochigi.jp
+tsuga.tochigi.jp
+ujiie.tochigi.jp
+utsunomiya.tochigi.jp
+yaita.tochigi.jp
+aizumi.tokushima.jp
+anan.tokushima.jp
+ichiba.tokushima.jp
+itano.tokushima.jp
+kainan.tokushima.jp
+komatsushima.tokushima.jp
+matsushige.tokushima.jp
+mima.tokushima.jp
+minami.tokushima.jp
+miyoshi.tokushima.jp
+mugi.tokushima.jp
+nakagawa.tokushima.jp
+naruto.tokushima.jp
+sanagochi.tokushima.jp
+shishikui.tokushima.jp
+tokushima.tokushima.jp
+wajiki.tokushima.jp
+adachi.tokyo.jp
+akiruno.tokyo.jp
+akishima.tokyo.jp
+aogashima.tokyo.jp
+arakawa.tokyo.jp
+bunkyo.tokyo.jp
+chiyoda.tokyo.jp
+chofu.tokyo.jp
+chuo.tokyo.jp
+edogawa.tokyo.jp
+fuchu.tokyo.jp
+fussa.tokyo.jp
+hachijo.tokyo.jp
+hachioji.tokyo.jp
+hamura.tokyo.jp
+higashikurume.tokyo.jp
+higashimurayama.tokyo.jp
+higashiyamato.tokyo.jp
+hino.tokyo.jp
+hinode.tokyo.jp
+hinohara.tokyo.jp
+inagi.tokyo.jp
+itabashi.tokyo.jp
+katsushika.tokyo.jp
+kita.tokyo.jp
+kiyose.tokyo.jp
+kodaira.tokyo.jp
+koganei.tokyo.jp
+kokubunji.tokyo.jp
+komae.tokyo.jp
+koto.tokyo.jp
+kouzushima.tokyo.jp
+kunitachi.tokyo.jp
+machida.tokyo.jp
+meguro.tokyo.jp
+minato.tokyo.jp
+mitaka.tokyo.jp
+mizuho.tokyo.jp
+musashimurayama.tokyo.jp
+musashino.tokyo.jp
+nakano.tokyo.jp
+nerima.tokyo.jp
+ogasawara.tokyo.jp
+okutama.tokyo.jp
+ome.tokyo.jp
+oshima.tokyo.jp
+ota.tokyo.jp
+setagaya.tokyo.jp
+shibuya.tokyo.jp
+shinagawa.tokyo.jp
+shinjuku.tokyo.jp
+suginami.tokyo.jp
+sumida.tokyo.jp
+tachikawa.tokyo.jp
+taito.tokyo.jp
+tama.tokyo.jp
+toshima.tokyo.jp
+chizu.tottori.jp
+hino.tottori.jp
+kawahara.tottori.jp
+koge.tottori.jp
+kotoura.tottori.jp
+misasa.tottori.jp
+nanbu.tottori.jp
+nichinan.tottori.jp
+sakaiminato.tottori.jp
+tottori.tottori.jp
+wakasa.tottori.jp
+yazu.tottori.jp
+yonago.tottori.jp
+asahi.toyama.jp
+fuchu.toyama.jp
+fukumitsu.toyama.jp
+funahashi.toyama.jp
+himi.toyama.jp
+imizu.toyama.jp
+inami.toyama.jp
+johana.toyama.jp
+kamiichi.toyama.jp
+kurobe.toyama.jp
+nakaniikawa.toyama.jp
+namerikawa.toyama.jp
+nanto.toyama.jp
+nyuzen.toyama.jp
+oyabe.toyama.jp
+taira.toyama.jp
+takaoka.toyama.jp
+tateyama.toyama.jp
+toga.toyama.jp
+tonami.toyama.jp
+toyama.toyama.jp
+unazuki.toyama.jp
+uozu.toyama.jp
+yamada.toyama.jp
+arida.wakayama.jp
+aridagawa.wakayama.jp
+gobo.wakayama.jp
+hashimoto.wakayama.jp
+hidaka.wakayama.jp
+hirogawa.wakayama.jp
+inami.wakayama.jp
+iwade.wakayama.jp
+kainan.wakayama.jp
+kamitonda.wakayama.jp
+katsuragi.wakayama.jp
+kimino.wakayama.jp
+kinokawa.wakayama.jp
+kitayama.wakayama.jp
+koya.wakayama.jp
+koza.wakayama.jp
+kozagawa.wakayama.jp
+kudoyama.wakayama.jp
+kushimoto.wakayama.jp
+mihama.wakayama.jp
+misato.wakayama.jp
+nachikatsuura.wakayama.jp
+shingu.wakayama.jp
+shirahama.wakayama.jp
+taiji.wakayama.jp
+tanabe.wakayama.jp
+wakayama.wakayama.jp
+yuasa.wakayama.jp
+yura.wakayama.jp
+asahi.yamagata.jp
+funagata.yamagata.jp
+higashine.yamagata.jp
+iide.yamagata.jp
+kahoku.yamagata.jp
+kaminoyama.yamagata.jp
+kaneyama.yamagata.jp
+kawanishi.yamagata.jp
+mamurogawa.yamagata.jp
+mikawa.yamagata.jp
+murayama.yamagata.jp
+nagai.yamagata.jp
+nakayama.yamagata.jp
+nanyo.yamagata.jp
+nishikawa.yamagata.jp
+obanazawa.yamagata.jp
+oe.yamagata.jp
+oguni.yamagata.jp
+ohkura.yamagata.jp
+oishida.yamagata.jp
+sagae.yamagata.jp
+sakata.yamagata.jp
+sakegawa.yamagata.jp
+shinjo.yamagata.jp
+shirataka.yamagata.jp
+shonai.yamagata.jp
+takahata.yamagata.jp
+tendo.yamagata.jp
+tozawa.yamagata.jp
+tsuruoka.yamagata.jp
+yamagata.yamagata.jp
+yamanobe.yamagata.jp
+yonezawa.yamagata.jp
+yuza.yamagata.jp
+abu.yamaguchi.jp
+hagi.yamaguchi.jp
+hikari.yamaguchi.jp
+hofu.yamaguchi.jp
+iwakuni.yamaguchi.jp
+kudamatsu.yamaguchi.jp
+mitou.yamaguchi.jp
+nagato.yamaguchi.jp
+oshima.yamaguchi.jp
+shimonoseki.yamaguchi.jp
+shunan.yamaguchi.jp
+tabuse.yamaguchi.jp
+tokuyama.yamaguchi.jp
+toyota.yamaguchi.jp
+ube.yamaguchi.jp
+yuu.yamaguchi.jp
+chuo.yamanashi.jp
+doshi.yamanashi.jp
+fuefuki.yamanashi.jp
+fujikawa.yamanashi.jp
+fujikawaguchiko.yamanashi.jp
+fujiyoshida.yamanashi.jp
+hayakawa.yamanashi.jp
+hokuto.yamanashi.jp
+ichikawamisato.yamanashi.jp
+kai.yamanashi.jp
+kofu.yamanashi.jp
+koshu.yamanashi.jp
+kosuge.yamanashi.jp
+minami-alps.yamanashi.jp
+minobu.yamanashi.jp
+nakamichi.yamanashi.jp
+nanbu.yamanashi.jp
+narusawa.yamanashi.jp
+nirasaki.yamanashi.jp
+nishikatsura.yamanashi.jp
+oshino.yamanashi.jp
+otsuki.yamanashi.jp
+showa.yamanashi.jp
+tabayama.yamanashi.jp
+tsuru.yamanashi.jp
+uenohara.yamanashi.jp
+yamanakako.yamanashi.jp
+yamanashi.yamanashi.jp
+ke
+ac.ke
+co.ke
+go.ke
+info.ke
+me.ke
+mobi.ke
+ne.ke
+or.ke
+sc.ke
+kg
+com.kg
+edu.kg
+gov.kg
+mil.kg
+net.kg
+org.kg
+kh
+com.kh
+edu.kh
+gov.kh
+net.kh
+org.kh
+ki
+biz.ki
+com.ki
+edu.ki
+gov.ki
+info.ki
+net.ki
+org.ki
+km
+ass.km
+com.km
+edu.km
+gov.km
+mil.km
+nom.km
+org.km
+prd.km
+tm.km
+asso.km
+coop.km
+gouv.km
+medecin.km
+notaires.km
+pharmaciens.km
+presse.km
+veterinaire.km
+kn
+edu.kn
+gov.kn
+net.kn
+org.kn
+kp
+com.kp
+edu.kp
+gov.kp
+org.kp
+rep.kp
+tra.kp
+kr
+ac.kr
+ai.kr
+co.kr
+es.kr
+go.kr
+hs.kr
+io.kr
+it.kr
+kg.kr
+me.kr
+mil.kr
+ms.kr
+ne.kr
+or.kr
+pe.kr
+re.kr
+sc.kr
+busan.kr
+chungbuk.kr
+chungnam.kr
+daegu.kr
+daejeon.kr
+gangwon.kr
+gwangju.kr
+gyeongbuk.kr
+gyeonggi.kr
+gyeongnam.kr
+incheon.kr
+jeju.kr
+jeonbuk.kr
+jeonnam.kr
+seoul.kr
+ulsan.kr
+kw
+com.kw
+edu.kw
+emb.kw
+gov.kw
+ind.kw
+net.kw
+org.kw
+ky
+com.ky
+edu.ky
+net.ky
+org.ky
+kz
+com.kz
+edu.kz
+gov.kz
+mil.kz
+net.kz
+org.kz
+la
+com.la
+edu.la
+gov.la
+info.la
+int.la
+net.la
+org.la
+per.la
+lb
+com.lb
+edu.lb
+gov.lb
+net.lb
+org.lb
+lc
+co.lc
+com.lc
+edu.lc
+gov.lc
+net.lc
+org.lc
+li
+lk
+ac.lk
+assn.lk
+com.lk
+edu.lk
+gov.lk
+grp.lk
+hotel.lk
+int.lk
+ltd.lk
+net.lk
+ngo.lk
+org.lk
+sch.lk
+soc.lk
+web.lk
+lr
+com.lr
+edu.lr
+gov.lr
+net.lr
+org.lr
+ls
+ac.ls
+biz.ls
+co.ls
+edu.ls
+gov.ls
+info.ls
+net.ls
+org.ls
+sc.ls
+lt
+gov.lt
+lu
+lv
+asn.lv
+com.lv
+conf.lv
+edu.lv
+gov.lv
+id.lv
+mil.lv
+net.lv
+org.lv
+ly
+com.ly
+edu.ly
+gov.ly
+id.ly
+med.ly
+net.ly
+org.ly
+plc.ly
+sch.ly
+ma
+ac.ma
+co.ma
+gov.ma
+net.ma
+org.ma
+press.ma
+mc
+asso.mc
+tm.mc
+md
+me
+ac.me
+co.me
+edu.me
+gov.me
+its.me
+net.me
+org.me
+priv.me
+mg
+co.mg
+com.mg
+edu.mg
+gov.mg
+mil.mg
+nom.mg
+org.mg
+prd.mg
+mh
+mil
+mk
+com.mk
+edu.mk
+gov.mk
+inf.mk
+name.mk
+net.mk
+org.mk
+ml
+ac.ml
+art.ml
+asso.ml
+com.ml
+edu.ml
+gouv.ml
+gov.ml
+info.ml
+inst.ml
+net.ml
+org.ml
+pr.ml
+presse.ml
+*.mm
+mn
+edu.mn
+gov.mn
+org.mn
+mo
+com.mo
+edu.mo
+gov.mo
+net.mo
+org.mo
+mobi
+mp
+mq
+mr
+gov.mr
+ms
+com.ms
+edu.ms
+gov.ms
+net.ms
+org.ms
+mt
+com.mt
+edu.mt
+net.mt
+org.mt
+mu
+ac.mu
+co.mu
+com.mu
+gov.mu
+net.mu
+or.mu
+org.mu
+museum
+mv
+aero.mv
+biz.mv
+com.mv
+coop.mv
+edu.mv
+gov.mv
+info.mv
+int.mv
+mil.mv
+museum.mv
+name.mv
+net.mv
+org.mv
+pro.mv
+mw
+ac.mw
+biz.mw
+co.mw
+com.mw
+coop.mw
+edu.mw
+gov.mw
+int.mw
+net.mw
+org.mw
+mx
+com.mx
+edu.mx
+gob.mx
+net.mx
+org.mx
+my
+biz.my
+com.my
+edu.my
+gov.my
+mil.my
+name.my
+net.my
+org.my
+mz
+ac.mz
+adv.mz
+co.mz
+edu.mz
+gov.mz
+mil.mz
+net.mz
+org.mz
+na
+alt.na
+co.na
+com.na
+gov.na
+net.na
+org.na
+name
+nc
+asso.nc
+nom.nc
+ne
+net
+nf
+arts.nf
+com.nf
+firm.nf
+info.nf
+net.nf
+other.nf
+per.nf
+rec.nf
+store.nf
+web.nf
+ng
+com.ng
+edu.ng
+gov.ng
+i.ng
+mil.ng
+mobi.ng
+name.ng
+net.ng
+org.ng
+sch.ng
+ni
+ac.ni
+biz.ni
+co.ni
+com.ni
+edu.ni
+gob.ni
+in.ni
+info.ni
+int.ni
+mil.ni
+net.ni
+nom.ni
+org.ni
+web.ni
+nl
+no
+fhs.no
+folkebibl.no
+fylkesbibl.no
+gielda.no
+herad.no
+idrett.no
+kommune.no
+museum.no
+priv.no
+suohkan.no
+tjielte.no
+uenorge.no
+vgs.no
+dep.no
+mil.no
+stat.no
+aa.no
+ah.no
+bu.no
+fm.no
+hl.no
+hm.no
+jan-mayen.no
+mr.no
+nl.no
+nt.no
+of.no
+ol.no
+oslo.no
+rl.no
+sf.no
+st.no
+svalbard.no
+tm.no
+tr.no
+va.no
+vf.no
+gs.aa.no
+gs.ah.no
+gs.bu.no
+gs.fm.no
+gs.hl.no
+gs.hm.no
+gs.jan-mayen.no
+gs.mr.no
+gs.nl.no
+gs.nt.no
+gs.of.no
+gs.ol.no
+gs.oslo.no
+gs.rl.no
+gs.sf.no
+gs.st.no
+gs.svalbard.no
+gs.tm.no
+gs.tr.no
+gs.va.no
+gs.vf.no
+akrehamn.no
+xn--krehamn-dxa.no
+algard.no
+xn--lgrd-poac.no
+arna.no
+bronnoysund.no
+xn--brnnysund-m8ac.no
+brumunddal.no
+bryne.no
+drobak.no
+xn--drbak-wua.no
+egersund.no
+fetsund.no
+floro.no
+xn--flor-jra.no
+fredrikstad.no
+hokksund.no
+honefoss.no
+xn--hnefoss-q1a.no
+jessheim.no
+jorpeland.no
+xn--jrpeland-54a.no
+kirkenes.no
+kopervik.no
+krokstadelva.no
+langevag.no
+xn--langevg-jxa.no
+leirvik.no
+mjondalen.no
+xn--mjndalen-64a.no
+mo-i-rana.no
+mosjoen.no
+xn--mosjen-eya.no
+nesoddtangen.no
+orkanger.no
+osoyro.no
+xn--osyro-wua.no
+raholt.no
+xn--rholt-mra.no
+sandnessjoen.no
+xn--sandnessjen-ogb.no
+skedsmokorset.no
+slattum.no
+spjelkavik.no
+stathelle.no
+stavern.no
+stjordalshalsen.no
+xn--stjrdalshalsen-sqb.no
+tananger.no
+tranby.no
+vossevangen.no
+aarborte.no
+aejrie.no
+afjord.no
+xn--fjord-lra.no
+agdenes.no
+nes.akershus.no
+aknoluokta.no
+xn--koluokta-7ya57h.no
+al.no
+xn--l-1fa.no
+alaheadju.no
+xn--laheadju-7ya.no
+alesund.no
+xn--lesund-hua.no
+alstahaug.no
+alta.no
+xn--lt-liac.no
+alvdal.no
+amli.no
+xn--mli-tla.no
+amot.no
+xn--mot-tla.no
+andasuolo.no
+andebu.no
+andoy.no
+xn--andy-ira.no
+ardal.no
+xn--rdal-poa.no
+aremark.no
+arendal.no
+xn--s-1fa.no
+aseral.no
+xn--seral-lra.no
+asker.no
+askim.no
+askoy.no
+xn--asky-ira.no
+askvoll.no
+asnes.no
+xn--snes-poa.no
+audnedal.no
+aukra.no
+aure.no
+aurland.no
+aurskog-holand.no
+xn--aurskog-hland-jnb.no
+austevoll.no
+austrheim.no
+averoy.no
+xn--avery-yua.no
+badaddja.no
+xn--bdddj-mrabd.no
+xn--brum-voa.no
+bahcavuotna.no
+xn--bhcavuotna-s4a.no
+bahccavuotna.no
+xn--bhccavuotna-k7a.no
+baidar.no
+xn--bidr-5nac.no
+bajddar.no
+xn--bjddar-pta.no
+balat.no
+xn--blt-elab.no
+balestrand.no
+ballangen.no
+balsfjord.no
+bamble.no
+bardu.no
+barum.no
+batsfjord.no
+xn--btsfjord-9za.no
+bearalvahki.no
+xn--bearalvhki-y4a.no
+beardu.no
+beiarn.no
+berg.no
+bergen.no
+berlevag.no
+xn--berlevg-jxa.no
+bievat.no
+xn--bievt-0qa.no
+bindal.no
+birkenes.no
+bjerkreim.no
+bjugn.no
+bodo.no
+xn--bod-2na.no
+bokn.no
+bomlo.no
+xn--bmlo-gra.no
+bremanger.no
+bronnoy.no
+xn--brnny-wuac.no
+budejju.no
+nes.buskerud.no
+bygland.no
+bykle.no
+cahcesuolo.no
+xn--hcesuolo-7ya35b.no
+davvenjarga.no
+xn--davvenjrga-y4a.no
+davvesiida.no
+deatnu.no
+dielddanuorri.no
+divtasvuodna.no
+divttasvuotna.no
+donna.no
+xn--dnna-gra.no
+dovre.no
+drammen.no
+drangedal.no
+dyroy.no
+xn--dyry-ira.no
+eid.no
+eidfjord.no
+eidsberg.no
+eidskog.no
+eidsvoll.no
+eigersund.no
+elverum.no
+enebakk.no
+engerdal.no
+etne.no
+etnedal.no
+evenassi.no
+xn--eveni-0qa01ga.no
+evenes.no
+evje-og-hornnes.no
+farsund.no
+fauske.no
+fedje.no
+fet.no
+finnoy.no
+xn--finny-yua.no
+fitjar.no
+fjaler.no
+fjell.no
+fla.no
+xn--fl-zia.no
+flakstad.no
+flatanger.no
+flekkefjord.no
+flesberg.no
+flora.no
+folldal.no
+forde.no
+xn--frde-gra.no
+forsand.no
+fosnes.no
+xn--frna-woa.no
+frana.no
+frogn.no
+froland.no
+frosta.no
+froya.no
+xn--frya-hra.no
+fuoisku.no
+fuossko.no
+fusa.no
+fyresdal.no
+gaivuotna.no
+xn--givuotna-8ya.no
+galsa.no
+xn--gls-elac.no
+gamvik.no
+gangaviika.no
+xn--ggaviika-8ya47h.no
+gaular.no
+gausdal.no
+giehtavuoatna.no
+gildeskal.no
+xn--gildeskl-g0a.no
+giske.no
+gjemnes.no
+gjerdrum.no
+gjerstad.no
+gjesdal.no
+gjovik.no
+xn--gjvik-wua.no
+gloppen.no
+gol.no
+gran.no
+grane.no
+granvin.no
+gratangen.no
+grimstad.no
+grong.no
+grue.no
+gulen.no
+guovdageaidnu.no
+ha.no
+xn--h-2fa.no
+habmer.no
+xn--hbmer-xqa.no
+hadsel.no
+xn--hgebostad-g3a.no
+hagebostad.no
+halden.no
+halsa.no
+hamar.no
+hamaroy.no
+xn--hamary-fya.no
+hammarfeasta.no
+xn--hmmrfeasta-s4ac.no
+hammerfest.no
+hapmir.no
+xn--hpmir-xqa.no
+haram.no
+hareid.no
+harstad.no
+hasvik.no
+hattfjelldal.no
+haugesund.no
+os.hedmark.no
+valer.hedmark.no
+xn--vler-qoa.hedmark.no
+hemne.no
+hemnes.no
+hemsedal.no
+hitra.no
+hjartdal.no
+hjelmeland.no
+hobol.no
+xn--hobl-ira.no
+hof.no
+hol.no
+hole.no
+holmestrand.no
+holtalen.no
+xn--holtlen-hxa.no
+os.hordaland.no
+hornindal.no
+horten.no
+hoyanger.no
+xn--hyanger-q1a.no
+hoylandet.no
+xn--hylandet-54a.no
+hurdal.no
+hurum.no
+hvaler.no
+hyllestad.no
+ibestad.no
+inderoy.no
+xn--indery-fya.no
+iveland.no
+ivgu.no
+jevnaker.no
+jolster.no
+xn--jlster-bya.no
+jondal.no
+kafjord.no
+xn--kfjord-iua.no
+karasjohka.no
+xn--krjohka-hwab49j.no
+karasjok.no
+karlsoy.no
+xn--karlsy-fya.no
+karmoy.no
+xn--karmy-yua.no
+kautokeino.no
+klabu.no
+xn--klbu-woa.no
+klepp.no
+kongsberg.no
+kongsvinger.no
+kraanghke.no
+xn--kranghke-b0a.no
+kragero.no
+xn--krager-gya.no
+kristiansand.no
+kristiansund.no
+krodsherad.no
+xn--krdsherad-m8a.no
+xn--kvfjord-nxa.no
+xn--kvnangen-k0a.no
+kvafjord.no
+kvalsund.no
+kvam.no
+kvanangen.no
+kvinesdal.no
+kvinnherad.no
+kviteseid.no
+kvitsoy.no
+xn--kvitsy-fya.no
+laakesvuemie.no
+xn--lrdal-sra.no
+lahppi.no
+xn--lhppi-xqa.no
+lardal.no
+larvik.no
+lavagis.no
+lavangen.no
+leangaviika.no
+xn--leagaviika-52b.no
+lebesby.no
+leikanger.no
+leirfjord.no
+leka.no
+leksvik.no
+lenvik.no
+lerdal.no
+lesja.no
+levanger.no
+lier.no
+lierne.no
+lillehammer.no
+lillesand.no
+lindas.no
+xn--linds-pra.no
+lindesnes.no
+loabat.no
+xn--loabt-0qa.no
+lodingen.no
+xn--ldingen-q1a.no
+lom.no
+loppa.no
+lorenskog.no
+xn--lrenskog-54a.no
+loten.no
+xn--lten-gra.no
+lund.no
+lunner.no
+luroy.no
+xn--lury-ira.no
+luster.no
+lyngdal.no
+lyngen.no
+malatvuopmi.no
+xn--mlatvuopmi-s4a.no
+malselv.no
+xn--mlselv-iua.no
+malvik.no
+mandal.no
+marker.no
+marnardal.no
+masfjorden.no
+masoy.no
+xn--msy-ula0h.no
+matta-varjjat.no
+xn--mtta-vrjjat-k7af.no
+meland.no
+meldal.no
+melhus.no
+meloy.no
+xn--mely-ira.no
+meraker.no
+xn--merker-kua.no
+midsund.no
+midtre-gauldal.no
+moareke.no
+xn--moreke-jua.no
+modalen.no
+modum.no
+molde.no
+heroy.more-og-romsdal.no
+sande.more-og-romsdal.no
+xn--hery-ira.xn--mre-og-romsdal-qqb.no
+sande.xn--mre-og-romsdal-qqb.no
+moskenes.no
+moss.no
+muosat.no
+xn--muost-0qa.no
+naamesjevuemie.no
+xn--nmesjevuemie-tcba.no
+xn--nry-yla5g.no
+namdalseid.no
+namsos.no
+namsskogan.no
+nannestad.no
+naroy.no
+narviika.no
+narvik.no
+naustdal.no
+navuotna.no
+xn--nvuotna-hwa.no
+nedre-eiker.no
+nesna.no
+nesodden.no
+nesseby.no
+nesset.no
+nissedal.no
+nittedal.no
+nord-aurdal.no
+nord-fron.no
+nord-odal.no
+norddal.no
+nordkapp.no
+bo.nordland.no
+xn--b-5ga.nordland.no
+heroy.nordland.no
+xn--hery-ira.nordland.no
+nordre-land.no
+nordreisa.no
+nore-og-uvdal.no
+notodden.no
+notteroy.no
+xn--nttery-byae.no
+odda.no
+oksnes.no
+xn--ksnes-uua.no
+omasvuotna.no
+oppdal.no
+oppegard.no
+xn--oppegrd-ixa.no
+orkdal.no
+orland.no
+xn--rland-uua.no
+orskog.no
+xn--rskog-uua.no
+orsta.no
+xn--rsta-fra.no
+osen.no
+osteroy.no
+xn--ostery-fya.no
+valer.ostfold.no
+xn--vler-qoa.xn--stfold-9xa.no
+ostre-toten.no
+xn--stre-toten-zcb.no
+overhalla.no
+ovre-eiker.no
+xn--vre-eiker-k8a.no
+oyer.no
+xn--yer-zna.no
+oygarden.no
+xn--ygarden-p1a.no
+oystre-slidre.no
+xn--ystre-slidre-ujb.no
+porsanger.no
+porsangu.no
+xn--porsgu-sta26f.no
+porsgrunn.no
+rade.no
+xn--rde-ula.no
+radoy.no
+xn--rady-ira.no
+xn--rlingen-mxa.no
+rahkkeravju.no
+xn--rhkkervju-01af.no
+raisa.no
+xn--risa-5na.no
+rakkestad.no
+ralingen.no
+rana.no
+randaberg.no
+rauma.no
+re.no
+rendalen.no
+rennebu.no
+rennesoy.no
+xn--rennesy-v1a.no
+rindal.no
+ringebu.no
+ringerike.no
+ringsaker.no
+risor.no
+xn--risr-ira.no
+rissa.no
+roan.no
+rodoy.no
+xn--rdy-0nab.no
+rollag.no
+romsa.no
+romskog.no
+xn--rmskog-bya.no
+roros.no
+xn--rros-gra.no
+rost.no
+xn--rst-0na.no
+royken.no
+xn--ryken-vua.no
+royrvik.no
+xn--ryrvik-bya.no
+ruovat.no
+rygge.no
+salangen.no
+salat.no
+xn--slat-5na.no
+xn--slt-elab.no
+saltdal.no
+samnanger.no
+sandefjord.no
+sandnes.no
+sandoy.no
+xn--sandy-yua.no
+sarpsborg.no
+sauda.no
+sauherad.no
+sel.no
+selbu.no
+selje.no
+seljord.no
+siellak.no
+sigdal.no
+siljan.no
+sirdal.no
+skanit.no
+xn--sknit-yqa.no
+skanland.no
+xn--sknland-fxa.no
+skaun.no
+skedsmo.no
+ski.no
+skien.no
+skierva.no
+xn--skierv-uta.no
+skiptvet.no
+skjak.no
+xn--skjk-soa.no
+skjervoy.no
+xn--skjervy-v1a.no
+skodje.no
+smola.no
+xn--smla-hra.no
+snaase.no
+xn--snase-nra.no
+snasa.no
+xn--snsa-roa.no
+snillfjord.no
+snoasa.no
+sogndal.no
+sogne.no
+xn--sgne-gra.no
+sokndal.no
+sola.no
+solund.no
+somna.no
+xn--smna-gra.no
+sondre-land.no
+xn--sndre-land-0cb.no
+songdalen.no
+sor-aurdal.no
+xn--sr-aurdal-l8a.no
+sor-fron.no
+xn--sr-fron-q1a.no
+sor-odal.no
+xn--sr-odal-q1a.no
+sor-varanger.no
+xn--sr-varanger-ggb.no
+sorfold.no
+xn--srfold-bya.no
+sorreisa.no
+xn--srreisa-q1a.no
+sortland.no
+sorum.no
+xn--srum-gra.no
+spydeberg.no
+stange.no
+stavanger.no
+steigen.no
+steinkjer.no
+stjordal.no
+xn--stjrdal-s1a.no
+stokke.no
+stor-elvdal.no
+stord.no
+stordal.no
+storfjord.no
+strand.no
+stranda.no
+stryn.no
+sula.no
+suldal.no
+sund.no
+sunndal.no
+surnadal.no
+sveio.no
+svelvik.no
+sykkylven.no
+tana.no
+bo.telemark.no
+xn--b-5ga.telemark.no
+time.no
+tingvoll.no
+tinn.no
+tjeldsund.no
+tjome.no
+xn--tjme-hra.no
+tokke.no
+tolga.no
+tonsberg.no
+xn--tnsberg-q1a.no
+torsken.no
+xn--trna-woa.no
+trana.no
+tranoy.no
+xn--trany-yua.no
+troandin.no
+trogstad.no
+xn--trgstad-r1a.no
+tromsa.no
+tromso.no
+xn--troms-zua.no
+trondheim.no
+trysil.no
+tvedestrand.no
+tydal.no
+tynset.no
+tysfjord.no
+tysnes.no
+xn--tysvr-vra.no
+tysvar.no
+ullensaker.no
+ullensvang.no
+ulstein.no
+ulvik.no
+unjarga.no
+xn--unjrga-rta.no
+utsira.no
+vaapste.no
+vadso.no
+xn--vads-jra.no
+xn--vry-yla5g.no
+vaga.no
+xn--vg-yiab.no
+vagan.no
+xn--vgan-qoa.no
+vagsoy.no
+xn--vgsy-qoa0j.no
+vaksdal.no
+valle.no
+vang.no
+vanylven.no
+vardo.no
+xn--vard-jra.no
+varggat.no
+xn--vrggt-xqad.no
+varoy.no
+vefsn.no
+vega.no
+vegarshei.no
+xn--vegrshei-c0a.no
+vennesla.no
+verdal.no
+verran.no
+vestby.no
+sande.vestfold.no
+vestnes.no
+vestre-slidre.no
+vestre-toten.no
+vestvagoy.no
+xn--vestvgy-ixa6o.no
+vevelstad.no
+vik.no
+vikna.no
+vindafjord.no
+voagat.no
+volda.no
+voss.no
+*.np
+nr
+biz.nr
+com.nr
+edu.nr
+gov.nr
+info.nr
+net.nr
+org.nr
+nu
+nz
+ac.nz
+co.nz
+cri.nz
+geek.nz
+gen.nz
+govt.nz
+health.nz
+iwi.nz
+kiwi.nz
+maori.nz
+xn--mori-qsa.nz
+mil.nz
+net.nz
+org.nz
+parliament.nz
+school.nz
+om
+co.om
+com.om
+edu.om
+gov.om
+med.om
+museum.om
+net.om
+org.om
+pro.om
+onion
+org
+pa
+abo.pa
+ac.pa
+com.pa
+edu.pa
+gob.pa
+ing.pa
+med.pa
+net.pa
+nom.pa
+org.pa
+sld.pa
+pe
+com.pe
+edu.pe
+gob.pe
+mil.pe
+net.pe
+nom.pe
+org.pe
+pf
+com.pf
+edu.pf
+org.pf
+*.pg
+ph
+com.ph
+edu.ph
+gov.ph
+i.ph
+mil.ph
+net.ph
+ngo.ph
+org.ph
+pk
+ac.pk
+biz.pk
+com.pk
+edu.pk
+fam.pk
+gkp.pk
+gob.pk
+gog.pk
+gok.pk
+gop.pk
+gos.pk
+gov.pk
+net.pk
+org.pk
+web.pk
+pl
+com.pl
+net.pl
+org.pl
+agro.pl
+aid.pl
+atm.pl
+auto.pl
+biz.pl
+edu.pl
+gmina.pl
+gsm.pl
+info.pl
+mail.pl
+media.pl
+miasta.pl
+mil.pl
+nieruchomosci.pl
+nom.pl
+pc.pl
+powiat.pl
+priv.pl
+realestate.pl
+rel.pl
+sex.pl
+shop.pl
+sklep.pl
+sos.pl
+szkola.pl
+targi.pl
+tm.pl
+tourism.pl
+travel.pl
+turystyka.pl
+gov.pl
+ap.gov.pl
+griw.gov.pl
+ic.gov.pl
+is.gov.pl
+kmpsp.gov.pl
+konsulat.gov.pl
+kppsp.gov.pl
+kwp.gov.pl
+kwpsp.gov.pl
+mup.gov.pl
+mw.gov.pl
+oia.gov.pl
+oirm.gov.pl
+oke.gov.pl
+oow.gov.pl
+oschr.gov.pl
+oum.gov.pl
+pa.gov.pl
+pinb.gov.pl
+piw.gov.pl
+po.gov.pl
+pr.gov.pl
+psp.gov.pl
+psse.gov.pl
+pup.gov.pl
+rzgw.gov.pl
+sa.gov.pl
+sdn.gov.pl
+sko.gov.pl
+so.gov.pl
+sr.gov.pl
+starostwo.gov.pl
+ug.gov.pl
+ugim.gov.pl
+um.gov.pl
+umig.gov.pl
+upow.gov.pl
+uppo.gov.pl
+us.gov.pl
+uw.gov.pl
+uzs.gov.pl
+wif.gov.pl
+wiih.gov.pl
+winb.gov.pl
+wios.gov.pl
+witd.gov.pl
+wiw.gov.pl
+wkz.gov.pl
+wsa.gov.pl
+wskr.gov.pl
+wsse.gov.pl
+wuoz.gov.pl
+wzmiuw.gov.pl
+zp.gov.pl
+zpisdn.gov.pl
+augustow.pl
+babia-gora.pl
+bedzin.pl
+beskidy.pl
+bialowieza.pl
+bialystok.pl
+bielawa.pl
+bieszczady.pl
+boleslawiec.pl
+bydgoszcz.pl
+bytom.pl
+cieszyn.pl
+czeladz.pl
+czest.pl
+dlugoleka.pl
+elblag.pl
+elk.pl
+glogow.pl
+gniezno.pl
+gorlice.pl
+grajewo.pl
+ilawa.pl
+jaworzno.pl
+jelenia-gora.pl
+jgora.pl
+kalisz.pl
+karpacz.pl
+kartuzy.pl
+kaszuby.pl
+katowice.pl
+kazimierz-dolny.pl
+kepno.pl
+ketrzyn.pl
+klodzko.pl
+kobierzyce.pl
+kolobrzeg.pl
+konin.pl
+konskowola.pl
+kutno.pl
+lapy.pl
+lebork.pl
+legnica.pl
+lezajsk.pl
+limanowa.pl
+lomza.pl
+lowicz.pl
+lubin.pl
+lukow.pl
+malbork.pl
+malopolska.pl
+mazowsze.pl
+mazury.pl
+mielec.pl
+mielno.pl
+mragowo.pl
+naklo.pl
+nowaruda.pl
+nysa.pl
+olawa.pl
+olecko.pl
+olkusz.pl
+olsztyn.pl
+opoczno.pl
+opole.pl
+ostroda.pl
+ostroleka.pl
+ostrowiec.pl
+ostrowwlkp.pl
+pila.pl
+pisz.pl
+podhale.pl
+podlasie.pl
+polkowice.pl
+pomorskie.pl
+pomorze.pl
+prochowice.pl
+pruszkow.pl
+przeworsk.pl
+pulawy.pl
+radom.pl
+rawa-maz.pl
+rybnik.pl
+rzeszow.pl
+sanok.pl
+sejny.pl
+skoczow.pl
+slask.pl
+slupsk.pl
+sosnowiec.pl
+stalowa-wola.pl
+starachowice.pl
+stargard.pl
+suwalki.pl
+swidnica.pl
+swiebodzin.pl
+swinoujscie.pl
+szczecin.pl
+szczytno.pl
+tarnobrzeg.pl
+tgory.pl
+turek.pl
+tychy.pl
+ustka.pl
+walbrzych.pl
+warmia.pl
+warszawa.pl
+waw.pl
+wegrow.pl
+wielun.pl
+wlocl.pl
+wloclawek.pl
+wodzislaw.pl
+wolomin.pl
+wroclaw.pl
+zachpomor.pl
+zagan.pl
+zarow.pl
+zgora.pl
+zgorzelec.pl
+pm
+pn
+co.pn
+edu.pn
+gov.pn
+net.pn
+org.pn
+post
+pr
+ac.pr
+biz.pr
+com.pr
+edu.pr
+est.pr
+gov.pr
+info.pr
+isla.pr
+name.pr
+net.pr
+org.pr
+pro.pr
+prof.pr
+pro
+aaa.pro
+aca.pro
+acct.pro
+avocat.pro
+bar.pro
+cpa.pro
+eng.pro
+jur.pro
+law.pro
+med.pro
+recht.pro
+ps
+com.ps
+edu.ps
+gov.ps
+net.ps
+org.ps
+plo.ps
+sec.ps
+pt
+com.pt
+edu.pt
+gov.pt
+int.pt
+net.pt
+nome.pt
+org.pt
+publ.pt
+pw
+gov.pw
+py
+com.py
+coop.py
+edu.py
+gov.py
+mil.py
+net.py
+org.py
+qa
+com.qa
+edu.qa
+gov.qa
+mil.qa
+name.qa
+net.qa
+org.qa
+sch.qa
+re
+asso.re
+com.re
+ro
+arts.ro
+com.ro
+firm.ro
+info.ro
+nom.ro
+nt.ro
+org.ro
+rec.ro
+store.ro
+tm.ro
+www.ro
+rs
+ac.rs
+co.rs
+edu.rs
+gov.rs
+in.rs
+org.rs
+ru
+rw
+ac.rw
+co.rw
+coop.rw
+gov.rw
+mil.rw
+net.rw
+org.rw
+sa
+com.sa
+edu.sa
+gov.sa
+med.sa
+net.sa
+org.sa
+pub.sa
+sch.sa
+sb
+com.sb
+edu.sb
+gov.sb
+net.sb
+org.sb
+sc
+com.sc
+edu.sc
+gov.sc
+net.sc
+org.sc
+sd
+com.sd
+edu.sd
+gov.sd
+info.sd
+med.sd
+net.sd
+org.sd
+tv.sd
+se
+a.se
+ac.se
+b.se
+bd.se
+brand.se
+c.se
+d.se
+e.se
+f.se
+fh.se
+fhsk.se
+fhv.se
+g.se
+h.se
+i.se
+k.se
+komforb.se
+kommunalforbund.se
+komvux.se
+l.se
+lanbib.se
+m.se
+n.se
+naturbruksgymn.se
+o.se
+org.se
+p.se
+parti.se
+pp.se
+press.se
+r.se
+s.se
+t.se
+tm.se
+u.se
+w.se
+x.se
+y.se
+z.se
+sg
+com.sg
+edu.sg
+gov.sg
+net.sg
+org.sg
+sh
+com.sh
+gov.sh
+mil.sh
+net.sh
+org.sh
+si
+sj
+sk
+org.sk
+sl
+com.sl
+edu.sl
+gov.sl
+net.sl
+org.sl
+sm
+sn
+art.sn
+com.sn
+edu.sn
+gouv.sn
+org.sn
+univ.sn
+so
+com.so
+edu.so
+gov.so
+me.so
+net.so
+org.so
+sr
+ss
+biz.ss
+co.ss
+com.ss
+edu.ss
+gov.ss
+me.ss
+net.ss
+org.ss
+sch.ss
+st
+co.st
+com.st
+consulado.st
+edu.st
+embaixada.st
+mil.st
+net.st
+org.st
+principe.st
+saotome.st
+store.st
+su
+sv
+com.sv
+edu.sv
+gob.sv
+org.sv
+red.sv
+sx
+gov.sx
+sy
+com.sy
+edu.sy
+gov.sy
+mil.sy
+net.sy
+org.sy
+sz
+ac.sz
+co.sz
+org.sz
+tc
+td
+tel
+tf
+tg
+th
+ac.th
+co.th
+go.th
+in.th
+mi.th
+net.th
+or.th
+tj
+biz.tj
+co.tj
+com.tj
+edu.tj
+go.tj
+gov.tj
+int.tj
+mil.tj
+name.tj
+net.tj
+nic.tj
+org.tj
+test.tj
+web.tj
+tk
+tl
+gov.tl
+tm
+co.tm
+com.tm
+edu.tm
+gov.tm
+mil.tm
+net.tm
+nom.tm
+org.tm
+tn
+com.tn
+ens.tn
+fin.tn
+gov.tn
+ind.tn
+info.tn
+intl.tn
+mincom.tn
+nat.tn
+net.tn
+org.tn
+perso.tn
+tourism.tn
+to
+com.to
+edu.to
+gov.to
+mil.to
+net.to
+org.to
+tr
+av.tr
+bbs.tr
+bel.tr
+biz.tr
+com.tr
+dr.tr
+edu.tr
+gen.tr
+gov.tr
+info.tr
+k12.tr
+kep.tr
+mil.tr
+name.tr
+net.tr
+org.tr
+pol.tr
+tel.tr
+tsk.tr
+tv.tr
+web.tr
+nc.tr
+gov.nc.tr
+tt
+biz.tt
+co.tt
+com.tt
+edu.tt
+gov.tt
+info.tt
+mil.tt
+name.tt
+net.tt
+org.tt
+pro.tt
+tv
+tw
+club.tw
+com.tw
+ebiz.tw
+edu.tw
+game.tw
+gov.tw
+idv.tw
+mil.tw
+net.tw
+org.tw
+tz
+ac.tz
+co.tz
+go.tz
+hotel.tz
+info.tz
+me.tz
+mil.tz
+mobi.tz
+ne.tz
+or.tz
+sc.tz
+tv.tz
+ua
+com.ua
+edu.ua
+gov.ua
+in.ua
+net.ua
+org.ua
+cherkassy.ua
+cherkasy.ua
+chernigov.ua
+chernihiv.ua
+chernivtsi.ua
+chernovtsy.ua
+ck.ua
+cn.ua
+cr.ua
+crimea.ua
+cv.ua
+dn.ua
+dnepropetrovsk.ua
+dnipropetrovsk.ua
+donetsk.ua
+dp.ua
+if.ua
+ivano-frankivsk.ua
+kh.ua
+kharkiv.ua
+kharkov.ua
+kherson.ua
+khmelnitskiy.ua
+khmelnytskyi.ua
+kiev.ua
+kirovograd.ua
+km.ua
+kr.ua
+kropyvnytskyi.ua
+krym.ua
+ks.ua
+kv.ua
+kyiv.ua
+lg.ua
+lt.ua
+lugansk.ua
+luhansk.ua
+lutsk.ua
+lv.ua
+lviv.ua
+mk.ua
+mykolaiv.ua
+nikolaev.ua
+od.ua
+odesa.ua
+odessa.ua
+pl.ua
+poltava.ua
+rivne.ua
+rovno.ua
+rv.ua
+sb.ua
+sebastopol.ua
+sevastopol.ua
+sm.ua
+sumy.ua
+te.ua
+ternopil.ua
+uz.ua
+uzhgorod.ua
+uzhhorod.ua
+vinnica.ua
+vinnytsia.ua
+vn.ua
+volyn.ua
+yalta.ua
+zakarpattia.ua
+zaporizhzhe.ua
+zaporizhzhia.ua
+zhitomir.ua
+zhytomyr.ua
+zp.ua
+zt.ua
+ug
+ac.ug
+co.ug
+com.ug
+edu.ug
+go.ug
+gov.ug
+mil.ug
+ne.ug
+or.ug
+org.ug
+sc.ug
+us.ug
+uk
+ac.uk
+co.uk
+gov.uk
+ltd.uk
+me.uk
+net.uk
+nhs.uk
+org.uk
+plc.uk
+police.uk
+*.sch.uk
+us
+dni.us
+isa.us
+nsn.us
+ak.us
+al.us
+ar.us
+as.us
+az.us
+ca.us
+co.us
+ct.us
+dc.us
+de.us
+fl.us
+ga.us
+gu.us
+hi.us
+ia.us
+id.us
+il.us
+in.us
+ks.us
+ky.us
+la.us
+ma.us
+md.us
+me.us
+mi.us
+mn.us
+mo.us
+ms.us
+mt.us
+nc.us
+nd.us
+ne.us
+nh.us
+nj.us
+nm.us
+nv.us
+ny.us
+oh.us
+ok.us
+or.us
+pa.us
+pr.us
+ri.us
+sc.us
+sd.us
+tn.us
+tx.us
+ut.us
+va.us
+vi.us
+vt.us
+wa.us
+wi.us
+wv.us
+wy.us
+k12.ak.us
+k12.al.us
+k12.ar.us
+k12.as.us
+k12.az.us
+k12.ca.us
+k12.co.us
+k12.ct.us
+k12.dc.us
+k12.fl.us
+k12.ga.us
+k12.gu.us
+k12.ia.us
+k12.id.us
+k12.il.us
+k12.in.us
+k12.ks.us
+k12.ky.us
+k12.la.us
+k12.ma.us
+k12.md.us
+k12.me.us
+k12.mi.us
+k12.mn.us
+k12.mo.us
+k12.ms.us
+k12.mt.us
+k12.nc.us
+k12.ne.us
+k12.nh.us
+k12.nj.us
+k12.nm.us
+k12.nv.us
+k12.ny.us
+k12.oh.us
+k12.ok.us
+k12.or.us
+k12.pa.us
+k12.pr.us
+k12.sc.us
+k12.tn.us
+k12.tx.us
+k12.ut.us
+k12.va.us
+k12.vi.us
+k12.vt.us
+k12.wa.us
+k12.wi.us
+cc.ak.us
+lib.ak.us
+cc.al.us
+lib.al.us
+cc.ar.us
+lib.ar.us
+cc.as.us
+lib.as.us
+cc.az.us
+lib.az.us
+cc.ca.us
+lib.ca.us
+cc.co.us
+lib.co.us
+cc.ct.us
+lib.ct.us
+cc.dc.us
+lib.dc.us
+cc.de.us
+cc.fl.us
+lib.fl.us
+cc.ga.us
+lib.ga.us
+cc.gu.us
+lib.gu.us
+cc.hi.us
+lib.hi.us
+cc.ia.us
+lib.ia.us
+cc.id.us
+lib.id.us
+cc.il.us
+lib.il.us
+cc.in.us
+lib.in.us
+cc.ks.us
+lib.ks.us
+cc.ky.us
+lib.ky.us
+cc.la.us
+lib.la.us
+cc.ma.us
+lib.ma.us
+cc.md.us
+lib.md.us
+cc.me.us
+lib.me.us
+cc.mi.us
+lib.mi.us
+cc.mn.us
+lib.mn.us
+cc.mo.us
+lib.mo.us
+cc.ms.us
+cc.mt.us
+lib.mt.us
+cc.nc.us
+lib.nc.us
+cc.ne.us
+lib.ne.us
+cc.nh.us
+lib.nh.us
+cc.nj.us
+lib.nj.us
+cc.nm.us
+lib.nm.us
+cc.nv.us
+lib.nv.us
+cc.ny.us
+lib.ny.us
+cc.oh.us
+lib.oh.us
+cc.ok.us
+lib.ok.us
+cc.or.us
+lib.or.us
+cc.pa.us
+lib.pa.us
+cc.pr.us
+lib.pr.us
+cc.ri.us
+lib.ri.us
+cc.sc.us
+lib.sc.us
+cc.sd.us
+lib.sd.us
+cc.tn.us
+lib.tn.us
+cc.tx.us
+lib.tx.us
+cc.ut.us
+lib.ut.us
+cc.va.us
+lib.va.us
+cc.vi.us
+lib.vi.us
+cc.vt.us
+lib.vt.us
+cc.wa.us
+lib.wa.us
+cc.wi.us
+lib.wi.us
+cc.wv.us
+cc.wy.us
+k12.wy.us
+lib.wy.us
+chtr.k12.ma.us
+paroch.k12.ma.us
+pvt.k12.ma.us
+ann-arbor.mi.us
+cog.mi.us
+dst.mi.us
+eaton.mi.us
+gen.mi.us
+mus.mi.us
+tec.mi.us
+washtenaw.mi.us
+uy
+com.uy
+edu.uy
+gub.uy
+mil.uy
+net.uy
+org.uy
+uz
+co.uz
+com.uz
+net.uz
+org.uz
+va
+vc
+com.vc
+edu.vc
+gov.vc
+mil.vc
+net.vc
+org.vc
+ve
+arts.ve
+bib.ve
+co.ve
+com.ve
+e12.ve
+edu.ve
+emprende.ve
+firm.ve
+gob.ve
+gov.ve
+ia.ve
+info.ve
+int.ve
+mil.ve
+net.ve
+nom.ve
+org.ve
+rar.ve
+rec.ve
+store.ve
+tec.ve
+web.ve
+vg
+edu.vg
+vi
+co.vi
+com.vi
+k12.vi
+net.vi
+org.vi
+vn
+ac.vn
+ai.vn
+biz.vn
+com.vn
+edu.vn
+gov.vn
+health.vn
+id.vn
+info.vn
+int.vn
+io.vn
+name.vn
+net.vn
+org.vn
+pro.vn
+angiang.vn
+bacgiang.vn
+backan.vn
+baclieu.vn
+bacninh.vn
+baria-vungtau.vn
+bentre.vn
+binhdinh.vn
+binhduong.vn
+binhphuoc.vn
+binhthuan.vn
+camau.vn
+cantho.vn
+caobang.vn
+daklak.vn
+daknong.vn
+danang.vn
+dienbien.vn
+dongnai.vn
+dongthap.vn
+gialai.vn
+hagiang.vn
+haiduong.vn
+haiphong.vn
+hanam.vn
+hanoi.vn
+hatinh.vn
+haugiang.vn
+hoabinh.vn
+hue.vn
+hungyen.vn
+khanhhoa.vn
+kiengiang.vn
+kontum.vn
+laichau.vn
+lamdong.vn
+langson.vn
+laocai.vn
+longan.vn
+namdinh.vn
+nghean.vn
+ninhbinh.vn
+ninhthuan.vn
+phutho.vn
+phuyen.vn
+quangbinh.vn
+quangnam.vn
+quangngai.vn
+quangninh.vn
+quangtri.vn
+soctrang.vn
+sonla.vn
+tayninh.vn
+thaibinh.vn
+thainguyen.vn
+thanhhoa.vn
+thanhphohochiminh.vn
+thuathienhue.vn
+tiengiang.vn
+travinh.vn
+tuyenquang.vn
+vinhlong.vn
+vinhphuc.vn
+yenbai.vn
+vu
+com.vu
+edu.vu
+net.vu
+org.vu
+wf
+ws
+com.ws
+edu.ws
+gov.ws
+net.ws
+org.ws
+yt
+xn--mgbaam7a8h
+xn--y9a3aq
+xn--54b7fta0cc
+xn--90ae
+xn--mgbcpq6gpa1a
+xn--90ais
+xn--fiqs8s
+xn--fiqz9s
+xn--lgbbat1ad8j
+xn--wgbh1c
+xn--e1a4c
+xn--qxa6a
+xn--mgbah1a3hjkrd
+xn--node
+xn--qxam
+xn--j6w193g
+xn--gmqw5a.xn--j6w193g
+xn--55qx5d.xn--j6w193g
+xn--mxtq1m.xn--j6w193g
+xn--wcvs22d.xn--j6w193g
+xn--uc0atv.xn--j6w193g
+xn--od0alg.xn--j6w193g
+xn--2scrj9c
+xn--3hcrj9c
+xn--45br5cyl
+xn--h2breg3eve
+xn--h2brj9c8c
+xn--mgbgu82a
+xn--rvc1e0am3e
+xn--h2brj9c
+xn--mgbbh1a
+xn--mgbbh1a71e
+xn--fpcrj9c3d
+xn--gecrj9c
+xn--s9brj9c
+xn--45brj9c
+xn--xkc2dl3a5ee0h
+xn--mgba3a4f16a
+xn--mgba3a4fra
+xn--mgbtx2b
+xn--mgbayh7gpa
+xn--3e0b707e
+xn--80ao21a
+xn--q7ce6a
+xn--fzc2c9e2c
+xn--xkc2al3hye2a
+xn--mgbc0a9azcg
+xn--d1alf
+xn--l1acc
+xn--mix891f
+xn--mix082f
+xn--mgbx4cd0ab
+xn--mgb9awbf
+xn--mgbai9azgqp6j
+xn--mgbai9a5eva00b
+xn--ygbi2ammx
+xn--90a3ac
+xn--80au.xn--90a3ac
+xn--90azh.xn--90a3ac
+xn--d1at.xn--90a3ac
+xn--c1avg.xn--90a3ac
+xn--o1ac.xn--90a3ac
+xn--o1ach.xn--90a3ac
+xn--p1ai
+xn--wgbl6a
+xn--mgberp4a5d4ar
+xn--mgberp4a5d4a87g
+xn--mgbqly7c0a67fbc
+xn--mgbqly7cvafr
+xn--mgbpl2fh
+xn--yfro4i67o
+xn--clchc0ea0b2g2a9gcd
+xn--ogbpf8fl
+xn--mgbtf8fl
+xn--o3cw4h
+xn--o3cyx2a.xn--o3cw4h
+xn--12co0c3b4eva.xn--o3cw4h
+xn--m3ch0j3a.xn--o3cw4h
+xn--h3cuzk1di.xn--o3cw4h
+xn--12c1fe0br.xn--o3cw4h
+xn--12cfi8ixb8l.xn--o3cw4h
+xn--pgbs0dh
+xn--kpry57d
+xn--kprw13d
+xn--nnx388a
+xn--j1amh
+xn--mgb2ddes
+xxx
+ye
+com.ye
+edu.ye
+gov.ye
+mil.ye
+net.ye
+org.ye
+ac.za
+agric.za
+alt.za
+co.za
+edu.za
+gov.za
+grondar.za
+law.za
+mil.za
+net.za
+ngo.za
+nic.za
+nis.za
+nom.za
+org.za
+school.za
+tm.za
+web.za
+zm
+ac.zm
+biz.zm
+co.zm
+com.zm
+edu.zm
+gov.zm
+info.zm
+mil.zm
+net.zm
+org.zm
+sch.zm
+zw
+ac.zw
+co.zw
+gov.zw
+mil.zw
+org.zw
+aaa
+aarp
+abb
+abbott
+abbvie
+abc
+able
+abogado
+abudhabi
+academy
+accenture
+accountant
+accountants
+aco
+actor
+ads
+adult
+aeg
+aetna
+afl
+africa
+agakhan
+agency
+aig
+airbus
+airforce
+airtel
+akdn
+alibaba
+alipay
+allfinanz
+allstate
+ally
+alsace
+alstom
+amazon
+americanexpress
+americanfamily
+amex
+amfam
+amica
+amsterdam
+analytics
+android
+anquan
+anz
+aol
+apartments
+app
+apple
+aquarelle
+arab
+aramco
+archi
+army
+art
+arte
+asda
+associates
+athleta
+attorney
+auction
+audi
+audible
+audio
+auspost
+author
+auto
+autos
+aws
+axa
+azure
+baby
+baidu
+banamex
+band
+bank
+bar
+barcelona
+barclaycard
+barclays
+barefoot
+bargains
+baseball
+basketball
+bauhaus
+bayern
+bbc
+bbt
+bbva
+bcg
+bcn
+beats
+beauty
+beer
+berlin
+best
+bestbuy
+bet
+bharti
+bible
+bid
+bike
+bing
+bingo
+bio
+black
+blackfriday
+blockbuster
+blog
+bloomberg
+blue
+bms
+bmw
+bnpparibas
+boats
+boehringer
+bofa
+bom
+bond
+boo
+book
+booking
+bosch
+bostik
+boston
+bot
+boutique
+box
+bradesco
+bridgestone
+broadway
+broker
+brother
+brussels
+build
+builders
+business
+buy
+buzz
+bzh
+cab
+cafe
+cal
+call
+calvinklein
+cam
+camera
+camp
+canon
+capetown
+capital
+capitalone
+car
+caravan
+cards
+care
+career
+careers
+cars
+casa
+case
+cash
+casino
+catering
+catholic
+cba
+cbn
+cbre
+center
+ceo
+cern
+cfa
+cfd
+chanel
+channel
+charity
+chase
+chat
+cheap
+chintai
+christmas
+chrome
+church
+cipriani
+circle
+cisco
+citadel
+citi
+citic
+city
+claims
+cleaning
+click
+clinic
+clinique
+clothing
+cloud
+club
+clubmed
+coach
+codes
+coffee
+college
+cologne
+commbank
+community
+company
+compare
+computer
+comsec
+condos
+construction
+consulting
+contact
+contractors
+cooking
+cool
+corsica
+country
+coupon
+coupons
+courses
+cpa
+credit
+creditcard
+creditunion
+cricket
+crown
+crs
+cruise
+cruises
+cuisinella
+cymru
+cyou
+dad
+dance
+data
+date
+dating
+datsun
+day
+dclk
+dds
+deal
+dealer
+deals
+degree
+delivery
+dell
+deloitte
+delta
+democrat
+dental
+dentist
+desi
+design
+dev
+dhl
+diamonds
+diet
+digital
+direct
+directory
+discount
+discover
+dish
+diy
+dnp
+docs
+doctor
+dog
+domains
+dot
+download
+drive
+dtv
+dubai
+dupont
+durban
+dvag
+dvr
+earth
+eat
+eco
+edeka
+education
+email
+emerck
+energy
+engineer
+engineering
+enterprises
+epson
+equipment
+ericsson
+erni
+esq
+estate
+eurovision
+eus
+events
+exchange
+expert
+exposed
+express
+extraspace
+fage
+fail
+fairwinds
+faith
+family
+fan
+fans
+farm
+farmers
+fashion
+fast
+fedex
+feedback
+ferrari
+ferrero
+fidelity
+fido
+film
+final
+finance
+financial
+fire
+firestone
+firmdale
+fish
+fishing
+fit
+fitness
+flickr
+flights
+flir
+florist
+flowers
+fly
+foo
+food
+football
+ford
+forex
+forsale
+forum
+foundation
+fox
+free
+fresenius
+frl
+frogans
+frontier
+ftr
+fujitsu
+fun
+fund
+furniture
+futbol
+fyi
+gal
+gallery
+gallo
+gallup
+game
+games
+gap
+garden
+gay
+gbiz
+gdn
+gea
+gent
+genting
+george
+ggee
+gift
+gifts
+gives
+giving
+glass
+gle
+global
+globo
+gmail
+gmbh
+gmo
+gmx
+godaddy
+gold
+goldpoint
+golf
+goodyear
+goog
+google
+gop
+got
+grainger
+graphics
+gratis
+green
+gripe
+grocery
+group
+gucci
+guge
+guide
+guitars
+guru
+hair
+hamburg
+hangout
+haus
+hbo
+hdfc
+hdfcbank
+health
+healthcare
+help
+helsinki
+here
+hermes
+hiphop
+hisamitsu
+hitachi
+hiv
+hkt
+hockey
+holdings
+holiday
+homedepot
+homegoods
+homes
+homesense
+honda
+horse
+hospital
+host
+hosting
+hot
+hotel
+hotels
+hotmail
+house
+how
+hsbc
+hughes
+hyatt
+hyundai
+ibm
+icbc
+ice
+icu
+ieee
+ifm
+ikano
+imamat
+imdb
+immo
+immobilien
+inc
+industries
+infiniti
+ing
+ink
+institute
+insurance
+insure
+international
+intuit
+investments
+ipiranga
+irish
+ismaili
+ist
+istanbul
+itau
+itv
+jaguar
+java
+jcb
+jeep
+jetzt
+jewelry
+jio
+jll
+jmp
+jnj
+joburg
+jot
+joy
+jpmorgan
+jprs
+juegos
+kaufen
+kddi
+kerryhotels
+kerryproperties
+kfh
+kia
+kids
+kim
+kindle
+kitchen
+kiwi
+koeln
+komatsu
+kosher
+kpmg
+kpn
+krd
+kred
+kuokgroup
+kyoto
+lacaixa
+lamborghini
+lamer
+land
+landrover
+lanxess
+lasalle
+lat
+latino
+latrobe
+law
+lawyer
+lds
+lease
+leclerc
+lefrak
+legal
+lego
+lexus
+lgbt
+lidl
+life
+lifeinsurance
+lifestyle
+lighting
+like
+lilly
+limited
+limo
+lincoln
+link
+live
+living
+llc
+llp
+loan
+loans
+locker
+locus
+lol
+london
+lotte
+lotto
+love
+lpl
+lplfinancial
+ltd
+ltda
+lundbeck
+luxe
+luxury
+madrid
+maif
+maison
+makeup
+man
+management
+mango
+map
+market
+marketing
+markets
+marriott
+marshalls
+mattel
+mba
+mckinsey
+med
+media
+meet
+melbourne
+meme
+memorial
+men
+menu
+merck
+merckmsd
+miami
+microsoft
+mini
+mint
+mit
+mitsubishi
+mlb
+mls
+mma
+mobile
+moda
+moe
+moi
+mom
+monash
+money
+monster
+mormon
+mortgage
+moscow
+moto
+motorcycles
+mov
+movie
+msd
+mtn
+mtr
+music
+nab
+nagoya
+navy
+nba
+nec
+netbank
+netflix
+network
+neustar
+new
+news
+next
+nextdirect
+nexus
+nfl
+ngo
+nhk
+nico
+nike
+nikon
+ninja
+nissan
+nissay
+nokia
+norton
+now
+nowruz
+nowtv
+nra
+nrw
+ntt
+nyc
+obi
+observer
+office
+okinawa
+olayan
+olayangroup
+ollo
+omega
+one
+ong
+onl
+online
+ooo
+open
+oracle
+orange
+organic
+origins
+osaka
+otsuka
+ott
+ovh
+page
+panasonic
+paris
+pars
+partners
+parts
+party
+pay
+pccw
+pet
+pfizer
+pharmacy
+phd
+philips
+phone
+photo
+photography
+photos
+physio
+pics
+pictet
+pictures
+pid
+pin
+ping
+pink
+pioneer
+pizza
+place
+play
+playstation
+plumbing
+plus
+pnc
+pohl
+poker
+politie
+porn
+praxi
+press
+prime
+prod
+productions
+prof
+progressive
+promo
+properties
+property
+protection
+pru
+prudential
+pub
+pwc
+qpon
+quebec
+quest
+racing
+radio
+read
+realestate
+realtor
+realty
+recipes
+red
+redumbrella
+rehab
+reise
+reisen
+reit
+reliance
+ren
+rent
+rentals
+repair
+report
+republican
+rest
+restaurant
+review
+reviews
+rexroth
+rich
+richardli
+ricoh
+ril
+rio
+rip
+rocks
+rodeo
+rogers
+room
+rsvp
+rugby
+ruhr
+run
+rwe
+ryukyu
+saarland
+safe
+safety
+sakura
+sale
+salon
+samsclub
+samsung
+sandvik
+sandvikcoromant
+sanofi
+sap
+sarl
+sas
+save
+saxo
+sbi
+sbs
+scb
+schaeffler
+schmidt
+scholarships
+school
+schule
+schwarz
+science
+scot
+search
+seat
+secure
+security
+seek
+select
+sener
+services
+seven
+sew
+sex
+sexy
+sfr
+shangrila
+sharp
+shell
+shia
+shiksha
+shoes
+shop
+shopping
+shouji
+show
+silk
+sina
+singles
+site
+ski
+skin
+sky
+skype
+sling
+smart
+smile
+sncf
+soccer
+social
+softbank
+software
+sohu
+solar
+solutions
+song
+sony
+soy
+spa
+space
+sport
+spot
+srl
+stada
+staples
+star
+statebank
+statefarm
+stc
+stcgroup
+stockholm
+storage
+store
+stream
+studio
+study
+style
+sucks
+supplies
+supply
+support
+surf
+surgery
+suzuki
+swatch
+swiss
+sydney
+systems
+tab
+taipei
+talk
+taobao
+target
+tatamotors
+tatar
+tattoo
+tax
+taxi
+tci
+tdk
+team
+tech
+technology
+temasek
+tennis
+teva
+thd
+theater
+theatre
+tiaa
+tickets
+tienda
+tips
+tires
+tirol
+tjmaxx
+tjx
+tkmaxx
+tmall
+today
+tokyo
+tools
+top
+toray
+toshiba
+total
+tours
+town
+toyota
+toys
+trade
+trading
+training
+travel
+travelers
+travelersinsurance
+trust
+trv
+tube
+tui
+tunes
+tushu
+tvs
+ubank
+ubs
+unicom
+university
+uno
+uol
+ups
+vacations
+vana
+vanguard
+vegas
+ventures
+verisign
+versicherung
+vet
+viajes
+video
+vig
+viking
+villas
+vin
+vip
+virgin
+visa
+vision
+viva
+vivo
+vlaanderen
+vodka
+volvo
+vote
+voting
+voto
+voyage
+wales
+walmart
+walter
+wang
+wanggou
+watch
+watches
+weather
+weatherchannel
+web
+webcam
+weber
+website
+wed
+wedding
+weibo
+weir
+whoswho
+wien
+wiki
+williamhill
+win
+windows
+wine
+winners
+wme
+woodside
+work
+works
+world
+wow
+wtc
+wtf
+xbox
+xerox
+xihuan
+xin
+xn--11b4c3d
+xn--1ck2e1b
+xn--1qqw23a
+xn--30rr7y
+xn--3bst00m
+xn--3ds443g
+xn--3pxu8k
+xn--42c2d9a
+xn--45q11c
+xn--4gbrim
+xn--55qw42g
+xn--55qx5d
+xn--5su34j936bgsg
+xn--5tzm5g
+xn--6frz82g
+xn--6qq986b3xl
+xn--80adxhks
+xn--80aqecdr1a
+xn--80asehdb
+xn--80aswg
+xn--8y0a063a
+xn--9dbq2a
+xn--9et52u
+xn--9krt00a
+xn--b4w605ferd
+xn--bck1b9a5dre4c
+xn--c1avg
+xn--c2br7g
+xn--cck2b3b
+xn--cckwcxetd
+xn--cg4bki
+xn--czr694b
+xn--czrs0t
+xn--czru2d
+xn--d1acj3b
+xn--eckvdtc9d
+xn--efvy88h
+xn--fct429k
+xn--fhbei
+xn--fiq228c5hs
+xn--fiq64b
+xn--fjq720a
+xn--flw351e
+xn--fzys8d69uvgm
+xn--g2xx48c
+xn--gckr3f0f
+xn--gk3at1e
+xn--hxt814e
+xn--i1b6b1a6a2e
+xn--imr513n
+xn--io0a7i
+xn--j1aef
+xn--jlq480n2rg
+xn--jvr189m
+xn--kcrx77d1x4a
+xn--kput3i
+xn--mgba3a3ejt
+xn--mgba7c0bbn0a
+xn--mgbab2bd
+xn--mgbca7dzdo
+xn--mgbi4ecexp
+xn--mgbt3dhd
+xn--mk1bu44c
+xn--mxtq1m
+xn--ngbc5azd
+xn--ngbe9e0a
+xn--ngbrx
+xn--nqv7f
+xn--nqv7fs00ema
+xn--nyqy26a
+xn--otu796d
+xn--p1acf
+xn--pssy2u
+xn--q9jyb4c
+xn--qcka1pmc
+xn--rhqv96g
+xn--rovu88b
+xn--ses554g
+xn--t60b56a
+xn--tckwe
+xn--tiq49xqyj
+xn--unup4y
+xn--vermgensberater-ctb
+xn--vermgensberatung-pwb
+xn--vhquv
+xn--vuq861b
+xn--w4r85el8fhu5dnra
+xn--w4rs40l
+xn--xhq521b
+xn--zfr164b
+xyz
+yachts
+yahoo
+yamaxun
+yandex
+yodobashi
+yoga
+yokohama
+you
+youtube
+yun
+zappos
+zara
+zero
+zip
+zone
+zuerich
diff --git a/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs b/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
index d880a6c7d2..a64b230b2b 100644
--- a/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
+++ b/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
@@ -290,7 +290,7 @@ public static class GlobalStaticConfiguration
public static ExportFileType Lookup_Port_ExportFileType => ExportFileType.Csv;
// Application: RDAP
- public static RDAPQueryType RDAP_QueryType => RDAPQueryType.Domain;
+ public static RDAPQueryType RDAP_QueryType => RDAPQueryType.Auto;
public static bool RDAP_FollowReferral => true;
public static int RDAP_Timeout => 10000;
public static ExportFileType RDAP_ExportFileType => ExportFileType.Json;
diff --git a/Source/NETworkManager.Validators/RDAPQueryValidator.cs b/Source/NETworkManager.Validators/RDAPQueryValidator.cs
index f2fd6240b6..25decd07fe 100644
--- a/Source/NETworkManager.Validators/RDAPQueryValidator.cs
+++ b/Source/NETworkManager.Validators/RDAPQueryValidator.cs
@@ -6,7 +6,9 @@
namespace NETworkManager.Validators;
///
-/// Validates an RDAP query (domain, TLD, IP address/CIDR, AS number or entity handle) depending on the query type.
+/// Validates an RDAP query (domain, nameserver, TLD, IP address/CIDR, AS number or entity handle) depending on the
+/// query type.
+/// With , the input must be valid for the detected type.
///
public class RDAPQueryValidator : ValidationRule
{
@@ -14,7 +16,7 @@ public class RDAPQueryValidator : ValidationRule
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
- var error = RDAPQueryParser.TryParse(Wrapper?.QueryType ?? RDAPQueryType.Domain, value as string, out _);
+ var error = RDAPQueryParser.TryParse(Wrapper?.QueryType ?? RDAPQueryType.Auto, value as string, out _);
return error == RDAPQueryParseError.None
? ValidationResult.ValidResult
@@ -30,7 +32,9 @@ public static string GetErrorMessage(RDAPQueryParseError error)
{
return error switch
{
+ RDAPQueryParseError.InvalidQuery => Strings.EnterValidRDAPQuery,
RDAPQueryParseError.InvalidDomain => Strings.EnterValidDomain,
+ RDAPQueryParseError.InvalidNameserver => Strings.EnterValidNameserver,
RDAPQueryParseError.InvalidTLD => Strings.EnterValidTLD,
RDAPQueryParseError.InvalidIPAddress => Strings.EnterValidIPAddressOrCIDR,
RDAPQueryParseError.InvalidASN => Strings.EnterValidASN,
diff --git a/Source/NETworkManager/ViewModels/IPScannerViewModel.cs b/Source/NETworkManager/ViewModels/IPScannerViewModel.cs
index 3d00a2ee17..4905fdb68d 100644
--- a/Source/NETworkManager/ViewModels/IPScannerViewModel.cs
+++ b/Source/NETworkManager/ViewModels/IPScannerViewModel.cs
@@ -408,6 +408,26 @@ private void PerformDNSLookupHostnameAction()
EventSystem.RedirectToApplication(ApplicationName.DNSLookup, SelectedResult.Hostname);
}
+ ///
+ /// Gets the command to query the registration data of the selected IP address via RDAP.
+ ///
+ public ICommand PerformRDAPQueryIPAddressCommand => new RelayCommand(_ => PerformRDAPQueryIPAddressAction());
+
+ private void PerformRDAPQueryIPAddressAction()
+ {
+ EventSystem.RedirectToApplication(ApplicationName.RDAP, SelectedResult.PingInfo.IPAddress.ToString());
+ }
+
+ ///
+ /// Gets the command to query the registration data of the selected hostname (its registered domain) via RDAP.
+ ///
+ public ICommand PerformRDAPQueryHostnameCommand => new RelayCommand(_ => PerformRDAPQueryHostnameAction());
+
+ private void PerformRDAPQueryHostnameAction()
+ {
+ EventSystem.RedirectToApplication(ApplicationName.RDAP, SelectedResult.Hostname);
+ }
+
///
/// Gets the command to execute a custom command for the selected host.
///
diff --git a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs
index 3d608f6b0b..f225e8fa67 100644
--- a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs
+++ b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs
@@ -264,9 +264,7 @@ private static void ApplyToolDefaults(ProfileInfo profile, ProfileName tool)
case ProfileName.RDAP:
profile.RDAP_Enabled = true;
profile.RDAP_Query = profile.Host;
- profile.RDAP_QueryType = System.Net.IPAddress.TryParse(profile.Host, out _)
- ? RDAPQueryType.IPAddress
- : RDAPQueryType.Domain;
+ profile.RDAP_QueryType = RDAPQueryType.Auto;
break;
case ProfileName.Whois:
profile.Whois_Enabled = true;
diff --git a/Source/NETworkManager/ViewModels/ProfileViewModel.cs b/Source/NETworkManager/ViewModels/ProfileViewModel.cs
index dbb27679fc..b67356d8ee 100644
--- a/Source/NETworkManager/ViewModels/ProfileViewModel.cs
+++ b/Source/NETworkManager/ViewModels/ProfileViewModel.cs
@@ -2857,8 +2857,8 @@ public RDAPQueryType RDAP_QueryType
field = value;
OnPropertyChanged();
- // Validate the query again for the new type.
- OnPropertyChanged(nameof(RDAP_Query));
+ // Validate the query (or the inherited host) again for the new type.
+ OnPropertyChanged(RDAP_InheritHost ? nameof(Host) : nameof(RDAP_Query));
}
}
diff --git a/Source/NETworkManager/ViewModels/RDAPHostViewModel.cs b/Source/NETworkManager/ViewModels/RDAPHostViewModel.cs
index d08ca96126..72fe499c95 100644
--- a/Source/NETworkManager/ViewModels/RDAPHostViewModel.cs
+++ b/Source/NETworkManager/ViewModels/RDAPHostViewModel.cs
@@ -114,13 +114,13 @@ private static void CloseItemAction(ItemActionCallbackArgs args)
///
/// Query (e.g. domain, IP address, AS number).
///
- /// Type of the query. If null, the type is detected from the query (e.g. data redirected from another tool or a
- /// run command), or the last selected type is used for an empty tab.
+ /// Type of the query. If null, the type is detected from the query (, e.g. data
+ /// redirected from another tool or a run command), or the last selected type is used for an empty tab.
///
public void AddTab(string query = null, RDAPQueryType? queryType = null)
{
if (queryType == null && !string.IsNullOrWhiteSpace(query))
- queryType = RDAPQueryParser.DetectType(query);
+ queryType = RDAPQueryType.Auto;
var tabId = Guid.NewGuid();
diff --git a/Source/NETworkManager/ViewModels/RDAPObjectViewModel.cs b/Source/NETworkManager/ViewModels/RDAPObjectViewModel.cs
index 727c44ea55..d0545dd45d 100644
--- a/Source/NETworkManager/ViewModels/RDAPObjectViewModel.cs
+++ b/Source/NETworkManager/ViewModels/RDAPObjectViewModel.cs
@@ -28,22 +28,31 @@ public RDAPObjectViewModel(RDAPResult result, string title)
AddDetails(response);
- Events = response.Events?
+ // Broken servers may send null items in an array, so they are skipped (OfType).
+ Events = response.Events?.OfType()
.Select(x => new RDAPEventItem(x.EventAction, RDAPDateParser.ToLocalString(x.EventDate), x.EventActor))
.ToList() ?? [];
- Nameservers = response.Nameservers?
+ Nameservers = response.Nameservers?.OfType()
.Select(x => new RDAPNameserverItem(
FormatDomain(x.LdhName, x.UnicodeName),
- string.Join(", ", (x.IPAddresses?.V4 ?? []).Concat(x.IPAddresses?.V6 ?? []))))
+ FormatIPAddresses(x.IPAddresses)))
.ToList() ?? [];
- DSData = response.SecureDNS?.DSData?
+ DSData = response.SecureDNS?.DSData?.OfType()
.Select(x => new RDAPDSDataItem(x.KeyTag?.ToString(CultureInfo.InvariantCulture),
x.Algorithm?.ToString(CultureInfo.InvariantCulture),
x.DigestType?.ToString(CultureInfo.InvariantCulture), x.Digest))
.ToList() ?? [];
+ Networks = response.Networks?.OfType()
+ .Select(x => new RDAPNetworkItem(x.Handle, x.Name, FormatAddressRange(x), x.Country))
+ .ToList() ?? [];
+
+ Autnums = response.Autnums?.OfType()
+ .Select(x => new RDAPAutnumItem(x.Handle, x.Name, FormatAutnumRange(x), x.Country))
+ .ToList() ?? [];
+
Contacts = [];
AddContacts(response.Entities);
@@ -51,7 +60,7 @@ public RDAPObjectViewModel(RDAPResult result, string title)
if (response.ObjectClassName == "entity")
Contacts.Insert(0, CreateContact(response));
- Notices = (response.Notices ?? []).Concat(response.Remarks ?? [])
+ Notices = (response.Notices ?? []).Concat(response.Remarks ?? []).OfType()
.Select(x => new RDAPNoticeItem(x.Title,
string.Join(Environment.NewLine, x.Description?.Where(d => !string.IsNullOrWhiteSpace(d)) ?? []),
GetLinks(x.Links)))
@@ -74,6 +83,10 @@ public RDAPObjectViewModel(RDAPResult result, string title)
public List DSData { get; }
+ public List Networks { get; }
+
+ public List Autnums { get; }
+
public List Contacts { get; }
public List Notices { get; }
@@ -87,7 +100,9 @@ private void AddDetails(RDAPResponse response)
AddDetail(Strings.Server, RequestUrl);
AddDetail(Strings.ObjectClass, response.ObjectClassName);
AddDetail(Strings.Handle, response.Handle);
- AddDetail(Strings.Domain, FormatDomain(response.LdhName, response.UnicodeName));
+ AddDetail(response.ObjectClassName == "nameserver" ? Strings.Hostname : Strings.Domain,
+ FormatDomain(response.LdhName, response.UnicodeName));
+ AddDetail(Strings.IPAddresses, FormatIPAddresses(response.IPAddresses));
AddDetail(Strings.Name, response.Name);
AddDetail(Strings.Type, response.Type);
@@ -95,13 +110,9 @@ private void AddDetails(RDAPResponse response)
AddDetail(Strings.Range, $"{response.StartAddress} - {response.EndAddress}");
if (response.Cidrs is { Count: > 0 })
- AddDetail(Strings.CIDR, string.Join(", ",
- response.Cidrs.Select(x => $"{x.V4Prefix ?? x.V6Prefix}/{x.Length}")));
+ AddDetail(Strings.CIDR, FormatCidrs(response.Cidrs));
- if (response.StartAutnum != null || response.EndAutnum != null)
- AddDetail(Strings.Range, response.StartAutnum == response.EndAutnum
- ? $"AS{response.StartAutnum}"
- : $"AS{response.StartAutnum} - AS{response.EndAutnum}");
+ AddDetail(Strings.Range, FormatAutnumRange(response));
AddDetail(Strings.Country, response.Country);
AddDetail(Strings.ParentHandle, response.ParentHandle);
@@ -113,7 +124,7 @@ private void AddDetails(RDAPResponse response)
AddDetail(Strings.DelegationSigned, response.SecureDNS.DelegationSigned.Value ? Strings.Yes : Strings.No);
if (response.PublicIds is { Count: > 0 })
- AddDetail(Strings.PublicIDs, string.Join(", ", response.PublicIds.Select(x => $"{x.Type}: {x.Identifier}")));
+ AddDetail(Strings.PublicIDs, string.Join(", ", response.PublicIds.OfType().Select(x => $"{x.Type}: {x.Identifier}")));
AddDetail(Strings.Port43, response.Port43);
@@ -132,7 +143,7 @@ private void AddDetail(string name, string value)
///
private void AddContacts(List entities)
{
- foreach (var entity in entities ?? [])
+ foreach (var entity in entities?.OfType() ?? [])
{
Contacts.Add(CreateContact(entity));
AddContacts(entity.Entities);
@@ -173,7 +184,7 @@ static string FormatValues(IEnumerable values)
///
private static List GetLinks(List links)
{
- return links?
+ return links?.OfType()
.Where(x => !string.Equals(x.Rel, "self", StringComparison.OrdinalIgnoreCase))
.Select(x => Uri.TryCreate(x.Href, UriKind.Absolute, out var uri) &&
(uri.Scheme == Uri.UriSchemeHttps || uri.Scheme == Uri.UriSchemeHttp)
@@ -184,6 +195,39 @@ private static List GetLinks(List links)
.ToList() ?? [];
}
+ private static string FormatIPAddresses(RDAPIPAddresses ipAddresses)
+ {
+ return string.Join(", ", (ipAddresses?.V4 ?? []).Concat(ipAddresses?.V6 ?? []));
+ }
+
+ private static string FormatCidrs(List cidrs)
+ {
+ return string.Join(", ", cidrs.OfType().Select(x => $"{x.V4Prefix ?? x.V6Prefix}/{x.Length}"));
+ }
+
+ ///
+ /// Formats the address range of an IP network, preferably as CIDR (cidr0 extension).
+ ///
+ private static string FormatAddressRange(RDAPObject network)
+ {
+ if (network.Cidrs is { Count: > 0 })
+ return FormatCidrs(network.Cidrs);
+
+ return network.StartAddress == null && network.EndAddress == null
+ ? null
+ : $"{network.StartAddress} - {network.EndAddress}";
+ }
+
+ private static string FormatAutnumRange(RDAPObject autnum)
+ {
+ if (autnum.StartAutnum == null && autnum.EndAutnum == null)
+ return null;
+
+ return autnum.StartAutnum == autnum.EndAutnum
+ ? $"AS{autnum.StartAutnum}"
+ : $"AS{autnum.StartAutnum} - AS{autnum.EndAutnum}";
+ }
+
///
/// Formats a domain name with its Unicode form (if different) and without a trailing dot.
///
@@ -238,6 +282,22 @@ public string ToText()
$"{Strings.KeyTag}: {ds.KeyTag}, {Strings.Algorithm}: {ds.Algorithm}, {Strings.DigestType}: {ds.DigestType}, {Strings.Digest}: {ds.Digest}");
}
+ if (Networks.Count > 0)
+ {
+ text.AppendLine().AppendLine($"## {Strings.Networks}");
+
+ foreach (var network in Networks)
+ text.AppendLine(FormatListItem(network.Range, network.Name, network.Handle, network.Country));
+ }
+
+ if (Autnums.Count > 0)
+ {
+ text.AppendLine().AppendLine($"## {Strings.ASNumbers}");
+
+ foreach (var autnum in Autnums)
+ text.AppendLine(FormatListItem(autnum.Range, autnum.Name, autnum.Handle, autnum.Country));
+ }
+
if (Contacts.Count > 0)
{
text.AppendLine().AppendLine($"## {Strings.Contacts}");
@@ -276,6 +336,21 @@ public string ToText()
return text.ToString();
}
+ ///
+ /// Formats a network or AS number for the text export, e.g. "192.0.2.0/24 EXAMPLE-NET (NET-192-0-2-0-1, US)".
+ /// The handle is left out if it is the range (e.g. RIPE uses the prefix as handle).
+ ///
+ private static string FormatListItem(string range, string name, string handle, string country)
+ {
+ if (string.Equals(handle, range, StringComparison.OrdinalIgnoreCase))
+ handle = null;
+
+ var details = string.Join(", ", new[] { handle, country }.Where(x => !string.IsNullOrWhiteSpace(x)));
+
+ return string.Join(" ", new[] { range, name, details.Length > 0 ? $"({details})" : null }
+ .Where(x => !string.IsNullOrWhiteSpace(x)));
+ }
+
private static void AppendValue(StringBuilder text, string name, string value)
{
if (!string.IsNullOrWhiteSpace(value))
@@ -293,6 +368,10 @@ public record RDAPNameserverItem(string Name, string IPAddresses);
public record RDAPDSDataItem(string KeyTag, string Algorithm, string DigestType, string Digest);
+public record RDAPNetworkItem(string Handle, string Name, string Range, string Country);
+
+public record RDAPAutnumItem(string Handle, string Name, string Range, string Country);
+
public record RDAPContactItem(
string Roles,
string Handle,
diff --git a/Source/NETworkManager/ViewModels/RDAPViewModel.cs b/Source/NETworkManager/ViewModels/RDAPViewModel.cs
index e95eb41b8a..5dfa44cb1d 100644
--- a/Source/NETworkManager/ViewModels/RDAPViewModel.cs
+++ b/Source/NETworkManager/ViewModels/RDAPViewModel.cs
@@ -15,6 +15,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
@@ -30,6 +31,7 @@ public class RDAPViewModel : ViewModelBase
private readonly Guid _tabId;
private readonly bool _isLoading;
+ private CancellationTokenSource _cancellationTokenSource;
private bool _firstLoad = true;
private bool _closed;
@@ -63,26 +65,26 @@ public RDAPQueryType QueryType
field = value;
OnPropertyChanged();
- OnPropertyChanged(nameof(QueryWatermark));
// Validate the query again for the new type.
OnPropertyChanged(nameof(Query));
}
}
- ///
- /// Example input for the selected query type.
- ///
- public string QueryWatermark => QueryType switch
+ public bool IsRunning
{
- RDAPQueryType.TLD => StaticStrings.ExampleTLD,
- RDAPQueryType.IPAddress => StaticStrings.ExampleIPAddressOrCIDR,
- RDAPQueryType.ASN => StaticStrings.ExampleASN,
- RDAPQueryType.Entity => StaticStrings.ExampleRDAPEntityHandle,
- _ => StaticStrings.ExampleDomain
- };
+ get;
+ set
+ {
+ if (value == field)
+ return;
- public bool IsRunning
+ field = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public bool IsCanceling
{
get;
set
@@ -251,7 +253,10 @@ private bool Query_CanExecute(object parameter)
private void QueryAction()
{
- _ = RunQuery();
+ if (IsRunning)
+ Stop();
+ else
+ _ = RunQuery();
}
public ICommand OpenInWhoisCommand => new RelayCommand(_ => OpenInWhoisAction());
@@ -296,7 +301,7 @@ private async Task RunQuery()
DragablzTabItem.SetTabHeader(_tabId, Query);
- var parseError = RDAPQueryParser.TryParse(QueryType, Query, out var query);
+ var parseError = RDAPQueryParser.TryParse(QueryType, Query, out var input);
if (parseError != RDAPQueryParseError.None)
{
@@ -306,11 +311,18 @@ private async Task RunQuery()
return;
}
+ // A subdomain (e.g. a hostname) is queried as its registered domain, which is also used for the error messages
+ // and Whois.
+ var query = RDAPQueryParser.GetRegisteredDomain(input) ?? input;
+
+ _cancellationTokenSource?.Dispose();
+ _cancellationTokenSource = new CancellationTokenSource();
+
try
{
_result = await RDAPClient.GetInstance().QueryAsync(query, GlobalStaticConfiguration.RDAP_CachePath,
TimeSpan.FromMilliseconds(SettingsManager.Current.RDAP_Timeout),
- SettingsManager.Current.RDAP_FollowReferral);
+ SettingsManager.Current.RDAP_FollowReferral, _cancellationTokenSource.Token);
List results =
[
@@ -327,11 +339,23 @@ private async Task RunQuery()
IsResultVisible = true;
+ List messages = [];
+
+ if (query != input)
+ messages.Add(string.Format(Strings.RDAPXIsNotARegisteredDomainShowingY, input.Value, query.Value));
+
if (_result.ReferralError != null)
- ShowStatusMessage(GetReferralErrorMessage(_result.ReferralError, query));
+ messages.Add(GetReferralErrorMessage(_result.ReferralError, query));
+
+ if (messages.Count > 0)
+ ShowStatusMessage(string.Join(Environment.NewLine, messages));
AddQueryToHistory(Query);
}
+ catch (OperationCanceledException)
+ {
+ ShowStatusMessage(Strings.CanceledByUserMessage);
+ }
catch (RDAPException ex)
{
ShowStatusMessage(GetErrorMessage(ex, query));
@@ -347,8 +371,17 @@ private async Task RunQuery()
Log.Error("Error while querying RDAP.", ex);
ShowStatusMessage(ex.Message);
}
+ finally
+ {
+ IsRunning = false;
+ IsCanceling = false;
+ }
+ }
- IsRunning = false;
+ private void Stop()
+ {
+ IsCanceling = true;
+ _cancellationTokenSource?.Cancel();
}
private void ShowStatusMessage(string message)
@@ -392,6 +425,9 @@ private static string GetErrorMessage(RDAPException ex, RDAPQuery query)
RDAPErrorKind.TooManyRedirects => Strings.RDAPTooManyRedirects,
RDAPErrorKind.InvalidResponse => string.Format(Strings.RDAPInvalidResponseX, ex.Message),
RDAPErrorKind.Network => string.Format(Strings.RDAPNetworkErrorX, ex.Message),
+ // The timeout of the query (from the settings) is used for each request.
+ RDAPErrorKind.Timeout => string.Format(Strings.RDAPTimeoutAfterXSeconds,
+ SettingsManager.Current.RDAP_Timeout / 1000.0),
_ => string.Format(Strings.RDAPHttpErrorX, serverMessage)
};
}
@@ -404,6 +440,10 @@ public void OnClose()
_closed = true;
+ // Stop the query
+ if (IsRunning)
+ Stop();
+
ConfigurationManager.Current.RDAPTabCount--;
}
diff --git a/Source/NETworkManager/ViewModels/TracerouteViewModel.cs b/Source/NETworkManager/ViewModels/TracerouteViewModel.cs
index 74c07f461a..c5b9f66207 100644
--- a/Source/NETworkManager/ViewModels/TracerouteViewModel.cs
+++ b/Source/NETworkManager/ViewModels/TracerouteViewModel.cs
@@ -320,6 +320,18 @@ private void PerformDNSLookupAction(object data)
EventSystem.RedirectToApplication(ApplicationName.DNSLookup, data.ToString());
}
+ ///
+ /// Gets the command to query the registration data of the selected hop's IP address, hostname (its registered
+ /// domain) or AS number via RDAP.
+ ///
+ public ICommand PerformRDAPQueryCommand => new RelayCommand(PerformRDAPQueryAction);
+
+ private void PerformRDAPQueryAction(object data)
+ {
+ // The AS of the IP geolocation contains the name as well (e.g. "AS15169 Google LLC").
+ EventSystem.RedirectToApplication(ApplicationName.RDAP, data.ToString().Split(' ')[0]);
+ }
+
///
/// Gets the command to copy the round-trip time to the clipboard.
///
diff --git a/Source/NETworkManager/Views/IPScannerView.xaml b/Source/NETworkManager/Views/IPScannerView.xaml
index 36e784063d..30bb80b8c4 100644
--- a/Source/NETworkManager/Views/IPScannerView.xaml
+++ b/Source/NETworkManager/Views/IPScannerView.xaml
@@ -32,6 +32,7 @@
+
@@ -328,6 +329,36 @@
+
diff --git a/Source/NETworkManager/Views/ProfileChildWindow.xaml b/Source/NETworkManager/Views/ProfileChildWindow.xaml
index e3a3f084c1..58db166951 100644
--- a/Source/NETworkManager/Views/ProfileChildWindow.xaml
+++ b/Source/NETworkManager/Views/ProfileChildWindow.xaml
@@ -39,6 +39,7 @@
x:Key="RemoteDesktopNetworkConnectionTypeToStringConverter" />
+
-
@@ -4006,18 +4004,31 @@
+ mah:TextBoxHelper.Watermark="{Binding RDAP_QueryType, Converter={StaticResource RDAPQueryTypeToWatermarkConverter}}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -74,6 +246,19 @@
Visibility="{Binding Events.Count, Converter={StaticResource IntNotZeroToVisibilityCollapsedConverter}}">
+
+
+
@@ -90,6 +275,19 @@
+
+
+
@@ -104,6 +302,19 @@
Visibility="{Binding DSData.Count, Converter={StaticResource IntNotZeroToVisibilityCollapsedConverter}}">
+
+
+
@@ -117,11 +328,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -211,7 +497,7 @@
VerticalAlignment="Center" />
@@ -243,7 +529,8 @@
-
+
+
+
+
+
diff --git a/Source/NETworkManager/Views/TracerouteView.xaml b/Source/NETworkManager/Views/TracerouteView.xaml
index f732d6dc4a..f1cd088f0c 100644
--- a/Source/NETworkManager/Views/TracerouteView.xaml
+++ b/Source/NETworkManager/Views/TracerouteView.xaml
@@ -26,6 +26,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Website/docs/application/ip-scanner.md b/Website/docs/application/ip-scanner.md
index 6c46b528d4..b85f2dfc42 100644
--- a/Website/docs/application/ip-scanner.md
+++ b/Website/docs/application/ip-scanner.md
@@ -57,7 +57,7 @@ with link-local addresses (`169.254.x.x`) given lower priority.
### Context menu
-Right-clicking a result allows forwarding device information to another tool (e.g. [Port Scanner](./port-scanner), Remote Desktop), creating a new profile, or executing a [custom command](#custom-commands).
+Right-clicking a result allows forwarding device information to another tool (e.g. [Port Scanner](./port-scanner), Remote Desktop), querying the registration data of its IP address or hostname via [RDAP](./rdap), creating a new profile, or executing a [custom command](#custom-commands).
| Action | Description |
| ------------- | ------------------------------------------------ |
diff --git a/Website/docs/application/rdap.md b/Website/docs/application/rdap.md
index 93311dc1df..34722e6ceb 100644
--- a/Website/docs/application/rdap.md
+++ b/Website/docs/application/rdap.md
@@ -6,15 +6,15 @@ keywords: [NETworkManager, RDAP, Registration Data Access Protocol, domain looku
# RDAP
-With **RDAP** (Registration Data Access Protocol) you can retrieve registration data for domains, top-level domains, IP addresses and networks, AS numbers and entities (e.g. organizations or contacts) from the responsible registry.
+With **RDAP** (Registration Data Access Protocol) you can retrieve registration data for domains, nameservers, top-level domains, IP addresses and networks, AS numbers and entities (e.g. organizations or contacts) from the responsible registry.
-RDAP is the standardized successor of Whois ([RFC 7480](https://www.rfc-editor.org/rfc/rfc7480), [RFC 9082](https://www.rfc-editor.org/rfc/rfc9082), [RFC 9083](https://www.rfc-editor.org/rfc/rfc9083), [RFC 9224](https://www.rfc-editor.org/rfc/rfc9224)). Unlike Whois, it uses HTTPS and returns structured JSON, so the result is shown in a structured view with details, status, events, nameservers, DNSSEC, contacts and notices. Links of notices (e.g. terms of service, privacy policy or the form to report inaccurate data) can be opened in the browser. The raw JSON response can be shown and exported as well.
+RDAP is the standardized successor of Whois ([RFC 7480](https://www.rfc-editor.org/rfc/rfc7480), [RFC 9082](https://www.rfc-editor.org/rfc/rfc9082), [RFC 9083](https://www.rfc-editor.org/rfc/rfc9083), [RFC 9224](https://www.rfc-editor.org/rfc/rfc9224)). Unlike Whois, it uses HTTPS and returns structured JSON, so the result is shown in a structured view with details, status, events, nameservers, DNSSEC, networks and AS numbers (of an organization), contacts and notices. Links of notices (e.g. terms of service, privacy policy or the form to report inaccurate data) can be opened in the browser. The raw JSON response can be shown and exported as well.
:::info
-The RDAP server for a query is determined using the bootstrap files published by IANA at [data.iana.org/rdap](https://data.iana.org/rdap/). They are downloaded with the first query, cached locally and refreshed automatically once a week. If `data.iana.org` cannot be reached, the cached files are used and the update is retried after an hour (at most 3 times, then with the next weekly update). See [Settings](#settings).
+The RDAP server for a query is determined using the bootstrap files published by IANA at [data.iana.org/rdap](https://data.iana.org/rdap/). They are downloaded with the first query, cached locally and refreshed automatically once a week. If `data.iana.org` cannot be reached, the cached files are used and the update is retried after an hour (at most 3 times, then with the next weekly update). Files that have not been downloaded yet (or can't be read) are downloaded with the next query. See [Settings](#settings).
-- **Domains** are resolved via the registry of their top-level domain. Some registries (e.g. `.de`, `.ch`, `.li`, `.io`) run an RDAP server that is not (yet) listed by IANA; these are included in NETworkManager.
+- **Domains** and **nameservers** are resolved via the registry of their top-level domain. Registries only know registered domains, not their subdomains: for a hostname like `www.borntoberoot.net` or `www.bbc.co.uk`, the registered domain (`borntoberoot.net`, `bbc.co.uk`) is queried. It is determined with the [Public Suffix List](https://publicsuffix.org/), which is included in NETworkManager. Some registries (e.g. `.de`, `.ch`, `.li`, `.io`) run an RDAP server that is not (yet) listed by IANA; these are included in NETworkManager.
- **Top-level domains** (e.g. `de`) are queried at the IANA root zone RDAP server (`rdap.iana.org`).
- **IP addresses** and **AS numbers** are resolved via the Regional Internet Registries (RIRs). Private and reserved ranges (e.g. `10.0.0.0/8`, `fe80::/10`) are queried at ARIN, which returns the IANA reservation.
- **Entities** can only be resolved if their handle ends with a service provider tag registered at IANA (e.g. `ORG-RIEN1-RIPE`, `-ARIN`).
@@ -37,16 +37,23 @@ The firewall must allow outgoing HTTPS connections (TCP port 443) to `data.iana.

+A running query can be canceled with **Cancel** (or `Esc`).
+
+The IP address or hostname (if it has a domain, e.g. `server01.borntoberoot.net`) of a host can also be queried from the context menu of the [IP Scanner](./ip-scanner.md), and the IP address, hostname or AS number of a hop from the context menu of the [Traceroute](./traceroute.md).
+
### Example inputs
+With the type **Auto** (default), the type is detected from the query: IP address or CIDR, AS number (e.g. `AS13335`, `13335` or `1.10`), top-level domain (a single label, e.g. `de`), entity handle (a single label with a service provider tag, e.g. `ORG-RIEN1-RIPE`), otherwise domain. Select a type to override the detection, e.g. to query a nameserver (detected as domain).
+
| Type | Query | Description |
| ---------- | ---------------- | ------------------------------------------------------------------- |
| Domain | `borntoberoot.net` | Query a domain at the registry of the top-level domain |
+| Nameserver | `a.iana-servers.net` | Query a nameserver at the registry of its top-level domain |
| TLD | `de` | Query a top-level domain at the IANA root zone |
| IP address | `1.1.1.1` | Query the network that contains the IP address |
| IP address | `2001:db8::/32` | Query the network that contains the CIDR prefix |
| ASN | `AS13335` | Query an AS number (`13335`, `AS13335` and asdot like `1.10` work) |
-| Entity | `ORG-RIEN1-RIPE` | Query an entity (organization, contact) by its handle |
+| Entity | `ORG-RIEN1-RIPE` | Query an entity (organization, contact) by its handle. For an organization, some registries (e.g. RIPE) also return its networks and AS numbers |
### Export
@@ -57,6 +64,15 @@ The result can be exported via the **Export...** button below the result or via
| **JSON** | Exports the response exactly as returned by the server. If the referral was followed, both responses as an array. |
| **TXT** | Exports the structured view as text. |
+### Context menu
+
+Right-click a row in one of the tables (events, nameservers, DNSSEC, networks, AS numbers, contacts).
+
+| Action | Description |
+| ------------- | -------------------------------------------------------------------- |
+| **Copy** | Copies a value of the selected row (e.g. the email of a contact) |
+| **Export...** | Exports the result to a file (see [Export](#export)) |
+
## Profile
### Inherit host from general
@@ -69,7 +85,7 @@ Inherit the host from the general settings.
:::note
-If this option is enabled, the [query](#query) is overwritten by the host from the general settings and the [query](#query) is disabled.
+If this option is enabled, the [query](#query) is overwritten by the host from the general settings and the [query](#query) is disabled. The host must be valid for the selected [type](#type) (e.g. an IP address can't be queried as a domain); with `Auto`, the type is detected from the host.
:::
@@ -85,11 +101,11 @@ Domain, top-level domain, IP address, AS number or entity handle to query.
### Type
-Type of the query.
+Type of the query. `Auto` detects the type from the query (see [Example inputs](#example-inputs)).
-**Type:** `Domain`, `TLD`, `IP address`, `ASN`, `Entity`
+**Type:** `Auto`, `Domain`, `Nameserver`, `TLD`, `IP address`, `ASN`, `Entity`
-**Default:** `Domain`
+**Default:** `Auto`
## Settings
@@ -109,7 +125,7 @@ For many domains (e.g. `.com` and `.net`), the registry only returns basic data
:::note
-For security reasons, a referral is only followed if it uses HTTPS and does not point to a local or private address (e.g. `192.168.0.0/16`). Otherwise, a message is shown and only the result of the registry is displayed.
+For security reasons, a referral is only followed if it uses HTTPS and does not point to a local or private address (e.g. `192.168.0.0/16`). Otherwise, a message is shown and only the result of the registry is displayed. If a proxy is configured in Windows and the host name of the referral can't be resolved locally (e.g. only the proxy resolves public names), the referral is followed without this check.
:::
@@ -119,7 +135,7 @@ For security reasons, a referral is only followed if it uses HTTPS and does not
### Timeout (ms)
-Timeout in milliseconds for each request to an RDAP server, after which the request is considered lost.
+Timeout in milliseconds for each request to an RDAP server, after which the request is considered lost. The IANA bootstrap files are downloaded with a fixed timeout of 30 seconds.
**Type:** `Integer` [Min `1000`, Max `60000`]
diff --git a/Website/docs/application/traceroute.md b/Website/docs/application/traceroute.md
index 73d6abbf76..06e8bca556 100644
--- a/Website/docs/application/traceroute.md
+++ b/Website/docs/application/traceroute.md
@@ -23,6 +23,8 @@ Traceroute works by sending ICMP packets with incrementally increasing TTL (Time
### Context menu
+Right-clicking a hop allows forwarding it to another tool (e.g. [Port Scanner](./port-scanner), [DNS Lookup](./dns-lookup)) or querying the registration data of its IP address (e.g. the network and its owner), hostname or AS number via [RDAP](./rdap).
+
| Action | Description |
|--------|-------------|
| **Copy** | Copies the selected information to the clipboard |
diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md
index 63124816d8..6c1c23965f 100644
--- a/Website/docs/changelog/next-release.md
+++ b/Website/docs/changelog/next-release.md
@@ -27,7 +27,7 @@ Release date: **xx.xx.2026**
**RDAP**
-- New [**RDAP**](../application/rdap.md) tool to look up registration data via the Registration Data Access Protocol, the standardized, JSON-based successor of Whois. Supports domains, top-level domains, IP addresses/CIDR prefixes, AS numbers and entity handles. The RDAP server is determined automatically using the IANA bootstrap files, which are cached locally and can be updated in the new **Settings > RDAP** page. Results are shown in a structured view (details, status, events, nameservers, DNSSEC, contacts, notices) or as raw JSON, and can be exported as JSON or text. For domains (e.g. `.com`/`.net`), the referral to the registrar's RDAP server is followed as well (can be disabled in **Settings > RDAP**). Includes profile support. If no RDAP server is known for a domain, it can be opened in **Whois** with a single click. [#3607](https://github.com/BornToBeRoot/NETworkManager/pull/3607)
+- New [**RDAP**](../application/rdap.md) tool to look up registration data via the Registration Data Access Protocol, the standardized, JSON-based successor of Whois. Supports domains, nameservers, top-level domains, IP addresses/CIDR prefixes, AS numbers and entity handles; the type is detected automatically or can be selected. The RDAP server is determined automatically using the IANA bootstrap files, which are cached locally and can be updated in the new **Settings > RDAP** page. Results are shown in a structured view (details, status, events, nameservers, DNSSEC, networks and AS numbers of an organization, contacts, notices) or as raw JSON, and can be exported as JSON or text. For domains (e.g. `.com`/`.net`), the referral to the registrar's RDAP server is followed as well (can be disabled in **Settings > RDAP**). Includes profile support. If no RDAP server is known for a domain, it can be opened in **Whois** with a single click. IP addresses and hostnames can be queried from the context menu of **IP Scanner** and **Traceroute**, AS numbers from **Traceroute**; for a hostname (e.g. `www.borntoberoot.net`), the registered domain is queried (determined with the included [Public Suffix List](https://publicsuffix.org/)). [#3607](https://github.com/BornToBeRoot/NETworkManager/pull/3607) [#3642](https://github.com/BornToBeRoot/NETworkManager/pull/3642)
**Traceroute**
@@ -60,6 +60,7 @@ Release date: **xx.xx.2026**
- Added `135` (RPC) and `9100` (raw printing) to the default **Ports** list used to detect if a host is reachable. [#3564](https://github.com/BornToBeRoot/NETworkManager/pull/3564)
- Reduced the default **Max. concurrent port threads** from `5` to `4`. [#3564](https://github.com/BornToBeRoot/NETworkManager/pull/3564)
- Reduced the default **Max. concurrent host threads** from `256` to `64`, a more conservative default that puts less simultaneous load on the scanned network. [#3564](https://github.com/BornToBeRoot/NETworkManager/pull/3564)
+- Added **RDAP...** to the context menu to query the registration data of the IP address or hostname of a host in the [**RDAP**](../application/rdap.md) tool. [#3642](https://github.com/BornToBeRoot/NETworkManager/pull/3642)
**Port Scanner**
@@ -79,6 +80,10 @@ Release date: **xx.xx.2026**
- Host input now accepts newline-separated hosts (one per line, e.g. a column pasted from Excel), converted automatically to the semicolon-separated form. [#3568](https://github.com/BornToBeRoot/NETworkManager/pull/3568)
- Host input now supports shorthand IPv4 ranges like `192.168.0.1-100`, in addition to the existing `192.168.0.0-192.168.0.100` and `192.168.[0-100].1` range formats. [#3568](https://github.com/BornToBeRoot/NETworkManager/pull/3568)
+**Traceroute**
+
+- Added **RDAP...** to the context menu to query the registration data of the IP address, hostname or AS number of a hop in the [**RDAP**](../application/rdap.md) tool. [#3642](https://github.com/BornToBeRoot/NETworkManager/pull/3642)
+
**Hosts File Editor**
- Added **Copy as...** to the context menu to create a new entry based on an existing one. The copy is added directly below the original entry. [0544698](https://github.com/BornToBeRoot/NETworkManager/commit/0544698aefc325ab36ca4c8e80250e1fe0b62d4a)