Showing preview only (1,324K chars total). Download the full file or copy to clipboard to get everything.
Repository: unfrl/dug
Branch: main
Commit: 0277813d9e55
Files: 82
Total size: 1.2 MB
Directory structure:
gitextract_097p0ehk/
├── .config/
│ └── dotnet-tools.json
├── .dockerignore
├── .forgejo/
│ ├── win/
│ │ ├── README.md
│ │ ├── dug.nuspec
│ │ └── output/
│ │ ├── LICENSE.txt
│ │ └── VERIFICATION.txt
│ └── workflows/
│ ├── build-test-publish.yaml
│ └── update-docs.yaml
├── .gitignore
├── .gitmodules
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── tasks.json
├── Dockerfile
├── Dockerfile-alpine
├── LICENSE
├── README.md
├── cli/
│ ├── App.cs
│ ├── Config.cs
│ ├── Data/
│ │ ├── ContinentCodes.cs
│ │ ├── DataMaps.cs
│ │ ├── DnsResponse.cs
│ │ └── Models/
│ │ └── DnsServer.cs
│ ├── Directory.Build.props
│ ├── Options/
│ │ ├── GlobalOptions.cs
│ │ ├── RunOptions.cs
│ │ └── UpdateOptions.cs
│ ├── Parsing/
│ │ ├── CustomDnsServerMapping.cs
│ │ ├── DnsServerParser.cs
│ │ ├── IDnsServerParser.cs
│ │ ├── IpAddressConverter.cs
│ │ ├── LocalCsvDnsServerMapping.cs
│ │ └── RemoteCsvDnsServerMapping.cs
│ ├── Program.cs
│ ├── Resources/
│ │ └── default_servers.csv
│ ├── Services/
│ │ ├── ConsoleTableService.cs
│ │ ├── ConsoleTemplateService.cs
│ │ ├── DnsQueryService.cs
│ │ ├── DnsServerService.cs
│ │ ├── IConsoleTableService.cs
│ │ ├── IConsoleTemplateService.cs
│ │ ├── IDnsQueryService.cs
│ │ ├── IDnsServerService.cs
│ │ ├── IPercentageAnimator.cs
│ │ └── PercentageAnimator.cs
│ ├── Utils/
│ │ ├── MarkupHelper.cs
│ │ ├── ReflectionHelper.cs
│ │ └── TemplateHelper.cs
│ ├── Utils.cs
│ ├── auth_template
│ ├── dug.csproj
│ ├── i18n/
│ │ ├── dug.Designer.cs
│ │ ├── dug.de.resx
│ │ ├── dug.es.resx
│ │ └── dug.resx
│ ├── snap/
│ │ └── snapcraft.yaml
│ ├── snapcraft.Dockerfile
│ ├── test_custom_header_servers.csv
│ ├── test_custom_header_servers_colon_separated.csv
│ ├── test_custom_header_servers_color.csv
│ └── test_servers.csv
├── cli.tests/
│ ├── XUnit/
│ │ ├── UnitTest1.cs
│ │ └── cli.tests.csproj
│ └── bats/
│ └── run.sh
├── dug/
│ └── APKBUILD
└── dug-docs/
├── README.md
├── babel.config.js
├── dockerfile
├── docs/
│ ├── install.md
│ ├── introduction.md
│ ├── mdx.md
│ ├── run.md
│ ├── templated_input.md
│ ├── templated_output.md
│ └── update.md
├── docusaurus.config.js
├── package.json
├── sidebars.js
├── src/
│ ├── css/
│ │ └── custom.css
│ └── pages/
│ ├── index.js
│ └── styles.module.css
└── static/
└── .nojekyll
================================================
FILE CONTENTS
================================================
================================================
FILE: .config/dotnet-tools.json
================================================
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-deb": {
"version": "0.1.232",
"commands": [
"dotnet-deb"
]
},
"dotnet-rpm": {
"version": "0.1.232",
"commands": [
"dotnet-rpm"
]
},
"dotnet-tarball": {
"version": "0.1.232",
"commands": [
"dotnet-tarball"
]
},
"csharpier": {
"version": "0.25.0",
"commands": [
"dotnet-csharpier"
]
}
}
}
================================================
FILE: .dockerignore
================================================
**/bin
**/obj
**/out
**/.vscode
**/.vs
.dotnet
**/node_modules
================================================
FILE: .forgejo/win/README.md
================================================
Note, this doesnt currently function but was moved here fromt he old `./.ci` directory for reference if we ever add back publishing that needs nuget (chocolatey)
Sometimes chocolatey wants me to tweak something (file extensions, empty fields in nuspec, etc) and I need to resubmit a specific version. To do so locally use the following from the root dug directory:
1. Update `<version>` tag in dug.nuspec
2. `dotnet publish -r win-x64 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true --self-contained true -o ./.ci/win/output ./cli`
3. `docker run -ti -v $PWD:$PWD -w $PWD linuturk/mono-choco pack ./.ci/win/dug.nuspec --out ./.ci/win`
4. `docker run -ti -v $PWD:$PWD -w $PWD linuturk/mono-choco push ./.ci/win/dug.<VERSION>.nupkg --api-key <CHOCOLATELY_API_KEY> --source https://push.chocolatey.org/`
================================================
FILE: .forgejo/win/dug.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Read this before creating packages: https://chocolatey.org/docs/create-packages -->
<!-- It is especially important to read the above link to understand additional requirements when publishing packages to the community feed aka dot org (https://chocolatey.org/packages). -->
<!-- Test your packages in a test environment: https://github.com/chocolatey/chocolatey-test-environment -->
<!--
This is a nuspec. It mostly adheres to https://docs.nuget.org/create/Nuspec-Reference. Chocolatey uses a special version of NuGet.Core that allows us to do more than was initially possible. As such there are certain things to be aware of:
* the package xmlns schema url may cause issues with nuget.exe
* Any of the following elements can ONLY be used by choco tools - projectSourceUrl, docsUrl, mailingListUrl, bugTrackerUrl, packageSourceUrl, provides, conflicts, replaces
* nuget.exe can still install packages with those elements but they are ignored. Any authoring tools or commands will error on those elements
-->
<!-- You can embed software files directly into packages, as long as you are not bound by distribution rights. -->
<!-- * If you are an organization making private packages, you probably have no issues here -->
<!-- * If you are releasing to the community feed, you need to consider distribution rights. -->
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<!-- == PACKAGE SPECIFIC SECTION == -->
<!-- This section is about this package, although id and version have ties back to the software -->
<!-- id is lowercase and if you want a good separator for words, use '-', not '.'. Dots are only acceptable as suffixes for certain types of packages, e.g. .install, .portable, .extension, .template -->
<!-- If the software is cross-platform, attempt to use the same id as the debian/rpm package(s) if possible. -->
<id>dug</id>
<!-- version should MATCH as closely as possible with the underlying software -->
<!-- Is the version a prerelease of a version? https://docs.nuget.org/create/versioning#creating-prerelease-packages -->
<!-- Note that unstable versions like 0.0.1 can be considered a released version, but it's possible that one can release a 0.0.1-beta before you release a 0.0.1 version. If the version number is final, that is considered a released version and not a prerelease. -->
<version>0.0.1</version> <!-- Version is set by ci/cd pipeline -->
<packageSourceUrl>https://git.unfrl.com/Unfrl/dug</packageSourceUrl>
<!-- owners is a poor name for maintainers of the package. It sticks around by this name for compatibility reasons. It basically means you. -->
<!--<owners>Justin</owners>-->
<!-- ============================== -->
<!-- == SOFTWARE SPECIFIC SECTION == -->
<!-- This section is about the software itself -->
<title>dug</title>
<authors>Matthew Monahan - Unfrl LLC</authors>
<!-- projectUrl is required for the community feed -->
<projectUrl>https://git.unfrl.com/Unfrl/dug</projectUrl>
<!--<iconUrl>http://cdn.rawgit.com/__REPLACE_YOUR_REPO__/master/icons/mypackage.png</iconUrl>-->
<copyright>2020 Unfrl LLC</copyright>
<!-- If there is a license Url available, it is required for the community feed -->
<licenseUrl>https://raw.githubusercontent.com/unfrl/dug/main/cli/LICENSE</licenseUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<projectSourceUrl>https://git.unfrl.com/Unfrl/dug</projectSourceUrl>
<docsUrl>https://dug.unfrl.com</docsUrl>
<!--<mailingListUrl></mailingListUrl>-->
<!--<bugTrackerUrl></bugTrackerUrl>-->
<tags>dug DNS Propagation CLI</tags>
<summary>A global DNS propagation checker that gives pretty output.</summary>
<description>A global DNS propagation checker that gives pretty output.</description>
<!-- <releaseNotes>__REPLACE_OR_REMOVE__MarkDown_Okay</releaseNotes> -->
<!-- =============================== -->
<!-- Specifying dependencies and version ranges? https://docs.nuget.org/create/versioning#specifying-version-ranges-in-.nuspec-files -->
<dependencies>
<!--<dependency id="" version="__MINIMUM_VERSION__" />
<dependency id="" version="[__EXACT_VERSION__]" />
<dependency id="" version="[_MIN_VERSION_INCLUSIVE, MAX_VERSION_INCLUSIVE]" />
<dependency id="" version="[_MIN_VERSION_INCLUSIVE, MAX_VERSION_EXCLUSIVE)" />
<dependency id="" />-->
<!-- <dependency id="chocolatey-core.extension" version="1.3.5.1" /> -->
</dependencies>
<!-- chocolatey-core.extension - https://chocolatey.org/packages/chocolatey-core.extension
- You want to use Get-UninstallRegistryKey on less than 0.9.10 (in chocolateyUninstall.ps1)
- You want to use Get-PackageParameters and on less than 0.11.0
- You want to take advantage of other functions in the core community maintainer's team extension package
-->
<!--<provides>NOT YET IMPLEMENTED</provides>-->
<!--<conflicts>NOT YET IMPLEMENTED</conflicts>-->
<!--<replaces>NOT YET IMPLEMENTED</replaces>-->
</metadata>
<files>
<!-- this section controls what actually gets packaged into the Chocolatey package -->
<file src=".ci/win/output/**" target="output" />
<!--Building from Linux? You may need this instead: <file src="tools/**" target="tools" />-->
</files>
</package>
================================================
FILE: .forgejo/win/output/LICENSE.txt
================================================
ANTI-CAPITALIST SOFTWARE LICENSE (v 1.4)
Copyright © 2020 Matthew Monahan, Unfrl LLC
This is anti-capitalist software, released for free use by individuals and organizations that do not operate by capitalist principles.
Permission is hereby granted, free of charge, to any person or organization (the "User") obtaining a copy of this software and associated documentation files (the "Software"), to use, copy, modify, merge, distribute, and/or sell copies of the Software, subject to the following conditions:
1. The above copyright notice and this permission notice shall be included in all copies or modified versions of the Software.
2. The User is one of the following:
a. An individual person, laboring for themselves
b. A non-profit organization
c. An educational institution
d. An organization that seeks shared profit for all of its members, and allows non-members to set the cost of their labor
3. If the User is an organization with owners, then all owners are workers and all workers are owners with equal equity and/or equal vote.
4. If the User is an organization, then the User is not law enforcement or military, or working for or under either.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: .forgejo/win/output/VERIFICATION.txt
================================================
VERIFICATION
Verification is intended to assist the Chocolatey moderators and community
in verifying that this package's contents are trustworthy.
Unfrl LLC is the vendor of 'dug'. The entire application is bundled in a single executble (output\dug.exe). We also include debug symbols (output\dug.pdb).
================================================
FILE: .forgejo/workflows/build-test-publish.yaml
================================================
name: Build Test Publish
on:
push:
branches:
- '**'
tags:
- '[0-9]+\.[0-9]+\.[0-9]+'
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
jobs:
build:
runs-on: ubuntu-dotnet-24.04
steps:
- uses: actions/checkout@v4
- name: Set version if tag
if: ${{forgejo.ref_type == 'tag'}}
run: |
echo "Building tagged version ${{forgejo.ref_name}}"
sed -i 's~<Version>0.0.1</Version>~<Version>${{forgejo.ref_name}}</Version>~' ./cli/dug.csproj #Set the Version in the csproj, its the only way to get the packaging tools to respect the version.
cat ./cli/dug.csproj
- name: Build binaries
run: |
dotnet publish -r linux-x64 -c Release -p:PublishSingleFile=true -p:PublishReadyToRun=true --self-contained true -o publish ./cli
mv ./publish/dug ./publish/dug-linux-x64 #Rename the binary to its architecture type
dotnet publish -r linux-arm64 -c Release -p:PublishSingleFile=true -p:PublishReadyToRun=true --self-contained true -o publish ./cli
mv ./publish/dug ./publish/dug-linux-arm64 #Rename the binary to its architecture type
dotnet publish -r osx-x64 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true --self-contained true -o publish ./cli
mv ./publish/dug ./publish/dug-osx-x64 #Rename the binary to its architecture type
dotnet publish -r win-x64 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true --self-contained true -o publish ./cli
# This is where we would want to add steps to build the deb/rpm/pkg/tar/etc
- uses: https://github.com/christopherHX/gitea-upload-artifact@v4
with:
name: dug-${{forgejo.run_id}}
path: publish
test:
runs-on: ubuntu-dotnet-24.04
needs: build
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: https://github.com/christopherHX/gitea-download-artifact@v4
with:
name: dug-${{forgejo.run_id}}
path: publish
- name: Ensure binaries are executable
run: |
chmod -R +x publish/
ls -lha publish
- name: Run BATS tests
shell: bash
run: ./cli.tests/bats/run.sh
docker-build-conditionally-publish:
runs-on: ubuntu-dotnet-24.04
needs: test
steps:
- uses: actions/checkout@v4
- uses: https://github.com/christopherHX/gitea-download-artifact@v4
with:
name: dug-${{forgejo.run_id}}
path: publish
- name: Ensure binaries are executable
run: |
chmod -R +x publish/
ls -lha publish
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.UNFRL_DOCKERHUB_USER }}
password: ${{ secrets.UNFRL_DOCKERHUB_PAT }}
- name: Build and Conditionally (if tagged) Push Docker Image
uses: docker/build-push-action@v6
with:
context: .
push: ${{forgejo.ref_type == 'tag'}}
tags: unfrl/dug:${{forgejo.ref_name}},unfrl/dug:latest
- uses: actions/forgejo-release@v2.7.3
if: ${{forgejo.ref_type == 'tag'}}
with:
direction: upload
url: https://git.unfrl.com
tag: ${{forgejo.ref_name}}
release-dir: publish
================================================
FILE: .forgejo/workflows/update-docs.yaml
================================================
name: Update docs
on:
push:
paths:
- 'dug-docs/**'
tags:
- '[0-9]+\.[0-9]+\.[0-9]+'
env:
DOCKER_HOST: tcp://127.0.0.1:2375
DOTNET_CLI_TELEMETRY_OPTOUT: 1
jobs:
publish:
runs-on: ubuntu-dotnet-24.04
if: ${{forgejo.ref_type == 'tag'}}
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.UNFRL_DOCKERHUB_USER }}
password: ${{ secrets.UNFRL_DOCKERHUB_PAT }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v6
with:
context: dug-docs/
push: true
tags: unfrl/dug-docs:${{forgejo.ref_name}},unfrl/dug-docs:latest
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*[.json, .xml, .info]
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
##
## Visual Studio Code
##
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
#Build Output
publish/
.ci/win/output/dug.exe
dug-docs/build
cli.tests/bats/dug
================================================
FILE: .gitmodules
================================================
[submodule "cli.tests/bats/libs/bats"]
path = cli.tests/bats/libs/bats
url = https://github.com/sstephenson/bats
[submodule "cli.tests/bats/libs/bats-support"]
path = cli.tests/bats/libs/bats-support
url = https://github.com/ztombol/bats-support
[submodule "cli.tests/bats/libs/bats-assert"]
path = cli.tests/bats/libs/bats-assert
url = https://github.com/ztombol/bats-assert
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"ms-dotnettools.csdevkit"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug Watch run",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["unfrl.com" , "-w"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug importing from file",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["update", "-f", "Resources/default_servers.csv"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug importing from remote",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["update"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug default run",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["git.kaijucode.com"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug help",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["help", "run"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug cube.packsize.com",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["cube.packsize.com", "-q", "ANY", "-f", "./test_servers.csv"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with specified server file",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["kaijucode.com", "-f", "./test_servers.csv"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with QueryType",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["kaijucode.com" , "-q", "MX,A"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with Servers",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["git.kaijucode.com" , "-s", "8.8.8.8,2001:4860:4860::8888"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with Continents",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["kaijucode.com" , "--continents", "SA,NA"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with invalid args",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["git.kaijucode.com" , "--continents", "NA,SA,ZA", "--output-template", "catz"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug blank run",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": [],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug version",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["version"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with csv output",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["git.kaijucode.com", "--output-template", "IPAddress,ResponseTime,Value", "--output-format", "CSV"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with custom file with custom headers",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["run" , "-f", "./test_custom_header_servers_color.csv","--data-headers-present", "--data-columns", "city,ipaddress,countrycode,dnssec,reliability,ignore", "git.kaijucode.com"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug run with json output",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["git.kaijucode.com", "--output-template", "IPAddress,ResponseTime,Value", "--output-format", "JSON"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug update reliability (normal)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["update" , "-r", "normal"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug update reliability (prune) with reliability only",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["update" , "-r", "prune", "--reliability-only"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Debug update with custom file with custom headers",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/cli/bin/Debug/net6.0/dug.dll",
"args": ["update" , "--data-headers-present", "--data-columns", "city,ipaddress,countrycode,dnssec,reliability", "-f", "./test_custom_header_servers.csv", "-o"],
"cwd": "${workspaceFolder}/cli",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/cli/dug.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/cli/dug.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/cli/dug.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}
================================================
FILE: Dockerfile
================================================
FROM mcr.microsoft.com/dotnet/sdk:10.0 as build
WORKDIR /app
COPY ./cli/dug.csproj .
RUN dotnet restore
COPY ./cli .
RUN dotnet publish -r linux-x64 -c Release -p:PublishSingleFile=true -p:PublishReadyToRun=true --self-contained true -o publish
FROM mcr.microsoft.com/dotnet/runtime:10.0 as runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT [ "./dug" ]
================================================
FILE: Dockerfile-alpine
================================================
#This DOckerfile "works" but for some reason the animated parts of the output dont look correct.
FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
WORKDIR /app
COPY ./cli/dug.csproj .
RUN dotnet restore
COPY ./cli .
RUN dotnet publish -r linux-musl-x64 -c Release -p:PublishSingleFile=true --self-contained true -o publish
FROM mcr.microsoft.com/dotnet/runtime:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT [ "./dug" ]
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2024 Matthew Monahan, Unfrl LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# dug
> [!WARNING]
> If you are reading this on GitHub note that this a mirrored repository. The primary repo is at: https://git.unfrl.com/Unfrl/dug

[](https://git.unfrl.com/Unfrl/dug/releases/latest)
[](https://snapcraft.io/unfrl-dug) (Unmaintained)
A powerful global DNS propagation checker that can output in a variety of formats.
The goal of dug is to make it easy to check the propagation of DNS records. It is also capable of providing templated output that can be used in scripts for things like monitoring.
For detailed documentation check out [dug.unfrl.com](https://dug.unfrl.com)
## Usage
The easiest way to explore dug is through the help.
- `dug help` -> Get top level help explaining the different verbs
- `dug help run` or `dug run --help` -> Get details about a specific verb (run, which is the default)
- `dug help update` or `dug update --help` -> Get details about the update verb
The simplest way to get started is to just run a query against the domain whose DNS records you're updating.
For example: `dug git.kaijucode.com`:

You can also do complicated things like ask for specific record types, use the most reliable server per continent, get the output as json, and pipe it into other applications: `dug git.kaijucode.com -q A --output-format JSON --server-count 1 --output-template Ipaddress,city,value,responsetime | jq`:

## Localization
dug automatically uses the current system's culture for localization. (You can override LANG on linux to test it).
Currently supports the following languages:
- (en) English
- (es) Spanish
- (de) German
## Installation
### Linux x86 and ARM
The linux builds are distributed as executables at the [latest release](https://git.unfrl.com/Unfrl/dug/releases/latest). There used to be package distributions (deb, rpm, etc) and they will be back, this work is being tracked [here](https://git.unfrl.com/Unfrl/dug/issues/2).
### Arch
A friend put dug in the AUR! [here](https://aur.archlinux.org/packages/dug-git/)
### Docker
Not sure if this counts as an "Installation" but there is a docker image available [here](https://hub.docker.com/r/unfrl/dug)
### Homebrew (Mac & Linux)
Install from homebrew with `brew install dug`
### OSX
> Homebrew is the easiest method for OSX but there is also a binary available
1. Go to the [latest release](https://git.unfrl.com/Unfrl/dug/releases/latest) and download the osx binary.
- It should look like `dug-osx-x64`
2. You should be able to download that, make is executable, and run it from the terminal. Then you can put it somewhere and update your path so you can execute it from anywhere.
### Windows
#### Executable
1. Go to the [latest release](https://git.unfrl.com/Unfrl/dug/releases/latest) and download the .exe binary.
- It should look like `dug.exe`
2. You should be able to download that and run it from the terminal. Then you can put it somewhere and update your path so you can execute it from anywhere.
## Development
This is a .net 6 project, so as long as you have the dotnet cli, available [here](https://dotnet.microsoft.com/download/dotnet/6.0) you should be able to do the following: `dotnet build ./cli`
The project was developed in VSCode so the debugger profiles that I have used are available if you're also using VSCode.
The commands to build an optimized executable vary depending on the platform but are all available in the [workflows directory](.forgejo/workflows). Here is the one to build the linux-x64 executable as an example:
`dotnet publish -r linux-x64 -c Release -p:PublishSingleFile=true -p:PublishReadyToRun=true --self-contained true -o publish ./cli`
### Testing
There is currently fairly limited testing, what does exist uses the [BATS](https://github.com/sstephenson/bats) tool.
To run the BATS tests you will need to have cloned dug recursively, like: `git clone --recursive <dug_repo_url>`
If you didnt do that you can run this to restore the BATS submodules into ./cli.tests/bats/libs: `git submodule update --init --recursive`
Once you have BATS you should be able to simply run the BATS tests with: `./cli.tests/bats/run.sh`
Made with ❤️ by [Unfrl](https://unfrl.com)
================================================
FILE: cli/App.cs
================================================
using System;
using System.Threading.Tasks;
using System.Linq;
using CommandLine;
using dug.Options;
using dug.Parsing;
using dug.Utils;
using dug.Services;
using System.Collections.Generic;
using dug.Data.Models;
using System.IO;
using dug.Data;
using DnsClient;
using CommandLine.Text;
namespace dug
{
public class App
{
private ParserResult<object> _cliArgs;
private IDnsServerParser _parser;
private IDnsServerService _dnsServerService;
private IDnsQueryService _dnsQueryService;
private IConsoleTableService _consoleTableService;
private IConsoleTemplateService _consoleTemplateService;
private IPercentageAnimator _percentageAnimator;
public App(ParserResult<object> cliArgs, IDnsServerParser parser, IDnsServerService dnsServerService, IDnsQueryService dnsQueryService, IConsoleTableService consoleTableService, IConsoleTemplateService consoleTemplateService, IPercentageAnimator percentageAnimator)
{
_cliArgs = cliArgs;
_parser = parser;
_dnsServerService = dnsServerService;
_dnsQueryService = dnsQueryService;
_consoleTableService = consoleTableService;
_consoleTemplateService = consoleTemplateService;
_percentageAnimator = percentageAnimator;
}
public async Task<int> RunAsync()
{
_cliArgs.WithNotParsed(HandleErrors);
await _cliArgs.WithParsedAsync(ExecuteArgumentsAsync);
return 0;
}
private void HandleErrors(IEnumerable<Error> errors)
{
HelpText helpText;
if (errors.Count() == 1)
{
var err = errors.Single();
// For some reason `dug version` and `dug --version` was giving `Operation is not valid due to the current state of the object.`
if (err is VersionRequestedError)
{
var version = GetType().Assembly.GetName().Version;
Console.WriteLine($"{version.Major}.{version.Minor}.{version.Build}");
Environment.Exit(0);
}
}
foreach (var error in errors)
{
switch (error)
{
case HelpRequestedError:
case HelpVerbRequestedError:
helpText = HelpText.AutoBuild(_cliArgs, h => h);
Console.WriteLine(helpText);
continue;
case MissingRequiredOptionError:
// Currently required values that are missing generate bad errors. Since we only have 1 (Hostname) this error is better.
// People are working to remedy this:
// https://github.com/commandlineparser/commandline/pull/727
// https://github.com/commandlineparser/commandline/issues/363
Console.WriteLine(i18n.dug.ER_Hostname_Missing, nameof(RunOptions.Hostname));
continue;
default:
var sb = SentenceBuilder.Create();
Console.WriteLine(sb.FormatError(error));
continue;
}
}
Environment.Exit(1);
}
private async Task ExecuteArgumentsAsync(object args)
{
HandleGlobalAndSpecialOptions(args as GlobalOptions);
_dnsServerService.EnsureServers();
switch (args)
{
case UpdateOptions uo:
if (Config.Verbose)
{
_consoleTableService.RenderInfoPanel<UpdateOptions>(args);
}
await ExecuteUpdate(uo);
break;
case RunOptions ro:
if (Config.Verbose)
{
_consoleTableService.RenderInfoPanel<RunOptions>(args);
}
await ExecuteRun(ro);
break;
default:
//TODO: Idk when itd get here...
break;
}
}
private void HandleGlobalAndSpecialOptions(GlobalOptions options)
{
Config.Verbose = options.Verbose;
DugConsole.VerboseWriteLine(i18n.dug.Output_Verbose_Enabled);
if (options is RunOptions ro)
Config.CanWrite = ro.OutputFormat == OutputFormats.TABLES; //Dont allow normal console output if the output is templated (JSON or CSV), it will pollute it
}
private async Task ExecuteRun(RunOptions opts)
{
// 0. Validate Arguments (Happening in Options.cs in the set methods)
// 1. Determine the servers to be used
// - For now just get the top opts.ServerCount most "reliable" servers per continent. Eventually I'll provide cli options to refine this.
List<DnsServer> serversToUse = new List<DnsServer>();
if (!string.IsNullOrEmpty(opts.CustomServerFile))
{
if (!File.Exists(opts.CustomServerFile))
{
Console.WriteLine(i18n.dug.ER_Specified_File_Not_Found, opts.CustomServerFile);
System.Environment.Exit(1);
}
if (!string.IsNullOrEmpty(opts.DataColumns))
{
var mapper = new CustomDnsServerMapping(opts.DataColumns);
using (var streamReader = File.OpenText(opts.CustomServerFile))
{
serversToUse = _dnsServerService.ParseServersFromStream(streamReader.BaseStream, mapper, opts.DataHeadersPresent, opts.DataSeparator ?? ',');
}
}
else
{
using (var streamReader = File.OpenText(opts.CustomServerFile))
{
var serversFromFile = _dnsServerService.ParseServersFromStream(streamReader.BaseStream, DnsServerParser.DefaultLocalParser, true, ',');
if (serversFromFile == null || serversFromFile.Count == 0)
{
throw new Exception(string.Format(i18n.dug.ER_Unable_To_Parse_File, opts.CustomServerFile));
}
serversToUse.AddRange(serversFromFile);
}
}
}
if (opts.ParsedServers?.Count() > 0)
{
//TODO: Should we 'decorate' these servers (turn them into DnsServers) before using them?
//If yes: We should do things like determine if they have DNSSEC, etc. Maybe this could be a static parse method off of DnsServer or something?
// Also when we're rendering the results we shouldnt assume to have anything except the IPAddress... Maybe when you do this the rendering should be way simpler?
serversToUse.AddRange(opts.ParsedServers);
}
if (opts.MultipleServerSources || serversToUse.Count == 0)
{
var serversByReliability = _dnsServerService.ServersByContinent.SelectMany(group => group.OrderByDescending(server => server.Reliability).Take(opts.ServerCount));
serversToUse.AddRange(serversByReliability
.Where(server => opts.ParsedContinents.Contains(server.ContinentCode, new ContinentCodeComparer())));
}
DugConsole.VerboseWriteLine(string.Format(i18n.dug.Output_Servers_To_Use, serversToUse.Count));
// 2. Run the queries with any options (any records, specific records, etc)
if (opts.OutputFormat == OutputFormats.TABLES)
{
_percentageAnimator.Start("", serversToUse.Count * opts.ParsedQueryTypes.Count(), Math.Max(Console.WindowWidth - 40, 0));
}
var queryResults = await Query(opts, serversToUse);
_percentageAnimator.StopIfRunning();
// 3. Draw beautiful results in fancy table
if (opts.OutputFormat == OutputFormats.TABLES)
{
if (!opts.Watch.HasValue)
{
_consoleTableService.DrawResults(queryResults, opts);
}
}
else
{
_consoleTemplateService.DrawResults(queryResults, opts);
}
// 4. Update server reliability depending on results
if (string.IsNullOrEmpty(opts.CustomServerFile))
{
_dnsServerService.UpdateServerReliabilityFromResults(queryResults, false);
}
if (opts.Watch.HasValue)
{
Console.Clear();
await _consoleTableService.DrawLiveTable(queryResults, opts, async () => await Query(opts, serversToUse));
}
}
private async Task<Dictionary<DnsServer, List<DnsResponse>>> Query(RunOptions opts, List<DnsServer> serversToUse)
{
return await _dnsQueryService.QueryServers(opts.Hostname, serversToUse, TimeSpan.FromMilliseconds(opts.Timeout), opts.ParsedQueryTypes, opts.QueryParallelism, opts.QueryRetries, _percentageAnimator.EventHandler);
}
private async Task ExecuteUpdate(UpdateOptions opts)
{
if (!opts.ReliabilityOnly)
{
if (!string.IsNullOrEmpty(opts.CustomServerFile))
{
_dnsServerService.UpdateServersFromFile(opts.CustomServerFile, opts.DataColumns, opts.DataSeparator ?? ',', opts.DataHeadersPresent, opts.Overwite);
}
bool hasSpecifiedServers = opts.ParsedServers != null && opts.ParsedServers.Any();
if (hasSpecifiedServers)
{
_dnsServerService.UpdateServers(opts.ParsedServers, opts.Overwite);
}
if (string.IsNullOrEmpty(opts.CustomServerFile) && !hasSpecifiedServers)
{
if (!string.IsNullOrEmpty(opts.UpdateURL))
{
await _dnsServerService.UpdateServersFromRemote(opts.UpdateURL, opts.DataSeparator ?? ',', opts.DataColumns, opts.DataHeadersPresent, opts.Overwite);
}
else
{
await _dnsServerService.UpdateServersFromDefaultRemote(opts.Overwite);
}
}
}
if (opts.Reliability != null)
{
_percentageAnimator.Start(string.Format(i18n.dug.Output_Testing_Server_Responses, _dnsServerService.Servers.Count), _dnsServerService.Servers.Count);
var results = await _dnsQueryService.QueryServers("google.com", _dnsServerService.Servers, TimeSpan.FromMilliseconds(opts.Timeout), new[] { QueryType.A }, opts.QueryParallelism, opts.QueryRetries, _percentageAnimator.EventHandler);
_percentageAnimator.StopIfRunning();
DugConsole.WriteLine(string.Format(i18n.dug.Output_Testing_Server_Responses_Finished, results.Select(pair => pair.Value.Count(res => !res.HasError)).Sum(), _dnsServerService.Servers.Count() * 1));
_dnsServerService.UpdateServerReliabilityFromResults(results, opts.Reliability == ReliabilityUpdateType.Prune);
return;
}
}
}
}
================================================
FILE: cli/Config.cs
================================================
using System;
using System.IO;
namespace dug
{
public static class Config {
public static string ConfigDirectory = Path.Join(getConfigBaseDirectory(), ".dug");
public static string ServersFile = Path.Join(ConfigDirectory, "servers.csv");
public static string ServersTempFile = Path.Join(ConfigDirectory, "servers.tmp.csv");
public static bool Verbose { get; set; }
//This value is used so that we avoid writing to the console when the output is templated, in which can we dont want random messages polluting it.
public static bool CanWrite { get; set; } = true;
// Returns the User's home directory, platform agnostic.
private static string getConfigBaseDirectory(){
return Environment.OSVersion.Platform == PlatformID.Unix ?
Environment.GetEnvironmentVariable("HOME") :
Environment.GetEnvironmentVariable("%HOMEDRIVE%%HOMEPATH%");
}
}
}
================================================
FILE: cli/Data/ContinentCodes.cs
================================================
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace dug.Data
{
public class ContinentCodes
{
private ContinentCodes(string code, string name) { Code = code; Name = name; }
public string Code { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Code;
}
public static ContinentCodes AF { get { return new ContinentCodes("AF", i18n.dug.Africa); } }
public static ContinentCodes SA { get { return new ContinentCodes("SA", i18n.dug.South_America); } }
public static ContinentCodes NA { get { return new ContinentCodes("NA", i18n.dug.North_America); } }
public static ContinentCodes OC { get { return new ContinentCodes("OC", i18n.dug.Oceania); } }
public static ContinentCodes AS { get { return new ContinentCodes("AS", i18n.dug.Asia); } }
public static ContinentCodes EU { get { return new ContinentCodes("EU", i18n.dug.Europe); } }
public static ContinentCodes AN { get { return new ContinentCodes("AN", i18n.dug.Antarctica); } }
public static ContinentCodes UNKNOWN { get { return new ContinentCodes("UNKNOWN", i18n.dug.Unknown); } }
public static List<ContinentCodes> Continents { get { return new List<ContinentCodes>() {AF, SA, NA, OC, AS, EU, AN, UNKNOWN}; } }
public static bool TryParse(string value, out ContinentCodes result){
ContinentCodes parsedContinent = Continents.FirstOrDefault(c => c.Code == value || c.Name == value);
if(parsedContinent != null){
result = parsedContinent;
return true;
}
result = null;
return false;
}
}
public class ContinentCodeComparer : IEqualityComparer<ContinentCodes>
{
public bool Equals(ContinentCodes x, ContinentCodes y)
{
return x.Code == y.Code;
}
public int GetHashCode([DisallowNull] ContinentCodes obj)
{
return obj.Code.GetHashCode();
}
}
}
================================================
FILE: cli/Data/DataMaps.cs
================================================
using System.Collections.Generic;
namespace dug.Data
{
public class DataMaps
{
public static readonly Dictionary<string, ContinentCodes> CountryContinentMap = new Dictionary<string, ContinentCodes> ()
{
{"AD",ContinentCodes.EU},
{"AE",ContinentCodes.AS},
{"AF",ContinentCodes.AS},
{"AG",ContinentCodes.NA},
{"AI",ContinentCodes.NA},
{"AL",ContinentCodes.EU},
{"AM",ContinentCodes.AS},
{"AN",ContinentCodes.NA},
{"AO",ContinentCodes.AF},
{"AP",ContinentCodes.AS},
{"AQ",ContinentCodes.AN},
{"AR",ContinentCodes.SA},
{"AS",ContinentCodes.OC},
{"AT",ContinentCodes.EU},
{"AU",ContinentCodes.OC},
{"AW",ContinentCodes.NA},
{"AX",ContinentCodes.EU},
{"AZ",ContinentCodes.AS},
{"BA",ContinentCodes.EU},
{"BB",ContinentCodes.NA},
{"BD",ContinentCodes.AS},
{"BE",ContinentCodes.EU},
{"BF",ContinentCodes.AF},
{"BG",ContinentCodes.EU},
{"BH",ContinentCodes.AS},
{"BI",ContinentCodes.AF},
{"BJ",ContinentCodes.AF},
{"BL",ContinentCodes.NA},
{"BM",ContinentCodes.NA},
{"BN",ContinentCodes.AS},
{"BO",ContinentCodes.SA},
{"BR",ContinentCodes.SA},
{"BS",ContinentCodes.NA},
{"BT",ContinentCodes.AS},
{"BV",ContinentCodes.AN},
{"BW",ContinentCodes.AF},
{"BY",ContinentCodes.EU},
{"BZ",ContinentCodes.NA},
{"CA",ContinentCodes.NA},
{"CC",ContinentCodes.AS},
{"CD",ContinentCodes.AF},
{"CF",ContinentCodes.AF},
{"CG",ContinentCodes.AF},
{"CH",ContinentCodes.EU},
{"CI",ContinentCodes.AF},
{"CK",ContinentCodes.OC},
{"CL",ContinentCodes.SA},
{"CM",ContinentCodes.AF},
{"CN",ContinentCodes.AS},
{"CO",ContinentCodes.SA},
{"CR",ContinentCodes.NA},
{"CU",ContinentCodes.NA},
{"CV",ContinentCodes.AF},
{"CX",ContinentCodes.AS},
{"CY",ContinentCodes.AS},
{"CZ",ContinentCodes.EU},
{"DE",ContinentCodes.EU},
{"DJ",ContinentCodes.AF},
{"DK",ContinentCodes.EU},
{"DM",ContinentCodes.NA},
{"DO",ContinentCodes.NA},
{"DZ",ContinentCodes.AF},
{"EC",ContinentCodes.SA},
{"EE",ContinentCodes.EU},
{"EG",ContinentCodes.AF},
{"EH",ContinentCodes.AF},
{"ER",ContinentCodes.AF},
{"ES",ContinentCodes.EU},
{"ET",ContinentCodes.AF},
{"FI",ContinentCodes.EU},
{"FJ",ContinentCodes.OC},
{"FK",ContinentCodes.SA},
{"FM",ContinentCodes.OC},
{"FO",ContinentCodes.EU},
{"FR",ContinentCodes.EU},
{"FX",ContinentCodes.EU},
{"GA",ContinentCodes.AF},
{"GB",ContinentCodes.EU},
{"GD",ContinentCodes.NA},
{"GE",ContinentCodes.AS},
{"GF",ContinentCodes.SA},
{"GG",ContinentCodes.EU},
{"GH",ContinentCodes.AF},
{"GI",ContinentCodes.EU},
{"GL",ContinentCodes.NA},
{"GM",ContinentCodes.AF},
{"GN",ContinentCodes.AF},
{"GP",ContinentCodes.NA},
{"GQ",ContinentCodes.AF},
{"GR",ContinentCodes.EU},
{"GS",ContinentCodes.AN},
{"GT",ContinentCodes.NA},
{"GU",ContinentCodes.OC},
{"GW",ContinentCodes.AF},
{"GY",ContinentCodes.SA},
{"HK",ContinentCodes.AS},
{"HM",ContinentCodes.AN},
{"HN",ContinentCodes.NA},
{"HR",ContinentCodes.EU},
{"HT",ContinentCodes.NA},
{"HU",ContinentCodes.EU},
{"ID",ContinentCodes.AS},
{"IE",ContinentCodes.EU},
{"IL",ContinentCodes.AS},
{"IM",ContinentCodes.EU},
{"IN",ContinentCodes.AS},
{"IO",ContinentCodes.AS},
{"IQ",ContinentCodes.AS},
{"IR",ContinentCodes.AS},
{"IS",ContinentCodes.EU},
{"IT",ContinentCodes.EU},
{"JE",ContinentCodes.EU},
{"JM",ContinentCodes.NA},
{"JO",ContinentCodes.AS},
{"JP",ContinentCodes.AS},
{"KE",ContinentCodes.AF},
{"KG",ContinentCodes.AS},
{"KH",ContinentCodes.AS},
{"KI",ContinentCodes.OC},
{"KM",ContinentCodes.AF},
{"KN",ContinentCodes.NA},
{"KP",ContinentCodes.AS},
{"KR",ContinentCodes.AS},
{"KW",ContinentCodes.AS},
{"KY",ContinentCodes.NA},
{"KZ",ContinentCodes.AS},
{"LA",ContinentCodes.AS},
{"LB",ContinentCodes.AS},
{"LC",ContinentCodes.NA},
{"LI",ContinentCodes.EU},
{"LK",ContinentCodes.AS},
{"LR",ContinentCodes.AF},
{"LS",ContinentCodes.AF},
{"LT",ContinentCodes.EU},
{"LU",ContinentCodes.EU},
{"LV",ContinentCodes.EU},
{"LY",ContinentCodes.AF},
{"MA",ContinentCodes.AF},
{"MC",ContinentCodes.EU},
{"MD",ContinentCodes.EU},
{"ME",ContinentCodes.EU},
{"MF",ContinentCodes.NA},
{"MG",ContinentCodes.AF},
{"MH",ContinentCodes.OC},
{"MK",ContinentCodes.EU},
{"ML",ContinentCodes.AF},
{"MM",ContinentCodes.AS},
{"MN",ContinentCodes.AS},
{"MO",ContinentCodes.AS},
{"MP",ContinentCodes.OC},
{"MQ",ContinentCodes.NA},
{"MR",ContinentCodes.AF},
{"MS",ContinentCodes.NA},
{"MT",ContinentCodes.EU},
{"MU",ContinentCodes.AF},
{"MV",ContinentCodes.AS},
{"MW",ContinentCodes.AF},
{"MX",ContinentCodes.NA},
{"MY",ContinentCodes.AS},
{"MZ",ContinentCodes.AF},
{"NA",ContinentCodes.AF},
{"NC",ContinentCodes.OC},
{"NE",ContinentCodes.AF},
{"NF",ContinentCodes.OC},
{"NG",ContinentCodes.AF},
{"NI",ContinentCodes.NA},
{"NL",ContinentCodes.EU},
{"NO",ContinentCodes.EU},
{"NP",ContinentCodes.AS},
{"NR",ContinentCodes.OC},
{"NU",ContinentCodes.OC},
{"NZ",ContinentCodes.OC},
{"OM",ContinentCodes.AS},
{"PA",ContinentCodes.NA},
{"PE",ContinentCodes.SA},
{"PF",ContinentCodes.OC},
{"PG",ContinentCodes.OC},
{"PH",ContinentCodes.AS},
{"PK",ContinentCodes.AS},
{"PL",ContinentCodes.EU},
{"PM",ContinentCodes.NA},
{"PN",ContinentCodes.OC},
{"PR",ContinentCodes.NA},
{"PS",ContinentCodes.AS},
{"PT",ContinentCodes.EU},
{"PW",ContinentCodes.OC},
{"PY",ContinentCodes.SA},
{"QA",ContinentCodes.AS},
{"RE",ContinentCodes.AF},
{"RO",ContinentCodes.EU},
{"RS",ContinentCodes.EU},
{"RU",ContinentCodes.EU},
{"RW",ContinentCodes.AF},
{"SA",ContinentCodes.AS},
{"SB",ContinentCodes.OC},
{"SC",ContinentCodes.AF},
{"SD",ContinentCodes.AF},
{"SE",ContinentCodes.EU},
{"SG",ContinentCodes.AS},
{"SH",ContinentCodes.AF},
{"SI",ContinentCodes.EU},
{"SJ",ContinentCodes.EU},
{"SK",ContinentCodes.EU},
{"SL",ContinentCodes.AF},
{"SM",ContinentCodes.EU},
{"SN",ContinentCodes.AF},
{"SO",ContinentCodes.AF},
{"SR",ContinentCodes.SA},
{"ST",ContinentCodes.AF},
{"SV",ContinentCodes.NA},
{"SY",ContinentCodes.AS},
{"SZ",ContinentCodes.AF},
{"TC",ContinentCodes.NA},
{"TD",ContinentCodes.AF},
{"TF",ContinentCodes.AN},
{"TG",ContinentCodes.AF},
{"TH",ContinentCodes.AS},
{"TJ",ContinentCodes.AS},
{"TK",ContinentCodes.OC},
{"TL",ContinentCodes.AS},
{"TM",ContinentCodes.AS},
{"TN",ContinentCodes.AF},
{"TO",ContinentCodes.OC},
{"TR",ContinentCodes.EU},
{"TT",ContinentCodes.NA},
{"TV",ContinentCodes.OC},
{"TW",ContinentCodes.AS},
{"TZ",ContinentCodes.AF},
{"UA",ContinentCodes.EU},
{"UG",ContinentCodes.AF},
{"UM",ContinentCodes.OC},
{"US",ContinentCodes.NA},
{"UY",ContinentCodes.SA},
{"UZ",ContinentCodes.AS},
{"VA",ContinentCodes.EU},
{"VC",ContinentCodes.NA},
{"VE",ContinentCodes.SA},
{"VG",ContinentCodes.NA},
{"VI",ContinentCodes.NA},
{"VN",ContinentCodes.AS},
{"VU",ContinentCodes.OC},
{"WF",ContinentCodes.OC},
{"WS",ContinentCodes.OC},
{"YE",ContinentCodes.AS},
{"YT",ContinentCodes.AF},
{"ZA",ContinentCodes.AF},
{"ZM",ContinentCodes.AF},
{"ZW",ContinentCodes.AF},
};
public static readonly Dictionary<string, string> CountryNameMap = new Dictionary<string, string> (){
{"AF", "Afghanistan"},
{"AX", "Åland Islands"},
{"AL", "Albania"},
{"DZ", "Algeria"},
{"AS", "American Samoa"},
{"AD", "Andorra"},
{"AO", "Angola"},
{"AI", "Anguilla"},
{"AQ", "Antarctica"},
{"AG", "Antigua and Barbuda"},
{"AR", "Argentina"},
{"AM", "Armenia"},
{"AW", "Aruba"},
{"AU", "Australia"},
{"AT", "Austria"},
{"AZ", "Azerbaijan"},
{"BS", "Bahamas"},
{"BH", "Bahrain"},
{"BD", "Bangladesh"},
{"BB", "Barbados"},
{"BY", "Belarus"},
{"BE", "Belgium"},
{"BZ", "Belize"},
{"BJ", "Benin"},
{"BM", "Bermuda"},
{"BT", "Bhutan"},
{"BO", "Bolivia"},
{"BQ", "Bonaire"},
{"BA", "Bosnia and Herzegovina"},
{"BW", "Botswana"},
{"BV", "Bouvet Island"},
{"BR", "Brazil"},
{"IO", "British Indian Ocean Territory"},
{"BN", "Brunei Darussalam"},
{"BG", "Bulgaria"},
{"BF", "Burkina Faso"},
{"BI", "Burundi"},
{"KH", "Cambodia"},
{"CM", "Cameroon"},
{"CA", "Canada"},
{"CV", "Cape Verde"},
{"KY", "Cayman Islands"},
{"CF", "Central African Republic"},
{"TD", "Chad"},
{"CL", "Chile"},
{"CN", "China"},
{"CX", "Christmas Island"},
{"CC", "Cocos (Keeling) Islands"},
{"CO", "Colombia"},
{"KM", "Comoros"},
{"CG", "Congo"},
{"CD", "Congo"},
{"CK", "Cook Islands"},
{"CR", "Costa Rica"},
{"CI", "Côte d'Ivoire"},
{"HR", "Croatia"},
{"CU", "Cuba"},
{"CW", "Curaçao"},
{"CY", "Cyprus"},
{"CZ", "Czech Republic"},
{"DK", "Denmark"},
{"DJ", "Djibouti"},
{"DM", "Dominica"},
{"DO", "Dominican Republic"},
{"EC", "Ecuador"},
{"EG", "Egypt"},
{"SV", "El Salvador"},
{"GQ", "Equatorial Guinea"},
{"ER", "Eritrea"},
{"EE", "Estonia"},
{"ET", "Ethiopia"},
{"FK", "Falkland Islands (Malvinas)"},
{"FO", "Faroe Islands"},
{"FJ", "Fiji"},
{"FI", "Finland"},
{"FR", "France"},
{"GF", "French Guiana"},
{"PF", "French Polynesia"},
{"TF", "French Southern Territories"},
{"GA", "Gabon"},
{"GM", "Gambia"},
{"GE", "Georgia"},
{"DE", "Germany"},
{"GH", "Ghana"},
{"GI", "Gibraltar"},
{"GR", "Greece"},
{"GL", "Greenland"},
{"GD", "Grenada"},
{"GP", "Guadeloupe"},
{"GU", "Guam"},
{"GT", "Guatemala"},
{"GG", "Guernsey"},
{"GN", "Guinea"},
{"GW", "Guinea-Bissau"},
{"GY", "Guyana"},
{"HT", "Haiti"},
{"HM", "Heard Island and McDonald Islands"},
{"VA", "Holy See (Vatican City State)"},
{"HN", "Honduras"},
{"HK", "Hong Kong"},
{"HU", "Hungary"},
{"IS", "Iceland"},
{"IN", "India"},
{"ID", "Indonesia"},
{"IR", "Iran"},
{"IQ", "Iraq"},
{"IE", "Ireland"},
{"IM", "Isle of Man"},
{"IL", "Israel"},
{"IT", "Italy"},
{"JM", "Jamaica"},
{"JP", "Japan"},
{"JE", "Jersey"},
{"JO", "Jordan"},
{"KZ", "Kazakhstan"},
{"KE", "Kenya"},
{"KI", "Kiribati"},
{"KP", "North Korea"},
{"KR", "Korea"},
{"KW", "Kuwait"},
{"KG", "Kyrgyzstan"},
{"LA", "Laos"},
{"LV", "Latvia"},
{"LB", "Lebanon"},
{"LS", "Lesotho"},
{"LR", "Liberia"},
{"LY", "Libya"},
{"LI", "Liechtenstein"},
{"LT", "Lithuania"},
{"LU", "Luxembourg"},
{"MO", "Macao"},
{"MK", "Macedonia"},
{"MG", "Madagascar"},
{"MW", "Malawi"},
{"MY", "Malaysia"},
{"MV", "Maldives"},
{"ML", "Mali"},
{"MT", "Malta"},
{"MH", "Marshall Islands"},
{"MQ", "Martinique"},
{"MR", "Mauritania"},
{"MU", "Mauritius"},
{"YT", "Mayotte"},
{"MX", "Mexico"},
{"FM", "Micronesia"},
{"MD", "Moldova"},
{"MC", "Monaco"},
{"MN", "Mongolia"},
{"ME", "Montenegro"},
{"MS", "Montserrat"},
{"MA", "Morocco"},
{"MZ", "Mozambique"},
{"MM", "Myanmar"},
{"NA", "Namibia"},
{"NR", "Nauru"},
{"NP", "Nepal"},
{"NL", "Netherlands"},
{"NC", "New Caledonia"},
{"NZ", "New Zealand"},
{"NI", "Nicaragua"},
{"NE", "Niger"},
{"NG", "Nigeria"},
{"NU", "Niue"},
{"NF", "Norfolk Island"},
{"MP", "Northern Mariana Islands"},
{"NO", "Norway"},
{"OM", "Oman"},
{"PK", "Pakistan"},
{"PW", "Palau"},
{"PS", "Palestine"},
{"PA", "Panama"},
{"PG", "Papua New Guinea"},
{"PY", "Paraguay"},
{"PE", "Peru"},
{"PH", "Philippines"},
{"PN", "Pitcairn"},
{"PL", "Poland"},
{"PT", "Portugal"},
{"PR", "Puerto Rico"},
{"QA", "Qatar"},
{"RE", "Réunion"},
{"RO", "Romania"},
{"RU", "Russian Federation"},
{"RW", "Rwanda"},
{"BL", "Saint Barthélemy"},
{"SH", "Saint Helena"},
{"KN", "Saint Kitts and Nevis"},
{"LC", "Saint Lucia"},
{"MF", "Saint Martin (French part)"},
{"PM", "Saint Pierre and Miquelon"},
{"VC", "Saint Vincent and the Grenadines"},
{"WS", "Samoa"},
{"SM", "San Marino"},
{"ST", "Sao Tome and Principe"},
{"SA", "Saudi Arabia"},
{"SN", "Senegal"},
{"RS", "Serbia"},
{"SC", "Seychelles"},
{"SL", "Sierra Leone"},
{"SG", "Singapore"},
{"SX", "Sint Maarten (Dutch part)"},
{"SK", "Slovakia"},
{"SI", "Slovenia"},
{"SB", "Solomon Islands"},
{"SO", "Somalia"},
{"ZA", "South Africa"},
{"GS", "South Georgia and the South Sandwich Islands"},
{"SS", "South Sudan"},
{"ES", "Spain"},
{"LK", "Sri Lanka"},
{"SD", "Sudan"},
{"SR", "Suriname"},
{"SJ", "Svalbard and Jan Mayen"},
{"SZ", "Swaziland"},
{"SE", "Sweden"},
{"CH", "Switzerland"},
{"SY", "Syrian Arab Republic"},
{"TW", "Taiwan"},
{"TJ", "Tajikistan"},
{"TZ", "Tanzania"},
{"TH", "Thailand"},
{"TL", "Timor-Leste"},
{"TG", "Togo"},
{"TK", "Tokelau"},
{"TO", "Tonga"},
{"TT", "Trinidad and Tobago"},
{"TN", "Tunisia"},
{"TR", "Turkey"},
{"TM", "Turkmenistan"},
{"TC", "Turks and Caicos Islands"},
{"TV", "Tuvalu"},
{"UG", "Uganda"},
{"UA", "Ukraine"},
{"AE", "United Arab Emirates"},
{"GB", "United Kingdom"},
{"US", "United States"},
{"UM", "United States Minor Outlying Islands"},
{"UY", "Uruguay"},
{"UZ", "Uzbekistan"},
{"VU", "Vanuatu"},
{"VE", "Venezuela"},
{"VN", "VietNam"},
{"VG", "Virgin Islands"},
{"VI", "Virgin Islands"},
{"WF", "Wallis and Futuna"},
{"EH", "Western Sahara"}
};
public static readonly Dictionary<string, string> CountryFlagMap = new Dictionary<string, string>(){
{"AD", "🇦🇩"},
{"AE", "🇦🇪"},
{"AF", "🇦🇫"},
{"AG", "🇦🇬"},
{"AI", "🇦🇮"},
{"AL", "🇦🇱"},
{"AM", "🇦🇲"},
{"AO", "🇦🇴"},
{"AQ", "🇦🇶"},
{"AR", "🇦🇷"},
{"AS", "🇦🇸"},
{"AT", "🇦🇹"},
{"AU", "🇦🇺"},
{"AW", "🇦🇼"},
{"AX", "🇦🇽"},
{"AZ", "🇦🇿"},
{"BA", "🇧🇦"},
{"BB", "🇧🇧"},
{"BD", "🇧🇩"},
{"BE", "🇧🇪"},
{"BF", "🇧🇫"},
{"BG", "🇧🇬"},
{"BH", "🇧🇭"},
{"BI", "🇧🇮"},
{"BJ", "🇧🇯"},
{"BL", "🇧🇱"},
{"BM", "🇧🇲"},
{"BN", "🇧🇳"},
{"BO", "🇧🇴"},
{"BQ", "🇧🇶"},
{"BR", "🇧🇷"},
{"BS", "🇧🇸"},
{"BT", "🇧🇹"},
{"BV", "🇧🇻"},
{"BW", "🇧🇼"},
{"BY", "🇧🇾"},
{"BZ", "🇧🇿"},
{"CA", "🇨🇦"},
{"CC", "🇨🇨"},
{"CD", "🇨🇩"},
{"CF", "🇨🇫"},
{"CG", "🇨🇬"},
{"CH", "🇨🇭"},
{"CI", "🇨🇮"},
{"CK", "🇨🇰"},
{"CL", "🇨🇱"},
{"CM", "🇨🇲"},
{"CN", "🇨🇳"},
{"CO", "🇨🇴"},
{"CR", "🇨🇷"},
{"CU", "🇨🇺"},
{"CV", "🇨🇻"},
{"CW", "🇨🇼"},
{"CX", "🇨🇽"},
{"CY", "🇨🇾"},
{"CZ", "🇨🇿"},
{"DE", "🇩🇪"},
{"DJ", "🇩🇯"},
{"DK", "🇩🇰"},
{"DM", "🇩🇲"},
{"DO", "🇩🇴"},
{"DZ", "🇩🇿"},
{"EC", "🇪🇨"},
{"EE", "🇪🇪"},
{"EG", "🇪🇬"},
{"EH", "🇪🇭"},
{"ER", "🇪🇷"},
{"ES", "🇪🇸"},
{"ET", "🇪🇹"},
{"FI", "🇫🇮"},
{"FJ", "🇫🇯"},
{"FK", "🇫🇰"},
{"FM", "🇫🇲"},
{"FO", "🇫🇴"},
{"FR", "🇫🇷"},
{"GA", "🇬🇦"},
{"GB", "🇬🇧"},
{"GD", "🇬🇩"},
{"GE", "🇬🇪"},
{"GF", "🇬🇫"},
{"GG", "🇬🇬"},
{"GH", "🇬🇭"},
{"GI", "🇬🇮"},
{"GL", "🇬🇱"},
{"GM", "🇬🇲"},
{"GN", "🇬🇳"},
{"GP", "🇬🇵"},
{"GQ", "🇬🇶"},
{"GR", "🇬🇷"},
{"GS", "🇬🇸"},
{"GT", "🇬🇹"},
{"GU", "🇬🇺"},
{"GW", "🇬🇼"},
{"GY", "🇬🇾"},
{"HK", "🇭🇰"},
{"HM", "🇭🇲"},
{"HN", "🇭🇳"},
{"HR", "🇭🇷"},
{"HT", "🇭🇹"},
{"HU", "🇭🇺"},
{"ID", "🇮🇩"},
{"IE", "🇮🇪"},
{"IL", "🇮🇱"},
{"IM", "🇮🇲"},
{"IN", "🇮🇳"},
{"IO", "🇮🇴"},
{"IQ", "🇮🇶"},
{"IR", "🇮🇷"},
{"IS", "🇮🇸"},
{"IT", "🇮🇹"},
{"JE", "🇯🇪"},
{"JM", "🇯🇲"},
{"JO", "🇯🇴"},
{"JP", "🇯🇵"},
{"KE", "🇰🇪"},
{"KG", "🇰🇬"},
{"KH", "🇰🇭"},
{"KI", "🇰🇮"},
{"KM", "🇰🇲"},
{"KN", "🇰🇳"},
{"KP", "🇰🇵"},
{"KR", "🇰🇷"},
{"KW", "🇰🇼"},
{"KY", "🇰🇾"},
{"KZ", "🇰🇿"},
{"LA", "🇱🇦"},
{"LB", "🇱🇧"},
{"LC", "🇱🇨"},
{"LI", "🇱🇮"},
{"LK", "🇱🇰"},
{"LR", "🇱🇷"},
{"LS", "🇱🇸"},
{"LT", "🇱🇹"},
{"LU", "🇱🇺"},
{"LV", "🇱🇻"},
{"LY", "🇱🇾"},
{"MA", "🇲🇦"},
{"MC", "🇲🇨"},
{"MD", "🇲🇩"},
{"ME", "🇲🇪"},
{"MF", "🇲🇫"},
{"MG", "🇲🇬"},
{"MH", "🇲🇭"},
{"MK", "🇲🇰"},
{"ML", "🇲🇱"},
{"MM", "🇲🇲"},
{"MN", "🇲🇳"},
{"MO", "🇲🇴"},
{"MP", "🇲🇵"},
{"MQ", "🇲🇶"},
{"MR", "🇲🇷"},
{"MS", "🇲🇸"},
{"MT", "🇲🇹"},
{"MU", "🇲🇺"},
{"MV", "🇲🇻"},
{"MW", "🇲🇼"},
{"MX", "🇲🇽"},
{"MY", "🇲🇾"},
{"MZ", "🇲🇿"},
{"NA", "🇳🇦"},
{"NC", "🇳🇨"},
{"NE", "🇳🇪"},
{"NF", "🇳🇫"},
{"NG", "🇳🇬"},
{"NI", "🇳🇮"},
{"NL", "🇳🇱"},
{"NO", "🇳🇴"},
{"NP", "🇳🇵"},
{"NR", "🇳🇷"},
{"NU", "🇳🇺"},
{"NZ", "🇳🇿"},
{"OM", "🇴🇲"},
{"PA", "🇵🇦"},
{"PE", "🇵🇪"},
{"PF", "🇵🇫"},
{"PG", "🇵🇬"},
{"PH", "🇵🇭"},
{"PK", "🇵🇰"},
{"PL", "🇵🇱"},
{"PM", "🇵🇲"},
{"PN", "🇵🇳"},
{"PR", "🇵🇷"},
{"PS", "🇵🇸"},
{"PT", "🇵🇹"},
{"PW", "🇵🇼"},
{"PY", "🇵🇾"},
{"QA", "🇶🇦"},
{"RE", "🇷🇪"},
{"RO", "🇷🇴"},
{"RS", "🇷🇸"},
{"RU", "🇷🇺"},
{"RW", "🇷🇼"},
{"SA", "🇸🇦"},
{"SB", "🇸🇧"},
{"SC", "🇸🇨"},
{"SD", "🇸🇩"},
{"SE", "🇸🇪"},
{"SG", "🇸🇬"},
{"SH", "🇸🇭"},
{"SI", "🇸🇮"},
{"SJ", "🇸🇯"},
{"SK", "🇸🇰"},
{"SL", "🇸🇱"},
{"SM", "🇸🇲"},
{"SN", "🇸🇳"},
{"SO", "🇸🇴"},
{"SR", "🇸🇷"},
{"SS", "🇸🇸"},
{"ST", "🇸🇹"},
{"SV", "🇸🇻"},
{"SX", "🇸🇽"},
{"SY", "🇸🇾"},
{"SZ", "🇸🇿"},
{"TC", "🇹🇨"},
{"TD", "🇹🇩"},
{"TF", "🇹🇫"},
{"TG", "🇹🇬"},
{"TH", "🇹🇭"},
{"TJ", "🇹🇯"},
{"TK", "🇹🇰"},
{"TL", "🇹🇱"},
{"TM", "🇹🇲"},
{"TN", "🇹🇳"},
{"TO", "🇹🇴"},
{"TR", "🇹🇷"},
{"TT", "🇹🇹"},
{"TV", "🇹🇻"},
{"TW", "🇹🇼"},
{"TZ", "🇹🇿"},
{"UA", "🇺🇦"},
{"UG", "🇺🇬"},
{"UM", "🇺🇲"},
{"US", "🇺🇸"},
{"UY", "🇺🇾"},
{"UZ", "🇺🇿"},
{"VA", "🇻🇦"},
{"VC", "🇻🇨"},
{"VE", "🇻🇪"},
{"VG", "🇻🇬"},
{"VI", "🇻🇮"},
{"VN", "🇻🇳"},
{"VU", "🇻🇺"},
{"WF", "🇼🇫"},
{"WS", "🇼🇸"},
{"YE", "🇾🇪"},
{"YT", "🇾🇹"},
{"ZA", "🇿🇦"},
{"ZM", "🇿🇲"},
{"ZW", "🇿🇼"},
};
}
}
================================================
FILE: cli/Data/DnsResponse.cs
================================================
using DnsClient;
namespace dug.Data
{
//TODO: I want to remove this class, but there is an issue where ThrowDnsErrors isnt respected, so i have to catch them and deal with it. I use this to wrap the relevant data so I can render it. https://github.com/MichaCo/DnsClient.NET/issues/99
public class DnsResponse
{
public DnsResponse(IDnsQueryResponse queryResponse, long responseTime, QueryType recordType){
QueryResponse = queryResponse;
ResponseTime = responseTime;
RecordType = recordType;
}
public DnsResponse(DnsResponseException error, long responseTime, QueryType recordType){
Error = error;
ResponseTime = responseTime;
RecordType = recordType;
}
public IDnsQueryResponse QueryResponse { get; private set; }
public long ResponseTime { get; private set; }
public QueryType RecordType { get; private set; }
public bool HasError {
get
{
return Error != null;
}
}
public DnsResponseException Error { get; set; }
}
}
================================================
FILE: cli/Data/Models/DnsServer.cs
================================================
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Net;
namespace dug.Data.Models
{
public class DnsServer
{
[Required]
public IPAddress IPAddress {get; set;}
public string CountryCode {get; set;}
public string City {get; set;}
public bool? DNSSEC {get; set;} //TODO: Will no value in the server info here actually set this to null?
public double Reliability {get; set;}
public ContinentCodes ContinentCode {
get {
if(string.IsNullOrEmpty(CountryCode)){
return ContinentCodes.UNKNOWN;
}
return DataMaps.CountryContinentMap.ContainsKey(CountryCode) ? DataMaps.CountryContinentMap[CountryCode] : ContinentCodes.UNKNOWN;
}
}
public string CountryName {
get {
return CountryCode != null && DataMaps.CountryNameMap.ContainsKey(CountryCode) ? DataMaps.CountryNameMap[CountryCode] : null;
}
}
public string CountryFlag {
get {
if(CountryCode == null){
return null;
}
return CountryCode != null && DataMaps.CountryFlagMap.ContainsKey(CountryCode) ? DataMaps.CountryFlagMap[CountryCode] : null;
}
}
public string CityCountryName {
get {
string result = string.IsNullOrWhiteSpace(City) ? "" : $"{City}, ";
result += string.IsNullOrEmpty(CountryName) ? "UNKNOWN COUNTRY 🤷" : CountryName;
return result;
}
}
public string CityCountryContinentName {
get {
string result = $"{CityCountryName}, ";
result += ContinentCode == null ? "UNKNOWN CONTINENT" : ContinentCode.Name;
return result;
}
}
public string ToCsvString(){
// This is using the local csvformat (defined in LocalCsvDnsServerMapping.cs) and IS being used to persist servers.
// Apparently TinyCsvParser (true to its name) cannot also serialize. Thats fine, i wish it exposed the mappings it has registered though...
// Keep this format in sync with the one defined in LocalCsvDnsServerMapping!
return $"{IPAddress.ToString()},{CountryCode},{City},{DNSSEC},{Reliability}";
}
}
public class DnsServerComparer : IEqualityComparer<DnsServer>
{
public bool Equals(DnsServer x, DnsServer y)
{
return x.IPAddress == y.IPAddress;
}
public int GetHashCode([DisallowNull] DnsServer obj)
{
return obj.ToCsvString().GetHashCode();
}
}
}
================================================
FILE: cli/Directory.Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Include="Packaging.Targets">
<Version>0.1.189-*</Version>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>
================================================
FILE: cli/Options/GlobalOptions.cs
================================================
using System;
using CommandLine;
namespace dug.Options
{
public class GlobalOptions
{
[Option('v', "verbose", Required = false, HelpText = "HT_Enable_Verbose_Output", ResourceType = typeof(i18n.dug))]
public bool Verbose { get; set; }
private int _queryParallelism;
[Option('p', "parallel", Required = false, HelpText = "HT_Parallel", ResourceType = typeof(i18n.dug), Default = 200)]
public int QueryParallelism { get {return _queryParallelism;}
set {
if(value < 1){
throw new Exception(i18n.dug.ER_Parallel_Out_Of_Range);
}
_queryParallelism = value;
}
}
private int _queryRetries;
[Option("retries", Required = false, HelpText = "HT_Retries", ResourceType = typeof(i18n.dug), Default = 0)]
public int QueryRetries { get {return _queryRetries;}
set{
if(value < 0){
throw new Exception(i18n.dug.ER_Retries_Out_Of_Range);
}
_queryRetries = value;
}
}
private int _timeout;
[Option('t', "timeout", Required = false, HelpText = "HT_Timeout", ResourceType = typeof(i18n.dug), Default = 3000)]
public int Timeout { get {return _timeout;}
set{
if(value < 0){
throw new Exception(i18n.dug.ER_Timeout_Out_Of_Range);
}
_timeout = value;
}
}
}
}
================================================
FILE: cli/Options/RunOptions.cs
================================================
using System;
using System.Collections.Generic;
using System.Net;
using CommandLine;
using CommandLine.Text;
using DnsClient;
using dug.Data;
using dug.Data.Models;
using dug.Utils;
namespace dug.Options
{
public enum OutputFormats
{
TABLES,
CSV,
JSON
}
[Verb("run", isDefault: true, HelpText = "HT_Run", ResourceType = typeof(i18n.dug))]
public class RunOptions : GlobalOptions
{
[Usage]
public static IEnumerable<Example> Examples
{
get
{
yield return new Example(i18n.dug.Default, new RunOptions { Hostname = "git.kaijucode.com"});
yield return new Example(i18n.dug.EX_Specify_Query_Types, new UnParserSettings(){ PreferShortName = true}, new RunOptions { Hostname = "git.kaijucode.com", QueryTypes= "A,MX" });
yield return new Example(i18n.dug.EX_Specify_Continents, new UnParserSettings(){ PreferShortName = true}, new RunOptions { Hostname = "git.kaijucode.com", Continents= "AF,NA,SA" });
yield return new Example(i18n.dug.EX_Query_Reliable_On_Continents, new UnParserSettings(){ PreferShortName = true}, new RunOptions { Hostname = "git.kaijucode.com", Continents= "AF,NA", Servers = "8.8.8.8", ServerCount = 3, MultipleServerSources = true });
yield return new Example(i18n.dug.EX_Json_Fields_Output, new RunOptions { Hostname = "git.kaijucode.com", Template="ipaddress,city,responsetime,value", OutputFormat = OutputFormats.JSON});
}
}
[Value(0, Required = true, HelpText = "HT_Run_Hostname", ResourceType = typeof(i18n.dug), MetaName = "Hostname")]
public string Hostname { get; set; }
private int? _watch;
[Option('w', "watch", Required = false, HelpText = "HT_Run_Watch", ResourceType = typeof(i18n.dug))]
public int? Watch { get {return _watch;}
set {
if(value.HasValue && value.Value < 0){
throw new ArgumentOutOfRangeException(nameof(RunOptions.Watch), i18n.dug.ER_Run_Watch_Out_Of_Range);
}
_watch = value;
}
}
[Option('f', "file", Required = false, HelpText = "HT_Run_Custom_Server_File", ResourceType = typeof(i18n.dug))] //TODO: At some point we need a link here to a readme showing the format the file must be in.
public string CustomServerFile { get; set; }
private string _servers;
[Option('s', "servers", Required = false, HelpText = "HT_Run_Servers", ResourceType = typeof(i18n.dug))]
public string Servers { get {return _servers;}
set {
_servers = value;
ParsedServers = new List<DnsServer>();
foreach(string addressString in Servers?.Split(",")){
IPAddress parsedAddress;
if(IPAddress.TryParse(addressString, out parsedAddress)){
ParsedServers.Add(new DnsServer() {IPAddress = parsedAddress});
}
else{
throw new Exception($"{i18n.dug.ER_Run_Server_Parse} {addressString}");
}
}
}
}
public List<DnsServer> ParsedServers { get; set; }
private int _serverCount;
[Option("server-count", Required = false, HelpText = "HT_Run_Server_Count", ResourceType = typeof(i18n.dug), Default = 6)]
public int ServerCount { get {return _serverCount;}
set{
if(value < 1){
throw new Exception(i18n.dug.ER_Server_Count_Out_Of_Range);
}
_serverCount = value;
}
}
private string _continents;
[Option("continents", Required = false, HelpText = "HT_Run_Continents", ResourceType = typeof(i18n.dug), Default = "AF,SA,NA,OC,AS,EU,AN")]
public string Continents { get {return _continents;}
set{
_continents = value;
ParsedContinents = new List<ContinentCodes>();
foreach(string continentString in Continents.Split(",")){
ContinentCodes parsedContinentCode;
if(ContinentCodes.TryParse(continentString, out parsedContinentCode)){
ParsedContinents.Add(parsedContinentCode);
}
else{
throw new Exception($"{i18n.dug.ER_Run_Inavlid_Continent} {continentString}");
}
}
}
}
public List<ContinentCodes> ParsedContinents { get; set; }
private string _queryTypes;
[Option('q', "query-types", Required = false, HelpText = "HT_Run_Query_Types", ResourceType = typeof(i18n.dug), Default = "A")]
public string QueryTypes { get{return _queryTypes;}
set{
_queryTypes = value;
ParsedQueryTypes = new List<QueryType>();
foreach(string queryTypeString in QueryTypes.Split(",")){
QueryType parsedQueryType;
if(Enum.TryParse<QueryType>(queryTypeString.ToUpperInvariant(), out parsedQueryType)){
ParsedQueryTypes.Add(parsedQueryType);
}
else{
throw new Exception($"{i18n.dug.ER_Run_Invalid_Query_Type} {queryTypeString}");
}
}
}
}
// NOTE: This is because of a really annoying issue that almost makes using IEnumerables with a separator as commandline options useless.
// Any [Option] with an IEnumerable is very 'greedy' see: https://github.com/commandlineparser/commandline/issues/687
// Supposedly this will be fixed in version 2.9.0 but hasnt yet and this is on 2.9.0-preview1
public List<QueryType> ParsedQueryTypes { get; set; }
[Option('m', "multiple-sources", Required = false, HelpText = "HT_Run_Multiple_Server_Sources", ResourceType = typeof(i18n.dug), Default = false)]
public bool MultipleServerSources { get; set; }
private string _dataColumns;
[Option("data-columns", Required = false, HelpText = "HT_Run_Data_Columns", ResourceType = typeof(i18n.dug))]
public string DataColumns { get{return _dataColumns;}
set
{
if(string.IsNullOrEmpty(CustomServerFile)){
throw new Exception(i18n.dug.ER_Run_Data_Columns_Without_Server_File);
}
var columns = value.ToLowerInvariant().Split(',', StringSplitOptions.None); //Specifically DO NOT remove empty entries
foreach(var column in columns){
if(!TemplateHelper.ServerSetterMap.ContainsKey(column)){
throw new Exception($"{i18n.dug.ER_Run_Unable_Parse_Data_Column_Header} {column}");
}
}
_dataColumns = value.ToLowerInvariant();
}
}
private bool _dataHeadersPresent;
[Option("data-headers-present", Required = false, HelpText = "HT_Run_Data_Headers_Present", ResourceType = typeof(i18n.dug))]
public bool DataHeadersPresent { get{return _dataHeadersPresent;}
set
{
if(string.IsNullOrEmpty(DataColumns)){
throw new Exception(i18n.dug.ER_Run_Data_Headers_Present_Requires_Data_Columns);
}
_dataHeadersPresent = value;
}
}
private char? _dataSeparator;
[Option("data-separator", Required = false, HelpText = "HT_Run_Data_Separator", ResourceType = typeof(i18n.dug))]
public char? DataSeparator { get{return _dataSeparator;}
set
{
if(string.IsNullOrEmpty(DataColumns)){
throw new Exception(i18n.dug.ER_Run_Data_Separator_Requires_Data_Columns);
}
_dataSeparator = value;
}
}
private string _template;
[Option("output-template", Required = false, HelpText = "HT_Run_Template", ResourceType = typeof(i18n.dug))]
public string Template { get{return _template;}
set
{
var headers = value.ToLowerInvariant().Split(',', StringSplitOptions.RemoveEmptyEntries); //Specifically DO NOT remove empty entries
foreach(var header in headers){
if(!TemplateHelper.ResponseGetterMap.ContainsKey(header)){
throw new Exception($"{i18n.dug.ER_Run_Unable_Parse_Template_Header} {header}");
}
}
_template = value.ToLowerInvariant();
}
}
private OutputFormats _outputFormat;
[Option("output-format", Required = false, Default = OutputFormats.TABLES, HelpText = "HT_Run_Output_Format", ResourceType = typeof(i18n.dug))]
public OutputFormats OutputFormat { get{return _outputFormat;}
set
{
if(value == OutputFormats.TABLES){
_outputFormat = value;
return;
}
if(Watch.HasValue){
throw new Exception(i18n.dug.ER_Run_Output_Format_Cannot_Be_Used_With_Watch);
}
if(string.IsNullOrEmpty(Template)){
throw new Exception($"{i18n.dug.ER_Run_Output_Format_Requires_Template} ({default(OutputFormats)})");
}
_outputFormat = value;
}
}
private int _tableDetailLevel;
[Option('d', "table-detail", Default = 1, HelpText = "HT_Run_Table_Detail_Level", ResourceType = typeof(i18n.dug))]
public int TableDetailLevel { get{return _tableDetailLevel;}
set
{
if(value < 1 || value > 2) //Currently only support 1 and 2
{
throw new Exception(i18n.dug.ER_Run_Table_Detail_Out_Of_Range);
}
_tableDetailLevel = value;
}
}
}
//This will likely be needed later
// public class ParseableIPAddress : IPAddress
// {
// public ParseableIPAddress(string address) : base(parseIPFromString(address))
// {
// }
// private static byte[] parseIPFromString(string address){
// IPAddress result;
// if(IPAddress.TryParse(address, out result)){
// return result.GetAddressBytes();
// }
// throw new ArgumentException($"Unable to parse provided IPAddress: {address}");
// }
// }
}
================================================
FILE: cli/Options/UpdateOptions.cs
================================================
using System;
using System.Collections.Generic;
using System.Net;
using CommandLine;
using CommandLine.Text;
using dug.Data.Models;
using dug.Utils;
namespace dug.Options
{
public enum ReliabilityUpdateType
{
Normal,
Prune
}
[Verb("update", HelpText = "HT_Update", ResourceType = typeof(i18n.dug))]
public class UpdateOptions : GlobalOptions
{
[Usage]
public static IEnumerable<Example> Examples
{
get
{
yield return new Example(i18n.dug.Default, new UpdateOptions());
yield return new Example(i18n.dug.EX_Overwrite, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Overwite = true });
yield return new Example(i18n.dug.EX_Import_Servers, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Servers = "8.8.8.8,2001:4860:4860::8888" });
yield return new Example(i18n.dug.EX_Import_And_Overwrite_Servers, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Servers = "8.8.8.8,2001:4860:4860::8888", Overwite = true });
yield return new Example(i18n.dug.EX_Remote_Import_And_Update, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Reliability = ReliabilityUpdateType.Normal });
yield return new Example(i18n.dug.EX_Remote_Import_And_Update_Prune, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Reliability = ReliabilityUpdateType.Prune });
yield return new Example(i18n.dug.EX_Update_Reliability_Prune_2_Retries, new UnParserSettings(){ PreferShortName = true}, new UpdateOptions { Reliability = ReliabilityUpdateType.Prune, ReliabilityOnly = true, QueryRetries = 2 });
}
}
[Option('f', "file", Required = false, HelpText = "HT_Update_Custom_Server_File", ResourceType = typeof(i18n.dug))] //TODO: At some point we need a link here to a readme showing the format the file must be in.
public string CustomServerFile { get; set; }
private string _servers;
[Option('s', "servers", Required = false, HelpText = "HT_Update_Servers", ResourceType = typeof(i18n.dug))]
public string Servers { get {return _servers;}
set {
_servers = value;
ParsedServers = new List<DnsServer>();
foreach(string addressString in Servers?.Split(",")){
IPAddress parsedAddress;
if(IPAddress.TryParse(addressString, out parsedAddress)){
ParsedServers.Add(new DnsServer() {IPAddress = parsedAddress});
}
else{
throw new Exception($"{i18n.dug.ER_Update_Server_Parse} {addressString}");
}
}
}
}
public List<DnsServer> ParsedServers { get; set; }
[Option('o', "overwrite", Required = false, HelpText = "HT_Update_Overwrite", ResourceType = typeof(i18n.dug))]
public bool Overwite { get; set; }
[Option('r', "reliability", Required = false, HelpText = "HT_Update_Reliability", ResourceType = typeof(i18n.dug))]
public ReliabilityUpdateType? Reliability { get; set; }
private bool _reliabilityOnly;
[Option("reliability-only", Required = false, HelpText = "HT_Update_Reliability_Only", ResourceType = typeof(i18n.dug))]
public bool ReliabilityOnly {get{return _reliabilityOnly;}
set
{
if(Reliability == null){
throw new Exception(i18n.dug.ER_Update_Reliability_Only_Requires_Reliability);
}
_reliabilityOnly = value;
}
}
private string _updateURL;
[Option("update-url", Required = false, HelpText = "HT_Update_Update_URL", ResourceType = typeof(i18n.dug))]
public string UpdateURL { get{return _updateURL;}
set
{
if(!string.IsNullOrEmpty(CustomServerFile) || !string.IsNullOrEmpty(Servers)){
throw new Exception(i18n.dug.ER_Update_Update_URL_Requires_File_Or_Servers);
}
else if(string.IsNullOrEmpty(DataColumns)){
throw new Exception(i18n.dug.ER_Update_Update_URL_Requires_Data_Columns);
}
Uri parseResult;
var validURL = Uri.TryCreate(value, UriKind.Absolute, out parseResult) && (parseResult.Scheme == Uri.UriSchemeHttp || parseResult.Scheme == Uri.UriSchemeHttps);
if(!validURL){
throw new Exception($"{i18n.dug.ER_Update_Unable_Parse_Update_URL} {value}");
}
_updateURL = value;
}
}
private string _dataColumns;
[Option("data-columns", Required = false, HelpText = "HT_Update_Data_Columns", ResourceType = typeof(i18n.dug))]
public string DataColumns { get{return _dataColumns;}
set
{
var columns = value.ToLowerInvariant().Split(',', StringSplitOptions.None); //Specifically DO NOT remove empty entries
foreach(var column in columns){
if(!TemplateHelper.ServerSetterMap.ContainsKey(column)){
throw new Exception($"{i18n.dug.ER_Update_Unable_Parse_Data_Column_Header} {column}");
}
}
_dataColumns = value.ToLowerInvariant();
}
}
private bool _dataHeadersPresent;
[Option("data-headers-present", Required = false, HelpText = "HT_Update_Data_Headers_Present", ResourceType = typeof(i18n.dug))]
public bool DataHeadersPresent { get{return _dataHeadersPresent;}
set
{
if(string.IsNullOrEmpty(DataColumns)){
throw new Exception(i18n.dug.ER_Update_Data_Headers_Present_Requires_Data_Columns);
}
_dataHeadersPresent = value;
}
}
private char? _dataSeparator;
[Option("data-separator", Required = false, HelpText = "HT_Update_Data_Separator", ResourceType = typeof(i18n.dug))]
public char? DataSeparator { get{return _dataSeparator;}
set
{
if(string.IsNullOrEmpty(DataColumns)){
throw new Exception(i18n.dug.ER_Update_Data_Separator_Requires_Data_Columns);
}
_dataSeparator = value;
}
}
}
}
================================================
FILE: cli/Parsing/CustomDnsServerMapping.cs
================================================
using System;
using dug.Data.Models;
using dug.Utils;
using TinyCsvParser.Mapping;
using TinyCsvParser.Model;
using System.Linq;
namespace dug.Parsing
{
public class CustomDnsServerMapping : CsvMapping<DnsServer>
{
private readonly string[] _customHeaders;
public CustomDnsServerMapping(string customHeaders) : base()
{
_customHeaders = customHeaders.Split(',', StringSplitOptions.None);//Specifically DO NOT remove empty entries
MapUsing(MapCustomHeaders);
}
private bool MapCustomHeaders(DnsServer server, TokenizedRow headers)
{
for(int headerIndex = 0; headerIndex < _customHeaders.Length; headerIndex++){
string headerName = _customHeaders[headerIndex];
string headerValue = headers.Tokens.ElementAtOrDefault(headerIndex);
if(headerValue == null){
throw new Exception(string.Format(i18n.dug.ER_Unable_To_Get_Value_From_Header_X_Expected_At_Index_X, headerName, headerIndex));
}
var setterFunction = TemplateHelper.ServerSetterMap[headerName]; // This should always be present, its validation in UpdateOptions.cs
try{
setterFunction(server, headerValue);
}
catch{
throw new Exception(string.Format(i18n.dug.ER_Unable_Set_Field_X_To_Value_X, headerName, headerValue));
}
}
return true;
}
}
}
================================================
FILE: cli/Parsing/DnsServerParser.cs
================================================
using dug.Data.Models;
using TinyCsvParser;
using System.Linq;
using System.Text;
using System.IO;
using System;
using TinyCsvParser.Mapping;
namespace dug.Parsing
{
public enum DnsServerCsvFormats{
Remote,
Local
}
public class DnsServerParser: IDnsServerParser
{
public static readonly ICsvMapping<DnsServer> DefaultRemoteParser = new RemoteCsvDnsServerMapping();
public static readonly ICsvMapping<DnsServer> DefaultLocalParser = new LocalCsvDnsServerMapping();
public DnsServerParser(){
}
public ParallelQuery<DnsServer> ParseServersFromStream(Stream stream, ICsvMapping<DnsServer> format, bool skipHeaders, char separator){
var parserOptions = new CsvParserOptions(skipHeaders, separator);
var parser = new CsvParser<DnsServer>(parserOptions, format);
return parser.ReadFromStream(stream, Encoding.UTF8).Where(res => res.IsValid).Select(res => res.Result);
}
}
}
================================================
FILE: cli/Parsing/IDnsServerParser.cs
================================================
using System.IO;
using System.Linq;
using dug.Data.Models;
using TinyCsvParser.Mapping;
namespace dug.Parsing
{
public interface IDnsServerParser{
ParallelQuery<DnsServer> ParseServersFromStream(Stream stream, ICsvMapping<DnsServer> format, bool skipHeaders, char separator);
}
}
================================================
FILE: cli/Parsing/IpAddressConverter.cs
================================================
using System;
using System.Net;
using TinyCsvParser.TypeConverter;
namespace dug.Parsing
{
internal class IpAddressConverter : ITypeConverter<IPAddress>
{
public Type TargetType => typeof(IPAddress);
public bool TryConvert(string value, out IPAddress result)
{
return IPAddress.TryParse(value, out result);
}
}
}
================================================
FILE: cli/Parsing/LocalCsvDnsServerMapping.cs
================================================
using dug.Data.Models;
using TinyCsvParser.Mapping;
namespace dug.Parsing
{
public class LocalCsvDnsServerMapping : CsvMapping<DnsServer>
{
public LocalCsvDnsServerMapping() : base()
{
MapProperty(0, x => x.IPAddress, new IpAddressConverter());
MapProperty(1, x => x.CountryCode);
MapProperty(2, x => x.City);
MapProperty(3, x => x.DNSSEC);
MapProperty(4, x => x.Reliability);
}
}
}
================================================
FILE: cli/Parsing/RemoteCsvDnsServerMapping.cs
================================================
using dug.Data.Models;
using TinyCsvParser.Mapping;
namespace dug.Parsing
{
public class RemoteCsvDnsServerMapping : CsvMapping<DnsServer>
{
public RemoteCsvDnsServerMapping() : base()
{
MapProperty(0, x => x.IPAddress, new IpAddressConverter());
MapProperty(4, x => x.CountryCode);
MapProperty(5, x => x.City);
MapProperty(8, x => x.DNSSEC);
MapProperty(9, x => x.Reliability);
}
}
}
================================================
FILE: cli/Program.cs
================================================
using System.Threading.Tasks;
using CommandLine;
using dug.Services;
using dug.Options;
using dug.Parsing;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace dug
{
class Program
{
static async Task<int> Main(string[] args)
{
var services = ConfigureServices(args);
var serviceProvider = services.BuildServiceProvider();
Console.CancelKeyPress += delegate {
Console.CursorVisible = true;
};
int exitCode = 1;
try{
// calls the Run method in App, which is replacing Main
exitCode = await serviceProvider.GetService<App>().RunAsync();
}
catch(Exception ex){
if(ex is AggregateException ag){
Console.Error.WriteLine(ag.InnerExceptions[0].Message);
}
else{
Console.Error.WriteLine(ex.Message);
}
}
return exitCode;
}
private static IServiceCollection ConfigureServices(string[] args)
{
IServiceCollection services = new ServiceCollection();
var parser = new CommandLine.Parser(with => with.HelpWriter = null);
var parserResult = parser.ParseArguments<RunOptions, UpdateOptions>(args);
services.AddSingleton(parserResult);
services.AddTransient<IDnsServerParser, DnsServerParser>();
services.AddTransient<IDnsServerService, DnsServerService>();
services.AddTransient<IDnsQueryService, DnsQueryService>();
services.AddTransient<IConsoleTableService, ConsoleTableService>();
services.AddTransient<IConsoleTemplateService, ConsoleTemplateService>();
services.AddSingleton<IPercentageAnimator>(new PercentageAnimator());
// required to run the application
services.AddTransient<App>();
return services;
}
}
}
================================================
FILE: cli/Resources/default_servers.csv
================================================
ip_address,country_code,city,dnssec,reliability
8.8.8.8,US,,True,1
208.67.222.222,US,Wright City,True,1
46.105.55.84,FR,,False,0.8200000000000001
190.11.225.2,HN,La Ceiba,False,1
142.77.2.85,US,,False,0.19
45.55.147.169,US,Clifton,False,0.99
190.109.224.227,BO,La Paz,False,0.65
199.85.127.20,US,,True,1
64.6.64.6,US,,True,1
64.6.65.6,US,,True,1
193.226.61.1,RO,Bucharest,False,1
82.77.137.242,RO,Craiova,True,0.79
212.19.96.2,IT,Empoli,False,0.98
213.156.49.106,IT,Bresso,False,0.68
82.196.13.196,NL,Amsterdam,False,0.53
193.19.64.88,NO,,False,0.98
217.170.128.27,NO,Oslo,False,1
62.97.196.149,NO,Haugesund,False,0.96
158.43.128.72,GB,,True,1
195.46.39.40,US,,False,1
213.184.224.254,BY,,False,0.49
94.247.43.254,DE,,True,1
129.250.35.250,US,,False,1
129.250.35.251,US,,False,0.97
156.154.70.1,US,,True,1
194.7.1.4,BE,,True,1
195.10.195.195,DE,,True,1
195.76.233.2,ES,Santa Perpetua de Mogoda,False,1
200.174.105.3,BR,São Paulo,False,0.43
185.228.169.9,US,,True,0.99
199.2.252.10,US,,True,1
203.85.45.24,HK,,True,0.55
204.194.232.200,US,,True,0.39
204.194.234.200,US,,True,0.36
210.0.128.250,HK,Central,True,1
210.0.128.251,HK,Central,True,0.99
165.87.13.129,US,,False,1
165.87.201.244,US,,False,1
1.0.0.2,AU,Melbourne,True,1
1.0.0.3,AU,Melbourne,True,1
8.0.7.0,US,Atlanta,False,1
77.88.8.1,RU,,True,1
77.88.8.3,RU,,True,1
77.88.8.88,RU,,True,1
176.103.130.136,CY,,True,1
176.103.130.137,CY,,True,1
209.244.0.4,US,,False,1
4.2.2.6,US,,False,0.51
88.208.211.65,GB,,False,0.18000000000000002
138.36.1.131,BR,Fortaleza,True,0.99
1.1.1.1,,,True,1
1.1.1.3,AU,,True,1
156.154.71.2,US,,True,1
46.35.180.2,BG,Troyan Municipality,False,1
62.149.128.4,IT,Arezzo,False,1
64.9.50.67,US,Hershey,False,1
66.249.150.50,AG,St John's,False,1
158.51.134.53,US,,False,1
168.187.161.250,KW,Salwa,False,1
177.43.56.139,BR,Curitiba,False,0.99
194.158.78.137,AD,Andorra la Vella,False,1
194.177.210.210,GR,,True,1
195.228.140.138,HU,Budapest,False,0.81
202.86.149.20,MO,Macao,False,1
196.3.132.154,TT,,False,1
94.140.14.14,CY,,True,1
208.67.220.220,US,,True,1
131.196.220.10,BR,Porto Alegre,False,0.95
177.184.176.5,BR,Carbonita,False,1
186.251.103.10,BR,Coronel Fabriciano,False,0.84
187.16.105.10,BR,Rio de Janeiro,False,1
189.23.31.242,BR,São Luís,False,0.74
200.195.185.234,BR,Araucária,False,1
103.85.107.99,MM,Yangon,False,0.98
119.235.48.3,IN,Hyderabad,True,0.5700000000000001
195.140.195.21,FI,,True,1
80.78.134.11,DE,,False,1
114.7.193.213,ID,,False,0.62
149.112.112.9,US,,True,1
137.82.1.1,CA,North Vancouver,False,0.95
139.134.5.51,AU,,False,1
12.127.17.72,US,Washington,False,1
151.196.0.37,US,Crofton,False,1
151.197.0.37,US,,False,1
151.197.0.38,US,Philadelphia,False,1
151.198.0.38,US,Plainsboro,False,1
151.198.0.39,US,Plainsboro,False,1
151.199.0.39,US,,False,1
151.201.0.38,US,,False,1
151.201.0.39,US,,False,1
151.202.0.84,US,New York,False,1
151.202.0.85,US,New York,False,1
156.154.70.22,US,,True,1
158.43.240.3,GB,,True,1
166.102.165.11,US,,True,1
168.95.192.1,TW,,False,1
165.246.10.2,KR,,False,1
192.76.144.66,DE,,True,1
192.133.129.2,US,Searcy,False,1
194.25.0.60,DE,Rehau,True,1
195.129.12.122,NL,,True,1
195.129.12.83,NL,,True,1
193.230.183.201,RO,,False,1
195.186.1.107,CH,,True,1
195.186.4.107,CH,,True,0.01
195.186.4.109,CH,,True,1
209.51.161.14,US,,True,1
212.66.129.98,DE,Düren,False,0.99
213.55.96.166,ET,,False,1
62.140.239.1,UA,Kyiv,True,0.97
83.137.41.8,AT,Terfens,False,0.77
95.158.129.2,BG,Sofia,False,1
216.169.160.2,US,State College,True,1
216.199.46.11,US,,True,1
216.21.128.22,CA,,True,1
216.21.129.22,CA,Vancouver,True,0.99
207.248.57.11,MX,Monterrey,False,1
207.68.32.39,US,,False,1
200.57.2.108,MX,Ecatepec,False,0.92
200.76.5.147,MX,San Luis Potosí City,False,1
209.216.160.2,US,Grass Valley,False,0.98
209.239.11.98,CA,Springfield,False,1
209.253.113.10,US,Dallas,False,1
69.169.190.211,US,Lehi,False,0.97
211.63.64.11,KR,,False,0.76
202.182.0.1,TH,,False,0.88
62.134.11.4,GB,,False,0.85
203.119.36.106,VN,,True,1
203.146.237.237,TH,Bangkok,False,1
63.246.63.142,US,Greenville,False,0.56
94.158.96.2,RU,Moscow,False,1
213.244.72.31,PS,,False,1
64.233.217.2,US,Saint Clair Shores,True,1
64.238.96.12,US,Atlanta,False,1
185.161.112.33,IR,,False,0.87
185.161.112.34,IR,,False,0.98
201.217.41.78,PY,Asunción,False,1
201.222.52.6,PY,Asunción,False,0.83
201.222.55.246,PY,Asunción,False,0.77
203.198.68.197,HK,Central,False,1
5.2.75.75,NL,,True,1
45.67.219.208,US,Los Angeles,True,1
159.69.114.157,DE,Nuremberg,True,1
81.3.27.54,DE,Hemmingen,True,1
213.55.96.148,ET,,False,1
77.42.130.37,LB,Beirut,False,1
77.42.128.37,LB,Beirut,False,1
69.162.67.202,US,,False,1
103.121.228.1,MM,Yangon,True,0.71
45.90.30.126,US,,True,1
134.195.4.2,US,,True,0.75
80.78.132.79,DE,,True,1
78.47.243.3,DE,,False,1
105.96.43.54,DZ,Annaba,False,0.97
89.234.141.66,FR,Strasbourg,True,1
197.248.116.74,KE,Nairobi,False,0.66
76.76.2.0,CA,,True,1
76.76.2.1,CA,,True,1
76.76.2.2,CA,,True,1
76.76.2.3,CA,,True,1
195.112.96.34,RU,Obninsk,True,1
208.91.112.52,CA,Burnaby,True,1
202.46.34.74,CN,Guangzhou,True,1
202.46.34.76,CN,,True,0.98
196.13.141.10,ZA,,False,0.9
105.30.247.93,ZA,Durban,False,0.75
45.90.28.169,US,,True,1
45.90.30.169,US,,True,1
64.212.106.84,US,New York,False,0.02
67.17.215.132,US,Chagrin Falls,False,1
212.94.34.34,CH,Fischbach-Goeslikon,True,0.01
117.55.243.14,IN,Greater Noida,True,0.95
178.124.158.2,BY,Minsk,False,0.73
190.192.166.130,AR,Buenos Aires,False,0.01
199.187.127.201,US,,True,0.98
202.138.120.87,IN,,False,1
89.2.2.234,FR,Paris,False,1
195.186.1.162,CH,,True,0.02
182.19.95.98,IN,Bhubaneswar,False,0.87
80.67.169.12,FR,,True,1
41.221.192.167,CV,,False,1
45.90.30.193,US,,True,1
46.182.19.48,DE,,True,0.02
54.94.175.250,BR,São Paulo,False,1
64.111.16.3,US,Colorado Springs,True,1
66.175.146.133,US,Madison,False,0.62
92.43.224.1,ES,,True,1
92.222.117.114,FR,Paris,False,1
101.101.101.101,TW,,True,0.58
113.197.68.20,PF,Papeete,True,0.66
138.0.207.117,BR,Bento de Abreu,False,1
149.112.112.12,US,,False,0.34
168.95.1.1,TW,,False,1
169.53.182.124,US,,False,0.03
176.9.136.236,DE,,False,0.02
193.2.246.9,SI,Zgornje Gorje,False,1
195.113.144.194,CZ,Olomouc,True,1
203.146.127.85,TH,,False,1
213.8.5.220,IL,Kiryat Gat,False,1
218.146.255.235,KR,Haeundae-gu,False,1
203.104.30.181,MV,,True,1
203.104.30.182,MV,,True,1
76.81.95.43,US,San Luis,False,0.26
50.204.174.98,US,Southgate,False,1
50.204.174.58,US,Powhatan,False,0.81
185.231.182.126,IR,,False,1
184.55.4.145,US,Plymouth,True,1
98.38.222.125,US,Denver,True,1
98.244.8.17,US,Chico,True,1
50.216.25.74,US,Warrenton,True,1
50.238.17.2,US,Bedford,False,0.4
100.36.236.67,US,Gaithersburg,False,1
50.220.226.155,US,Miami,True,1
195.208.5.1,RU,,True,1
98.103.52.125,US,Kaukauna,True,0.98
96.65.91.65,US,West Dundee,False,1
107.0.74.232,US,Simsbury,True,1
50.217.25.205,US,Carrollton,True,1
173.14.65.89,US,Sacramento,False,1
202.136.162.12,SG,,False,1
202.136.163.11,SG,,False,1
212.100.84.10,NG,Eket,False,0.59
203.115.130.74,PH,Malay,True,1
202.78.97.41,PH,,True,1
82.65.95.79,FR,Paris,False,1
202.129.196.242,IN,Coimbatore,False,0.78
104.40.153.131,NL,Amsterdam,False,0.88
4.2.2.5,US,,False,1
156.154.71.1,US,,True,1
64.81.45.2,US,,False,1
66.93.87.2,US,,False,1
64.81.127.2,US,,False,0.85
66.92.64.2,US,,False,0.99
66.92.159.2,US,,False,1
66.92.224.2,US,,False,1
216.254.95.2,US,,False,1
216.27.175.2,US,,False,1
5.1.66.255,DE,Ebersberg,True,1
176.9.1.117,DE,,True,1
194.98.65.165,FR,Lagny-sur-Marne,True,1
194.2.0.50,FR,,False,0.97
141.1.1.1,DE,,False,1
80.241.218.68,DE,Munich,True,1
194.225.62.80,IR,,True,1
213.176.123.5,IR,,False,1
202.248.37.74,JP,Chiyoda-ku,False,1
210.94.0.7,KR,Jung-gu,False,1
202.30.143.11,KR,,True,1
210.94.0.73,KR,Jung-gu,False,1
221.139.13.130,KR,Kwangmyong,False,1
211.115.194.3,KR,,True,1
134.75.122.2,KR,,False,1
164.124.107.9,KR,Nowon-gu,False,1
203.248.252.2,KR,,False,1
121.152.231.196,KR,Gyeongju,False,1
207.248.224.72,MX,Monterrey,False,1
195.129.12.114,NL,,True,1
200.10.231.110,PY,,False,1
193.111.144.145,PL,,False,1
178.161.150.190,RU,Perm,False,1
217.150.35.129,RU,Rostov-on-Don,True,1
213.154.80.203,SN,,False,1
210.80.58.66,SG,,True,1
210.116.119.185,KR,,False,1
193.242.151.45,RU,Krasnodar,False,0.33
103.1.93.184,NP,,False,0.38
184.55.17.150,US,Plymouth,False,0.33
77.233.5.68,RU,Krasnodar,False,0.7
173.89.30.48,US,Waukesha,True,1
198.24.122.6,US,Brook Park,False,1
202.150.54.194,JP,Ichinomiya,False,0.89
190.128.225.58,PY,Asunción,False,1
46.28.130.214,RU,Berdsk,False,0.59
91.223.120.25,RU,,False,0.99
168.126.93.10,KR,Haeundae-gu,False,0.96
1.232.188.2,KR,,False,1
88.208.244.225,GB,,False,1
156.154.70.16,US,Louisville,True,1
190.196.58.194,CL,Santiago,False,0.64
194.50.91.46,BE,,False,0.68
201.238.224.203,CL,Buin,False,1
41.211.108.4,CM,,False,1
92.247.90.158,BG,Sofia,False,1
96.53.102.66,CA,Edmonton,False,1
195.251.32.71,GR,Galatsi,False,0.9
201.117.254.241,MX,León,True,0.64
213.149.113.211,ME,,False,1
209.130.139.2,US,New York,False,0.51
85.29.148.9,KZ,,False,0.9
41.242.116.25,YT,Mamoudzou,False,0.5700000000000001
82.151.74.36,MR,Arafat,False,0.8
109.111.229.198,RS,,False,0.81
121.58.203.4,PH,Manila,False,0.99
188.225.225.25,PS,,False,1
195.178.33.46,RS,Belgrade,False,0.9400000000000001
41.207.186.166,TG,Lomé,False,1
60.248.107.138,TW,New Taipei,False,1
60.251.117.118,TW,New Taipei,False,1
85.9.129.36,TJ,Dushanbe,False,1
85.9.129.38,TJ,Dushanbe,False,1
91.144.22.198,SY,,False,1
91.192.196.226,PL,Czechowice-Dziedzice,False,1
183.91.184.14,VN,,True,1
41.222.4.34,UG,,False,1
91.217.197.2,UA,,False,1
45.236.169.151,EC,Guayaquil,False,1
200.54.22.74,CL,Concepción,False,0.35000000000000003
165.16.22.130,LY,,False,1
50.192.195.69,US,Logan,False,0.75
95.143.220.5,RU,Moscow,False,1
175.100.18.45,KH,Phnom Penh,False,1
217.164.255.35,AE,Sharjah,False,0.81
92.249.219.47,HU,Budapest,False,1
37.53.85.116,UA,Mukacheve,False,0.76
208.67.222.2,US,,True,1
208.67.220.2,US,,True,1
9.9.9.11,US,,True,1
130.61.69.123,DE,Frankfurt am Main,True,0.43
199.85.127.10,US,,True,1
192.3.165.37,US,Piscataway,True,1
198.54.117.11,US,,True,1
31.3.135.232,CH,,False,1
88.198.92.222,DE,,False,1
89.163.140.67,DE,,True,1
216.106.1.254,US,Columbia,False,1
24.229.250.113,US,Bethlehem,False,1
46.166.189.68,NL,,True,1
109.224.233.190,GB,Hampstead,False,1
109.228.1.132,GB,,False,1
109.228.20.39,GB,,False,1
185.43.135.1,CZ,,True,1
109.228.22.126,GB,,False,1
109.228.24.15,GB,,False,1
109.228.5.167,GB,,False,1
195.74.68.3,GB,,False,1
198.153.192.40,US,,True,1
198.153.192.50,US,,True,1
198.153.194.40,US,,True,1
149.112.121.10,CA,,True,1
149.112.122.10,CA,,True,1
149.112.122.20,CA,,True,1
149.112.122.30,CA,,True,1
198.153.194.50,US,,True,1
199.85.126.20,US,,True,1
212.113.0.3,GB,,False,1
212.250.202.132,GB,Ely,False,0.97
37.209.219.30,GB,,True,1
45.11.45.11,,,True,1
46.245.253.5,GB,Surrey,False,1
5.11.11.11,GB,,True,1
5.11.11.5,GB,,True,1
5.133.41.1,GB,Carlisle,False,1
5.159.215.254,GB,Golders Green,False,1
62.76.62.76,RU,,True,1
8.20.247.10,US,Charleston,True,1
12.127.16.67,US,Washington,False,1
12.127.17.71,US,,False,1
141.154.0.68,US,,False,1
151.196.0.38,US,Odenton,False,1
151.203.0.85,US,Schenectady,False,1
166.102.165.13,US,,False,1
199.44.194.2,US,,False,1
208.72.160.67,US,Lehi,False,1
209.253.113.2,US,,False,1
216.194.28.33,US,New York,False,1
216.229.0.25,US,Lincoln,True,1
45.90.28.126,US,,True,1
45.90.30.226,US,,True,1
64.132.94.250,US,New Berlin,False,1
64.69.100.68,US,,True,1
64.69.98.35,US,,True,1
64.80.203.194,US,Princeton,True,1
64.80.255.240,US,Hartford,True,1
66.251.35.130,US,,True,1
66.6.65.5,US,,True,1
202.29.223.62,TH,Nonthaburi,False,1
171.99.131.78,TH,Bangkok,False,0.68
186.97.172.178,CO,Medellín,False,1
190.181.21.50,BO,,False,1
43.249.219.198,IN,Nehrunagar,False,0.9400000000000001
1.231.108.104,KR,Nowon-gu,False,0.92
178.238.231.8,DE,Munich,False,1
65.21.151.121,FI,Helsinki,False,1
139.99.213.23,AU,Sydney,False,1
103.196.38.38,US,San Francisco,False,1
78.46.85.216,DE,,False,1
192.71.166.92,GR,Thessaloniki,False,1
193.30.120.245,DE,,True,0.99
81.16.19.65,DE,,True,1
81.16.18.228,DE,,True,1
78.31.67.99,DE,,True,1
172.104.93.80,JP,Tokyo,True,1
185.235.81.4,GB,,False,1
185.235.81.5,GB,,False,1
185.235.81.6,GB,,False,1
185.187.84.15,IR,,False,1
37.156.145.229,IR,Tehran,False,1
176.214.35.182,RU,Pushkino,False,1
91.201.253.202,RU,Shchyokino,False,1
185.40.31.16,RU,Tula,False,0.86
193.200.151.69,UA,Rozdilna,False,1
213.138.77.238,RU,Rostov-on-Don,False,1
218.102.23.228,HK,Kowloon,False,1
64.212.106.85,US,New York,False,0.51
210.87.250.155,HK,,True,1
210.87.253.60,HK,,False,1
185.46.34.49,HR,Đakovo,False,1
195.243.99.35,DE,Selb,False,1
185.51.92.103,PT,Sobreda,False,1
202.61.247.8,AT,,False,1
185.97.117.187,IR,,False,1
85.214.116.139,DE,,False,1
82.146.56.112,RU,,False,1
15.207.52.93,IN,Mumbai,False,1
159.203.0.135,CA,Toronto,False,1
209.181.17.195,US,Cheyenne,False,1
103.143.71.202,ID,Padang,True,1
146.59.151.40,FR,,False,1
91.185.7.254,KZ,,False,1
198.98.51.236,US,Staten Island,False,1
159.89.102.42,DE,Frankfurt am Main,False,1
185.101.139.253,NL,Amsterdam,False,1
128.199.255.156,SG,Singapore,False,1
107.170.225.126,US,San Francisco,False,1
137.74.45.215,FR,,False,1
85.214.232.223,DE,,False,1
68.183.235.124,SG,Singapore,False,1
176.105.202.18,UA,Rivne,False,1
185.91.116.238,CZ,,False,1
212.83.160.229,FR,,False,1
185.157.81.134,DE,,False,1
157.90.138.199,DE,,True,1
23.239.5.85,US,Fremont,False,1
173.249.45.177,DE,Nuremberg,False,1
188.166.225.103,SG,Singapore,False,1
45.90.80.14,AL,,False,1
158.101.189.39,DE,Frankfurt am Main,False,1
116.203.122.149,DE,,False,1
176.96.243.182,UZ,Tashkent,False,1
185.193.158.106,NL,Amsterdam,False,1
185.125.111.46,RO,,False,1
82.64.83.14,FR,,False,1
165.22.90.232,DE,Frankfurt am Main,False,1
51.178.73.165,FR,,False,1
206.81.12.77,US,North Bergen,False,1
89.40.93.194,RO,Bucharest,False,1
178.254.43.157,DE,,False,1
85.214.22.21,DE,,False,1
136.243.132.241,DE,,False,1
90.255.229.50,GB,Lambeth,False,1
176.121.9.144,UA,Irpin,False,1
45.33.68.222,US,Cedar Knolls,False,1
185.193.127.156,FI,,False,0.79
208.104.21.121,US,Fort Mill,False,0.61
50.116.60.92,US,Cedar Knolls,False,1
82.165.118.68,DE,,False,1
178.210.217.57,UA,Zaporizhzhya,False,1
139.162.36.231,SG,Singapore,False,1
173.163.101.137,US,Harrisburg,False,1
65.21.52.116,FI,Helsinki,False,1
37.120.180.133,DE,Gifhorn,False,1
158.101.164.204,DE,Frankfurt am Main,False,1
95.217.213.52,FI,Helsinki,True,1
78.31.64.154,DE,,False,1
85.214.174.223,DE,,False,1
143.244.33.74,SG,Singapore,True,0.95
143.244.33.90,SG,,True,1
185.183.106.83,ES,Madrid,True,1
193.37.255.227,SK,Bratislava,True,1
195.12.48.171,GB,,True,1
209.58.147.36,US,Dallas,True,1
213.202.216.12,DE,Dortmund,True,1
217.138.219.219,IT,Milan,True,1
217.138.220.243,CZ,Prague,True,1
23.19.245.84,US,,True,1
23.19.245.88,US,,True,1
37.120.142.115,ES,Barcelona,True,1
37.120.152.235,BG,Sofia,True,1
37.120.193.219,RS,Belgrade,True,1
37.120.207.131,IT,Rome,True,1
37.120.211.91,PL,Warsaw,True,1
37.120.235.187,IE,Dublin,True,1
82.221.128.44,IS,,True,1
85.114.138.119,DE,,True,1
86.106.74.219,HU,Budapest,True,1
89.163.221.181,DE,,True,1
94.198.41.235,AT,Vienna,True,1
138.104.176.3,GB,,False,1
149.156.12.250,PL,Krakow,False,1
149.156.132.100,PL,Grybow,False,1
149.211.153.51,DE,,True,1
151.197.0.39,US,,False,1
151.203.0.84,US,Schenectady,False,1
192.109.44.14,DE,,False,1
192.114.3.5,IL,Mazkeret Batya,False,1
193.110.86.21,GR,,False,1
193.111.161.1,RO,,True,1
193.138.192.2,RO,Bucharest,True,1
193.138.92.130,IL,,False,1
67.207.87.107,US,North Bergen,False,1
104.248.141.40,DE,Frankfurt am Main,False,1
203.113.172.62,VN,,False,1
85.214.219.75,DE,,False,1
193.19.103.4,RU,Novosibirsk,False,1
85.214.145.202,DE,,False,1
91.201.40.141,RU,,False,1
193.202.121.50,FR,,False,1
31.131.0.53,MD,Chisinau,False,1
134.209.156.123,IN,Bengaluru,False,1
193.227.50.3,EG,,False,1
178.62.213.94,NL,Amsterdam,True,1
193.238.77.61,IT,Segusino,False,1
193.238.77.62,IT,Segusino,False,1
193.239.194.7,RO,,False,1
172.105.7.213,CA,Toronto,False,1
31.183.0.64,PL,Lodz,False,1
217.182.106.131,FR,,False,1
139.162.182.87,DE,Frankfurt am Main,False,1
201.238.239.73,CL,Santiago,False,1
178.128.23.211,SG,Singapore,False,1
162.55.0.94,DE,,False,1
62.176.21.67,RU,Podolsk,True,1
61.28.238.20,VN,,False,1
200.7.99.229,US,Ashburn,False,1
151.80.145.143,FR,Roubaix,True,1
31.170.165.23,CY,,True,1
46.175.171.234,BY,,False,0.5700000000000001
35.164.197.48,US,Boardman,False,1
159.69.205.47,DE,,False,1
154.70.151.73,BW,Gaborone,False,1
193.30.228.10,BG,,True,1
193.42.159.2,SE,,False,1
193.47.83.251,GB,,False,1
193.58.235.56,DE,,False,1
193.6.10.1,HU,Miskolc,False,1
194.0.242.2,LV,,False,1
194.102.126.11,RO,,False,1
194.102.42.3,RO,,False,1
194.108.42.2,CZ,Zlín,False,1
194.108.42.253,CZ,Zlín,False,1
194.125.241.193,LV,,False,1
194.149.132.4,MK,Skopje,False,1
194.149.146.10,MK,Skopje,False,1
194.153.131.18,IT,Turin,False,0.97
194.176.111.70,KG,,False,0.97
194.176.111.71,KG,,False,1
194.177.199.1,GR,,False,1
194.225.73.141,IR,,True,1
194.25.0.52,DE,Kleve,True,1
92.255.164.166,RU,Tyumen,False,1
194.50.161.21,UA,,False,1
194.69.194.3,FR,,False,1
194.69.195.2,FR,,False,1
194.88.141.2,RU,,False,1
194.9.14.1,UA,Chernihiv,False,1
194.9.14.154,UA,Chernihiv,True,1
103.197.251.202,BD,,False,1
198.6.1.4,US,,False,1
198.6.1.2,US,,False,1
158.58.133.38,RU,Sochi,False,0.83
211.115.194.1,KR,,True,1
211.115.194.4,KR,,True,1
211.115.194.5,KR,,True,1
190.93.189.30,DO,Santiago de los Caballeros,True,1
170.210.4.222,AR,Buenos Aires,False,0.53
203.240.193.11,KR,,True,1
203.251.201.1,KR,,True,1
200.188.151.212,MX,Mazapil,False,0.51
81.163.57.147,RU,Makhachkala,False,0.72
62.201.217.194,IQ,,False,0.91
37.156.145.21,IR,Tehran,False,1
191.102.89.6,CO,Barbosa,False,0.67
37.57.56.38,UA,Poltava,False,0.92
121.139.218.165,KR,Ansan-si,False,1
193.159.232.6,DE,Karlsruhe,True,0.62
202.14.164.9,TH,,False,0.99
93.159.247.109,RU,Krasnoyarsk,False,0.58
186.190.228.83,CO,Puerto Wilches,False,1
24.37.245.42,CA,Dolbeau-Mistassini,False,1
217.164.255.37,AE,Dubai,False,0.9
14.161.252.185,VN,Ho Chi Minh City,False,0.76
159.192.97.156,TH,Loei,False,1
31.146.161.194,GE,Tbilisi,False,0.060000000000000005
216.170.153.146,US,Bend,True,1
216.165.129.157,US,St. George,True,1
206.253.33.131,US,Ulysses,False,1
195.129.111.49,NL,,True,1
195.129.111.50,NL,,True,1
88.148.52.10,ES,Cartagena,False,1
58.147.186.158,ID,,False,1
50.201.138.220,US,New Oxford,True,1
73.128.218.47,US,Salisbury,True,1
212.72.130.20,GE,,False,1
212.72.130.21,GE,,False,1
181.129.74.58,CO,Medellín,False,0.62
85.173.165.36,RU,,False,1
190.220.1.173,AR,Tres de Febrero,False,1
78.83.199.235,BG,Sofia,False,1
92.65.74.235,NL,Vianen,False,0.71
103.130.4.82,ID,,False,0.49
50.197.210.138,US,Houston,False,0.86
110.145.237.30,AU,Moorabbin,False,1
110.142.40.60,AU,Melbourne,False,1
84.204.40.155,RU,,False,0.81
178.210.131.61,UA,Lviv,False,0.5700000000000001
190.93.189.28,DO,Santiago de los Caballeros,True,1
98.154.21.253,US,Whittier,False,1
201.140.114.161,MX,León,False,0.96
201.148.95.234,MX,Mexico City,False,0.87
1.4.214.148,TH,Ratchaburi,False,1
203.112.212.114,BD,,False,0.09999999999999999
170.247.43.142,BR,Marica,False,1
182.52.58.44,TH,Sam Chuk,False,0.75
88.119.204.62,LT,Prienai,False,1
185.226.113.180,UA,Odessa,False,0.81
62.113.113.34,RU,,True,1
203.81.95.70,MM,,False,0.87
82.137.245.41,SY,Damascus,False,0.62
103.130.113.129,BD,,False,0.47000000000000003
198.89.91.90,KZ,Kokshetau,False,0.84
197.155.230.206,ZW,Harare,False,1
216.160.246.151,US,Fallbrook,False,0.93
216.111.107.73,US,Carencro,False,0.89
65.141.223.48,US,Denver,False,0.9400000000000001
65.144.134.146,US,Gardiner,False,0.09
209.201.85.177,US,Shreve,False,0.96
65.132.219.239,US,Clarkston,False,0.84
65.112.207.1,US,Denver,False,0.95
65.140.231.106,US,Aubrey,False,0.9400000000000001
65.155.219.127,US,Boise,False,0.88
65.155.149.95,US,Las Vegas,False,1
65.155.104.167,US,Butte,False,1
198.243.4.1,US,Arvada,False,0.89
89.161.27.84,PL,Bialystok,False,1
50.221.57.204,US,,True,1
50.217.25.200,US,Carrollton,True,1
50.216.25.75,US,Chico,True,1
98.38.222.6,US,Denver,True,1
173.10.78.65,US,Bellingham,False,1
98.34.183.199,US,Humble,True,1
24.104.140.229,US,Mullica Hill,True,1
174.48.45.128,US,Stuart,True,1
50.234.132.241,US,Baltimore,False,1
96.102.76.175,US,,False,1
98.232.103.167,US,Tacoma,True,1
50.235.228.46,US,Melrose Park,True,1
98.38.222.66,US,Denver,True,1
180.211.158.90,BD,Dhaka,True,0.51
58.147.186.10,ID,,False,0.85
101.102.103.104,TW,,True,1
197.232.47.102,KE,Nairobi,False,1
216.146.36.36,US,,True,1
8.20.247.20,US,,True,1
181.129.84.210,CO,Itaguei,False,0.73
194.224.216.170,ES,Girona,False,0.99
185.74.5.1,UZ,,True,1
195.158.0.5,UZ,Tashkent,True,1
195.158.0.3,UZ,Tashkent,True,1
84.54.64.35,UZ,Tashkent,True,1
185.74.5.5,UZ,,True,1
103.248.93.5,IN,Delhi,False,1
187.1.57.206,BR,Belo Horizonte,True,1
41.65.236.61,EG,Giza,False,1
204.95.160.2,US,,False,1
186.97.167.26,CO,Medellín,False,1
109.194.17.191,RU,Irkutsk,False,1
83.151.4.172,RU,,False,0.84
200.148.169.234,BR,,False,0.9
168.154.160.4,KR,Seongnam-si,False,1
203.198.7.66,HK,Wanchai,False,1
176.98.95.105,UA,Uman,False,1
45.229.32.242,DO,Santo Domingo Este,False,0.61
63.96.227.102,US,,False,1
63.96.227.103,US,,False,1
63.96.227.104,US,,False,1
63.96.227.100,US,,False,1
49.231.140.120,TH,,False,1
213.85.168.57,RU,Odintsovo,False,1
41.65.236.53,EG,Giza,False,1
41.65.236.54,EG,Cairo,False,1
76.76.10.0,CA,,True,1
76.76.10.5,CA,,True,1
76.76.2.5,CA,,True,1
76.76.10.2,CA,,True,1
76.76.10.1,CA,,True,1
212.187.166.54,GB,Rotherhithe,False,1
50.228.251.34,US,Houston,True,1
107.0.218.126,US,Philadelphia,False,1
50.233.102.227,US,McHenry,True,1
50.238.46.219,US,Angleton,False,1
73.57.23.229,US,Stuart,True,1
24.104.140.255,US,Manchester,True,1
193.106.192.6,PL,,False,0.98
85.198.185.26,UA,Dnipro,False,0.61
50.216.92.142,US,Seattle,False,1
76.104.155.196,US,Tacoma,True,1
98.38.222.51,US,Denver,True,1
50.201.178.29,US,Humble,True,1
50.223.22.178,US,,True,1
50.223.23.54,US,,False,1
50.217.25.225,US,Carrollton,True,1
75.150.197.154,US,Elkhart,False,1
181.205.41.210,CO,La Estrella,False,0.93
210.56.8.8,PK,Islamabad,True,1
63.85.173.71,US,,False,1
65.196.174.200,US,,False,1
63.118.166.101,US,,False,1
63.118.166.102,US,,False,1
65.196.174.202,US,,False,1
65.196.174.201,US,Derwood,False,1
63.85.173.70,US,Orlando,False,1
63.110.9.166,US,Westlake Village,False,1
63.110.9.167,US,Westlake Village,False,1
63.85.173.72,US,Orlando,False,1
63.118.166.103,US,,False,1
63.118.166.104,US,,False,1
63.118.166.105,US,,False,1
95.85.95.85,LU,,True,1
2.56.220.2,LU,,True,1
93.170.200.180,RU,Gorodishche,False,0.72
64.50.242.202,US,New York,True,1
62.82.138.5,ES,,False,1
103.79.74.1,IN,Tirupur,False,0.71
180.182.54.2,KR,,False,1
76.76.2.4,CA,,True,1
76.76.10.4,CA,,True,1
66.102.249.1,US,,False,0.79
217.151.251.10,DE,,True,1
41.158.1.162,GA,,False,1
41.158.1.163,GA,,False,1
193.135.143.35,CH,Niederhasli,True,1
193.135.143.33,CH,Niederhasli,True,1
193.135.143.29,CH,Niederhasli,True,1
193.135.143.39,CH,,True,1
193.135.143.37,CH,,True,1
193.135.143.31,CH,,True,1
193.135.143.25,CH,Niederhasli,True,1
193.135.143.27,CH,,True,1
193.135.143.1,CH,,True,1
193.135.143.7,CH,Niederhasli,True,1
193.135.143.9,CH,Niederhasli,True,0.99
193.135.143.11,CH,Niederhasli,True,1
193.135.143.13,CH,Niederhasli,True,1
193.135.143.15,CH,Niederhasli,True,1
193.135.143.19,CH,Niederhasli,True,1
193.135.143.21,CH,Niederhasli,True,1
193.135.143.23,CH,Niederhasli,True,1
181.129.138.114,CO,Manizales,False,0.9
45.90.28.129,US,,True,1
45.90.30.129,US,,True,1
35.155.221.215,US,Boardman,True,1
35.167.25.37,US,Boardman,True,1
31.133.58.169,UA,Donetsk,False,0.71
31.133.57.176,UA,Donetsk,False,0.75
111.220.96.54,AU,Melbourne,False,0.79
216.146.35.35,US,,True,1
9.9.9.9,US,Berkeley,True,1
91.201.255.46,RU,Tula,False,1
80.67.169.40,FR,,True,1
110.143.3.83,AU,Sydney,False,1
203.54.212.126,AU,Perth,True,1
110.145.178.74,AU,Sydney,False,1
203.38.225.13,AU,Melbourne,False,0.51
203.38.225.45,AU,Melbourne,False,1
120.150.56.245,AU,Hobart,False,1
1.0.138.130,TH,Nakhon Pathom,False,1
1.0.138.195,TH,Udon Thani,False,0.63
203.52.58.169,AU,Sydney,False,1
203.52.58.161,AU,Sydney,False,1
139.130.89.234,AU,Melbourne,True,0.68
203.39.3.133,AU,Perth,False,1
110.145.151.122,AU,Brisbane,False,0.93
212.12.17.124,RU,Yasnogorsk,False,0.81
96.250.208.198,US,Queens,True,1
46.147.193.104,RU,Tula,False,1
212.12.15.128,RU,Gretsovka,False,0.89
212.12.17.245,RU,Yasnogorsk,False,0.65
5.164.31.60,RU,Tula,False,1
201.148.17.110,MX,Mapastepec,True,1
212.12.14.122,RU,Tula,False,1
95.31.233.13,RU,Engel's,False,1
212.12.17.241,RU,Tula,False,0.26
5.164.28.186,RU,Tula,False,1
212.12.15.136,RU,Tula,False,1
212.12.27.184,RU,Tula,False,1
46.147.195.82,RU,Tula,False,1
201.148.17.116,MX,Mapastepec,True,1
87.244.9.194,RU,Moscow,False,1
87.244.9.206,RU,Moscow,False,0.96
212.12.31.188,RU,Tula,False,0.9
212.12.28.30,RU,Tula,False,0.97
89.107.198.139,RU,Tula,False,1
109.111.8.0,RU,Tula,False,0.79
212.12.28.233,RU,Tula,True,0.44
91.206.73.50,RU,,False,1
89.107.198.229,RU,Tula,False,0.27
5.164.31.108,RU,Tula,False,1
94.28.26.138,RU,,False,0.92
212.12.18.120,RU,Tula,False,1
212.12.14.54,RU,Tula,False,1
109.195.179.131,RU,Tula,False,1
212.12.18.113,RU,Tula,False,1
85.21.144.107,RU,,False,1
212.12.14.49,RU,Tula,False,1
212.12.31.122,RU,Tula,False,1
45.90.28.250,US,,True,1
1.0.194.216,TH,Krabi,False,1
1.0.198.174,TH,Bangkok,False,0.93
1.0.202.55,TH,Krabi,False,0.63
1.0.203.103,TH,Krabi,False,0.06999999999999999
1.0.203.108,TH,Krabi,False,1
1.0.203.116,TH,Thalang,False,1
1.0.203.136,TH,Krabi,False,0.96
1.0.216.26,TH,Phuket,False,1
1.0.218.15,TH,Songkhla,False,1
1.0.218.23,TH,Songkhla,False,1
1.0.218.50,TH,Songkhla,False,1
1.0.218.58,TH,Songkhla,False,1
1.1.136.8,TH,Udon Thani,False,1
1.1.138.48,TH,Khamcha-i,False,0.99
176.9.93.198,DE,,True,1
72.207.238.183,US,Baton Rouge,True,1
70.167.51.147,US,Wichita,False,0.95
72.198.188.68,US,National City,True,1
24.136.58.6,US,Gainesville,True,1
72.207.237.152,US,Baton Rouge,True,1
70.191.189.96,US,Destin,True,1
24.170.197.68,US,Gainesville,True,1
50.213.99.237,US,Sacramento,False,0.87
12.189.150.34,US,,True,0.96
12.235.201.167,US,Decatur,True,0.16
12.40.39.5,US,Kansas City,False,0.99
203.49.57.67,AU,Melbourne,False,0.66
37.120.172.191,DE,Wolfsburg,False,0.9400000000000001
202.153.214.22,AU,Sydney,False,0.65
203.129.31.67,AU,Cootamundra,False,1
159.196.126.153,AU,Sydney,True,0.72
119.17.138.116,AU,Melbourne,False,1
180.150.97.73,AU,Brisbane,False,0.8
202.153.220.97,AU,Warrnambool,True,0.58
180.150.105.246,AU,Brisbane,True,0.72
103.88.221.245,IN,Mumbai,False,1
24.116.92.101,US,Phoenix,False,0.89
198.71.117.66,US,Joplin,True,1
216.36.31.135,US,Mechanicsville,False,1
12.165.204.88,US,Goldsboro,True,1
12.186.153.128,US,,True,0.74
50.201.178.63,US,Flemington,True,1
50.219.55.167,US,,True,1
50.242.234.97,US,Baltimore,False,1
50.201.178.59,US,Flemington,True,1
73.206.234.153,US,Houston,True,1
50.222.131.40,US,Houston,True,1
96.64.201.177,US,San Francisco,False,1
67.166.30.234,US,Vail,True,1
50.229.154.179,US,Freedom,True,1
203.21.196.20,AU,,False,1
80.83.162.11,IT,Alberobello,False,1
197.155.92.21,KE,Nairobi,True,1
197.155.92.20,KE,Nairobi,True,1
92.60.50.40,SK,,True,1
156.154.70.7,US,,True,1
156.154.70.8,US,,True,1
156.154.70.10,US,,True,1
156.154.70.11,US,Chicago,True,1
139.130.2.22,AU,Adelaide,False,0.99
206.82.130.195,BF,,False,1
203.2.193.68,AU,,False,1
193.78.240.12,NL,,True,1
38.242.202.141,US,,True,1
216.106.88.3,US,Auxvasse,False,0.6900000000000001
103.121.228.5,MM,Yangon,True,1
144.91.64.224,DE,Nuremberg,True,1
114.114.114.114,CN,,False,0.81
45.90.28.189,US,,True,1
162.211.33.243,US,Saint Charles,False,1
162.211.33.242,US,Yorkville,False,0.95
216.130.230.95,US,Eagle Bridge,False,0.97
85.132.85.85,AZ,,True,1
12.229.148.195,US,Lake in the Hills,True,0.9
12.139.180.178,US,Atlanta,True,0.99
12.251.95.14,US,Santa Clarita,False,0.77
80.80.218.218,UZ,Tashkent,True,1
50.192.13.172,US,Mountville,False,0.42
12.199.217.34,US,North Miami Beach,False,0.39
12.97.174.103,US,Raleigh,True,1
12.165.204.94,US,,True,1
182.93.14.178,MO,Macao,False,0.37
202.175.45.2,MO,,False,1
67.187.17.182,US,Harrisonburg,True,1
50.215.49.37,US,Louisa,True,0.74
216.183.209.84,MV,Felidhoo,False,0.99
216.183.210.171,MV,Malé,True,0.33
12.97.174.104,US,Austin,True,1
69.229.5.233,US,Fort Lauderdale,False,0.68
99.99.99.193,US,Yukon,False,1
12.207.11.217,US,Chalmette,False,0.41000000000000003
12.239.75.226,US,Little Rock,True,0.61
45.19.183.181,US,San Antonio,False,1
80.80.81.81,NL,,True,0.98
103.142.34.34,BD,Dhaka,False,0.88
103.84.132.50,MV,,True,1
4.2.2.3,US,,False,0.95
24.119.106.138,US,Longview,False,1
205.171.3.66,US,Markesan,False,1
205.171.202.166,US,,False,1
185.184.222.222,DE,,True,1
204.97.212.10,US,,True,1
199.58.81.218,CA,,True,1
149.112.112.10,US,,True,1
193.58.251.251,RU,,False,1
103.155.26.28,ID,,True,0.64
181.129.57.146,CO,Medellín,False,0.72
147.50.47.189,TH,Bangkok,False,0.8
93.240.63.136,DE,Clausthal-Zellerfeld,False,0.79
181.115.184.186,BO,Cochabamba,False,0.66
213.135.146.212,RU,Tambov,False,0.71
50.196.170.172,US,Castro Valley,False,0.95
50.76.37.17,US,Concord,True,0.51
50.240.201.173,US,San Jose,False,0.22
50.77.209.154,US,Grand Blanc,False,0.92
50.247.134.226,US,Dyer,False,0.93
98.180.23.77,US,Gainesville,True,1
1.0.0.19,AU,Melbourne,True,1
31.7.37.37,TR,Antalya,True,1
207.70.138.246,US,Nacogdoches,False,0.72
12.51.21.245,US,Springfield,False,1
168.205.99.11,BO,,False,1
195.7.9.246,IQ,Mosul,True,1
1.1.1.2,AU,,True,1
103.47.134.195,ID,Jakarta,False,1
110.145.154.62,AU,Melbourne,False,1
114.114.115.115,CN,,False,1
114.130.5.5,BD,,True,1
114.130.5.6,BD,,True,1
149.112.112.11,US,,True,1
156.154.71.25,US,,True,1
159.196.131.128,AU,Sydney,True,0.76
161.200.96.9,TH,Bangkok,False,0.9400000000000001
203.253.64.1,KR,Yongin-si,True,1
185.93.180.131,DE,Frankfurt am Main,False,1
193.141.116.163,NL,,False,0.68
193.95.93.243,TN,,False,1
194.36.144.87,AT,,False,0.51
195.27.1.1,GB,,False,1
203.38.225.3,AU,Melbourne,False,0.77
205.171.3.65,US,Vassar,False,0.3
212.89.130.180,DE,Saarbrücken,False,0.08
213.95.149.187,DE,,True,0.06999999999999999
221.163.74.11,KR,Suwon,False,0.99
45.90.28.193,US,,True,1
50.238.53.122,US,Troy,True,1
50.238.53.126,US,Troy,True,1
52.24.103.199,US,Boardman,True,1
52.3.100.184,US,Ashburn,False,1
66.163.0.161,CA,Toronto,True,1
66.163.0.173,CA,Mississauga,True,1
66.242.160.5,US,,True,0.44
66.249.150.51,AG,St John's,False,0.81
77.88.8.8,RU,,True,1
9.9.9.12,CH,,True,1
94.140.14.141,CY,,True,1
94.140.15.15,CY,,True,1
193.58.204.59,NL,,False,1
193.89.248.1,DK,Copenhagen,False,0.61
195.186.4.110,CH,,True,0.15000000000000002
195.60.70.5,UA,Poltava,True,0.03
198.6.1.142,US,,False,1
200.95.144.4,MX,,False,1
205.151.222.250,CA,,False,1
206.253.33.130,US,Ulysses,False,1
206.51.143.55,US,Sidney,False,0.51
207.15.68.36,US,,False,0.65
207.248.57.10,MX,Monterrey,False,1
207.91.5.32,US,,True,1
209.130.136.2,US,New York,False,1
209.87.64.70,US,,False,1
210.180.98.69,KR,Pohang,False,0.78
211.115.194.2,KR,,True,1
212.211.132.4,DE,Wiehl,True,1
216.136.95.2,US,Houston,False,1
217.18.206.22,NO,Gravdal,True,1
62.149.128.2,IT,Arezzo,False,1
63.171.232.38,US,,False,0.26
63.171.232.39,US,,False,0.2
64.105.172.26,US,,False,1
64.105.199.74,US,,False,1
64.105.199.76,US,,False,0.08
64.105.202.138,US,,False,1
64.105.97.90,US,,False,0.06999999999999999
64.119.80.100,US,Brooklyn,False,1
66.28.0.61,US,White Plains,True,1
69.88.0.17,US,Kapolei,False,0.47000000000000003
77.241.112.23,ES,Conil de la Frontera,False,1
77.241.24.5,RU,Kursk,False,0.61
77.241.25.3,RU,Kursk,False,0.04
141.95.6.51,FR,,True,1
217.218.155.155,IR,,False,1
4.2.2.1,US,,False,0.97
4.2.2.2,US,,False,1
4.2.2.4,US,,False,0.97
131.255.137.57,PE,Lima,False,0.7
162.159.24.69,,,True,1
162.159.27.90,,,False,1
162.159.36.110,,,True,1
162.159.36.114,,,True,1
162.159.36.123,,,True,0.51
162.159.36.139,,,True,1
162.159.36.158,,,True,1
162.159.36.181,,,True,1
162.159.36.185,,,True,1
162.159.36.199,,,True,1
162.159.36.216,,,True,1
162.159.36.224,,,True,1
162.159.36.227,,,True,1
162.159.36.247,,,True,0.02
162.159.36.252,,,True,1
162.159.36.36,,,True,1
162.159.36.46,,,True,1
162.159.36.6,,,True,0.51
162.159.36.61,,,True,0.11
162.159.36.64,,,True,1
162.159.36.86,,,True,1
162.159.36.96,,,True,1
162.159.46.1,,,True,1
162.159.46.117,,,True,1
162.159.46.119,,,True,1
162.159.46.120,,,True,0.21000000000000002
162.159.46.147,,,True,1
162.159.46.166,,,True,1
162.159.46.172,,,True,1
162.159.46.177,,,True,1
162.159.46.18,,,True,1
162.159.46.197,,,True,1
162.159.46.202,,,True,0.12
162.159.46.214,,,True,1
162.159.46.218,,,True,0.26
162.159.46.23,,,True,0.28
162.159.46.28,,,True,1
162.159.46.38,,,True,0.15000000000000002
162.159.46.48,,,True,0.13
162.159.46.51,,,True,1
162.159.46.8,,,True,1
162.159.46.90,,,True,1
162.159.50.109,,,True,0.15000000000000002
162.159.50.115,,,True,1
162.159.50.116,,,True,1
162.159.50.119,,,True,1
162.159.50.129,,,True,1
162.159.50.133,,,True,0.99
162.159.50.138,,,True,1
162.159.50.140,,,True,1
162.159.50.144,,,True,0.13
162.159.50.152,,,True,0.09
162.159.50.157,,,True,1
162.159.50.18,,,True,1
162.159.50.187,,,True,1
162.159.50.221,,,True,1
162.159.50.233,,,True,1
162.159.50.239,,,True,1
162.159.50.248,,,True,1
162.159.50.27,,,True,1
162.159.50.3,,,True,0.06999999999999999
162.159.50.31,,,True,1
162.159.50.42,,,True,1
162.159.50.46,,,True,1
162.159.50.61,,,True,1
162.159.50.72,,,True,1
162.159.50.83,,,True,1
162.159.50.85,,,True,1
162.159.51.100,,,True,1
162.159.51.11,,,True,0.06999999999999999
162.159.51.116,,,True,1
162.159.51.117,,,True,1
162.159.51.140,,,True,1
162.159.51.196,,,True,1
162.159.51.205,,,True,1
162.159.51.224,,,True,1
162.159.51.229,,,True,1
162.159.51.23,,,True,1
162.159.51.239,,,True,1
162.159.51.248,,,True,1
162.159.51.69,,,True,1
162.159.51.80,,,True,1
162.159.51.90,,,True,1
162.159.51.95,,,True,1
162.159.51.97,,,True,1
162.159.56.1,,,True,1
162.159.56.111,,,True,1
162.159.56.118,,,True,1
162.159.56.128,,,True,1
162.159.56.132,,,True,1
162.159.56.149,,,True,1
162.159.56.156,,,True,1
162.159.56.158,,,True,1
162.159.56.16,,,True,1
162.159.56.173,,,True,1
162.159.56.21,,,True,1
162.159.56.217,,,True,1
162.159.56.223,,,True,1
162.159.56.228,,,True,0.02
162.159.56.253,,,True,1
162.159.56.255,,,True,1
162.159.56.39,,,True,1
162.159.56.43,,,True,0.95
162.159.56.64,,,True,1
162.159.56.66,,,True,0.08
162.159.56.75,,,True,1
162.159.56.78,,,True,1
162.159.56.8,,,True,1
162.159.56.84,,,True,1
162.159.57.1,,,True,1
162.159.57.109,,,True,0.06999999999999999
162.159.57.12,,,True,0.05
162.159.57.128,,,True,1
162.159.57.131,,,True,1
162.159.57.139,,,True,1
162.159.57.142,,,True,1
162.159.57.170,,,True,1
162.159.57.180,,,True,1
162.159.57.19,,,True,1
162.159.57.193,,,True,1
162.159.57.204,,,True,1
162.159.57.219,,,True,1
162.159.57.229,,,True,1
162.159.57.36,,,True,1
162.159.57.56,,,True,1
162.159.57.6,,,True,1
162.159.57.78,,,True,1
162.159.57.86,,,True,1
165.158.1.2,US,,False,1
172.64.36.0,US,,True,1
172.64.36.100,US,,True,1
172.64.36.101,US,,True,1
172.64.36.102,US,,True,1
172.64.36.103,US,,True,1
172.64.36.104,US,,True,1
172.64.36.107,US,,True,0.98
172.64.36.112,US,,True,1
172.64.36.114,US,,True,1
172.64.36.116,US,,True,1
172.64.36.117,US,,True,1
172.64.36.118,US,,True,0.98
172.64.36.119,US,,True,1
172.64.36.12,US,,True,1
172.64.36.120,US,,True,1
172.64.36.121,US,,True,1
172.64.36.123,US,,True,1
172.64.36.126,US,,True,1
172.64.36.127,US,,True,1
172.64.36.128,US,,True,1
172.64.36.129,US,,True,1
172.64.36.13,US,,True,0.87
172.64.36.131,US,,True,1
172.64.36.133,US,,True,0.18000000000000002
172.64.36.135,US,,True,0.02
172.64.36.136,US,,True,1
172.64.36.137,US,,True,1
172.64.36.138,US,,True,1
172.64.36.14,US,,True,1
172.64.36.140,US,,True,0.24000000000000002
172.64.36.143,US,,True,1
172.64.36.147,US,,True,1
172.64.36.148,US,,True,1
172.64.36.149,US,,True,0.18000000000000002
172.64.36.151,US,,True,1
172.64.36.152,US,,True,0.14
172.64.36.153,US,,True,0.51
172.64.36.155,US,,True,0.21000000000000002
172.64.36.157,US,,True,1
172.64.36.158,US,,True,0.21000000000000002
172.64.36.159,US,,True,0.26
172.64.36.16,US,,True,1
172.64.36.160,US,,True,1
172.64.36.161,US,,True,1
172.64.36.162,US,,True,1
172.64.36.163,US,,True,1
172.64.36.165,US,,True,1
172.64.36.166,US,,True,1
172.64.36.167,US,,True,1
172.64.36.168,US,,True,1
172.64.36.169,US,,True,1
172.64.36.17,US,,True,0.28
172.64.36.170,US,,True,0.16
172.64.36.172,US,,True,1
172.64.36.173,US,,True,0.26
172.64.36.174,US,,True,0.26
172.64.36.175,US,,True,1
172.64.36.176,US,,True,1
172.64.36.177,US,,True,1
172.64.36.178,US,,True,1
172.64.36.179,US,,True,1
172.64.36.182,US,,True,1
172.64.36.183,US,,True,1
172.64.36.184,US,,True,1
172.64.36.185,US,,True,1
172.64.36.186,US,,True,1
172.64.36.187,US,,True,1
172.64.36.188,US,,True,1
172.64.36.193,US,,True,1
172.64.36.196,US,,True,1
172.64.36.197,US,,True,1
172.64.36.198,US,,True,1
172.64.36.200,US,,True,1
172.64.36.201,US,,True,1
172.64.36.202,US,,True,1
172.64.36.203,US,,True,1
172.64.36.204,US,,True,1
172.64.36.205,US,,True,0.99
172.64.36.206,US,,True,1
172.64.36.207,US,,True,1
172.64.36.208,US,,True,1
172.64.36.209,US,,True,1
172.64.36.21,US,,True,1
172.64.36.210,US,,True,1
172.64.36.211,US,,True,0.09
172.64.36.213,US,,True,1
172.64.36.214,US,,True,0.98
172.64.36.215,US,,True,1
172.64.36.216,US,,True,1
172.64.36.217,US,,True,1
172.64.36.218,US,,True,1
172.64.36.219,US,,True,1
172.64.36.22,US,,True,1
172.64.36.221,US,,True,1
172.64.36.222,US,,True,0.98
172.64.36.223,US,,True,1
172.64.36.224,US,,True,1
172.64.36.225,US,,True,1
172.64.36.227,US,,True,1
172.64.36.229,US,,True,1
172.64.36.23,US,,True,1
172.64.36.230,US,,True,1
172.64.36.233,US,,True,1
172.64.36.235,US,,True,1
172.64.36.236,US,,True,1
172.64.36.239,US,,True,1
172.64.36.240,US,,True,1
172.64.36.241,US,,True,1
172.64.36.244,US,,True,1
172.64.36.245,US,,True,0.93
172.64.36.246,US,,True,1
172.64.36.247,US,,True,0.03
172.64.36.249,US,,True,1
172.64.36.25,US,,True,1
172.64.36.251,US,,True,1
172.64.36.252,US,,True,1
172.64.36.253,US,,True,1
172.64.36.254,US,,True,1
172.64.36.255,US,,True,1
172.64.36.26,US,,True,1
172.64.36.28,US,,True,1
172.64.36.29,US,,True,1
172.64.36.30,US,,True,1
172.64.36.31,US,,True,1
172.64.36.34,US,,True,1
172.64.36.35,US,,True,1
172.64.36.36,US,,True,1
172.64.36.38,US,,True,1
172.64.36.41,US,,True,1
172.64.36.42,US,,True,1
172.64.36.43,US,,True,1
172.64.36.44,US,,True,1
172.64.36.45,US,,True,1
172.64.36.46,US,,True,0.05
172.64.36.50,US,,True,1
172.64.36.51,US,,True,1
172.64.36.52,US,,True,1
172.64.36.53,US,,True,0.28
172.64.36.54,US,,True,1
172.64.36.56,US,,True,1
172.64.36.57,US,,True,1
172.64.36.58,US,,True,1
172.64.36.59,US,,True,1
172.64.36.6,US,,True,1
172.64.36.60,US,,True,1
172.64.36.61,US,,True,1
172.64.36.62,US,,True,1
172.64.36.63,US,,True,1
172.64.36.64,US,,True,0.34
172.64.36.65,US,,True,1
172.64.36.66,US,,True,1
172.64.36.67,US,,True,1
172.64.36.68,US,,True,1
172.64.36.69,US,,True,1
172.64.36.7,US,,True,1
172.64.36.70,US,,True,1
172.64.36.71,US,,True,1
172.64.36.72,US,,True,0.24000000000000002
172.64.36.74,US,,True,1
172.64.36.75,US,,True,1
172.64.36.76,US,,True,1
172.64.36.77,US,,True,1
172.64.36.78,US,,True,1
172.64.36.79,US,,True,1
172.64.36.8,US,,True,1
172.64.36.80,US,,True,1
172.64.36.81,US,,True,0.34
172.64.36.82,US,,True,1
172.64.36.83,US,,True,1
172.64.36.84,US,,True,1
172.64.36.85,US,,True,1
172.64.36.86,US,,True,1
172.64.36.87,US,,True,0.08
172.64.36.89,US,,True,1
172.64.36.9,US,,True,1
172.64.36.90,US,,True,1
172.64.36.91,US,,True,1
172.64.36.92,US,,True,1
172.64.36.93,US,,True,1
172.64.36.94,US,,True,1
172.64.36.95,US,,True,1
172.64.36.96,US,,True,1
172.64.36.97,US,,True,1
172.64.36.98,US,,True,1
172.64.36.99,US,,True,1
172.64.37.0,US,,True,1
172.64.37.1,US,,True,1
172.64.37.10,US,,True,1
172.64.37.100,US,,True,1
172.64.37.101,US,,True,1
172.64.37.102,US,,True,1
172.64.37.104,US,,True,1
172.64.37.105,US,,True,1
172.64.37.106,US,,True,0.51
172.64.37.107,US,,True,0.44
172.64.37.109,US,,True,1
172.64.37.110,US,,True,1
172.64.37.111,US,,True,1
172.64.37.112,US,,True,1
172.64.37.113,US,,True,1
172.64.37.114,US,,True,1
172.64.37.115,US,,True,1
172.64.37.116,US,,True,1
172.64.37.119,US,,True,1
172.64.37.12,US,,True,1
172.64.37.120,US,,True,1
172.64.37.122,US,,True,1
172.64.37.123,US,,True,1
172.64.37.124,US,,True,1
172.64.37.125,US,,True,1
172.64.37.126,US,,True,1
172.64.37.127,US,,True,0.17
172.64.37.128,US,,True,1
172.64.37.129,US,,True,1
172.64.37.130,US,,True,1
172.64.37.131,US,,True,0.09999999999999999
172.64.37.132,US,,True,1
172.64.37.133,US,,True,1
172.64.37.134,US,,True,1
172.64.37.136,US,,True,1
172.64.37.137,US,,True,1
172.64.37.138,US,,True,1
172.64.37.139,US,,True,1
172.64.37.14,US,,True,1
172.64.37.140,US,,True,1
172.64.37.141,US,,True,1
172.64.37.142,US,,True,0.06999999999999999
172.64.37.144,US,,True,1
172.64.37.145,US,,True,1
172.64.37.146,US,,True,1
172.64.37.147,US,,True,1
172.64.37.148,US,,True,1
172.64.37.149,US,,True,1
172.64.37.15,US,,True,1
172.64.37.150,US,,True,1
172.64.37.151,US,,True,1
172.64.37.152,US,,True,1
172.64.37.154,US,,True,1
172.64.37.155,US,,True,1
172.64.37.156,US,,True,0.51
172.64.37.157,US,,True,1
172.64.37.159,US,,True,1
172.64.37.16,US,,True,1
172.64.37.160,US,,True,1
172.64.37.161,US,,True,1
172.64.37.162,US,,True,1
172.64.37.163,US,,True,1
172.64.37.164,US,,True,1
172.64.37.165,US,,True,1
172.64.37.166,US,,True,1
172.64.37.167,US,,True,1
172.64.37.168,US,,True,1
172.64.37.169,US,,True,1
172.64.37.17,US,,True,1
172.64.37.170,US,,True,1
172.64.37.173,US,,True,1
172.64.37.175,US,,True,1
172.64.37.176,US,,True,1
172.64.37.177,US,,True,1
172.64.37.178,US,,True,1
172.64.37.179,US,,True,1
172.64.37.18,US,,True,1
172.64.37.180,US,,True,0.98
172.64.37.181,US,,True,1
172.64.37.182,US,,True,1
172.64.37.184,US,,True,1
172.64.37.185,US,,True,1
172.64.37.187,US,,True,1
172.64.37.188,US,,True,1
172.64.37.189,US,,True,1
172.64.37.19,US,,True,1
172.64.37.190,US,,True,1
172.64.37.191,US,,True,1
172.64.37.193,US,,True,1
172.64.37.194,US,,True,1
172.64.37.197,US,,True,1
172.64.37.198,US,,True,1
172.64.37.199,US,,True,1
172.64.37.2,US,,True,1
172.64.37.20,US,,True,0.51
172.64.37.200,US,,True,1
172.64.37.201,US,,True,1
172.64.37.203,US,,True,1
172.64.37.205,US,,True,1
172.64.37.206,US,,True,0.06999999999999999
172.64.37.207,US,,True,1
172.64.37.208,US,,True,1
172.64.37.209,US,,True,1
172.64.37.21,US,,True,1
172.64.37.210,US,,True,1
172.64.37.211,US,,True,1
172.64.37.212,US,,True,1
172.64.37.213,US,,True,1
172.64.37.214,US,,True,1
172.64.37.215,US,,True,1
172.64.37.216,US,,True,1
172.64.37.217,US,,True,1
172.64.37.218,US,,True,1
172.64.37.22,US,,True,1
172.64.37.220,US,,True,1
172.64.37.222,US,,True,1
172.64.37.223,US,,True,1
172.64.37.224,US,,True,1
172.64.37.225,US,,True,1
172.64.37.226,US,,True,1
172.64.37.227,US,,True,1
172.64.37.228,US,,True,1
172.64.37.230,US,,True,1
172.64.37.231,US,,True,1
172.64.37.232,US,,True,1
172.64.37.234,US,,True,1
172.64.37.235,US,,True,1
172.64.37.236,US,,True,1
172.64.37.237,US,,True,0.51
172.64.37.238,US,,True,1
172.64.37.239,US,,True,1
172.64.37.24,US,,True,1
172.64.37.240,US,,True,1
172.64.37.241,US,,True,1
172.64.37.242,US,,True,1
172.64.37.243,US,,True,1
172.64.37.246,US,,True,1
172.64.37.247,US,,True,1
172.64.37.248,US,,True,1
172.64.37.249,US,,True,1
172.64.37.250,US,,True,1
172.64.37.251,US,,True,0.51
172.64.37.252,US,,True,1
172.64.37.253,US,,True,1
172.64.37.27,US,,True,1
172.64.37.3,US,,True,1
172.64.37.30,US,,True,1
172.64.37.34,US,,True,1
172.64.37.35,US,,True,1
172.64.37.38,US,,True,1
172.64.37.39,US,,True,1
172.64.37.4,US,,True,1
172.64.37.40,US,,True,1
172.64.37.41,US,,True,1
172.64.37.42,US,,True,1
172.64.37.43,US,,True,1
172.64.37.44,US,,True,1
172.64.37.45,US,,True,1
172.64.37.46,US,,True,1
172.64.37.47,US,,True,1
172.64.37.48,US,,True,1
172.64.37.49,US,,True,1
172.64.37.5,US,,True,1
172.64.37.50,US,,True,1
172.64.37.51,US,,True,1
172.64.37.52,US,,True,1
172.64.37.53,US,,True,1
172.64.37.54,US,,True,1
172.64.37.55,US,,True,1
172.64.37.56,US,,True,1
172.64.37.57,US,,True,1
172.64.37.58,US,,True,1
172.64.37.6,US,,True,1
172.64.37.60,US,,True,1
172.64.37.61,US,,True,1
172.64.37.63,US,,True,1
172.64.37.64,US,,True,1
172.64.37.65,US,,True,1
172.64.37.66,US,,True,1
172.64.37.68,US,,True,1
172.64.37.69,US,,True,1
172.64.37.7,US,,True,1
172.64.37.70,US,,True,1
172.64.37.71,US,,True,1
172.64.37.72,US,,True,1
172.64.37.74,US,,True,1
172.64.37.75,US,,True,1
172.64.37.76,US,,True,1
172.64.37.78,US,,True,1
172.64.37.79,US,,True,1
172.64.37.8,US,,True,1
172.64.37.80,US,,True,1
172.64.37.82,US,,True,1
172.64.37.83,US,,True,1
172.64.37.84,US,,True,1
172.64.37.85,US,,True,1
172.64.37.86,US,,True,1
172.64.37.87,US,,True,1
172.64.37.88,US,,True,1
172.64.37.89,US,,True,1
172.64.37.9,US,,True,1
172.64.37.90,US,,True,1
172.64.37.91,US,,True,1
172.64.37.92,US,,True,1
172.64.37.93,US,,True,1
172.64.37.94,US,,True,1
172.64.37.95,US,,True,1
172.64.37.96,US,,True,1
172.64.37.97,US,,True,0.51
172.64.37.98,US,,True,1
172.64.46.103,US,,True,1
172.64.46.109,US,,True,1
172.64.46.111,US,,True,1
172.64.46.13,US,,True,1
172.64.46.142,US,,True,1
172.64.46.144,US,,True,1
172.64.46.159,US,,True,1
172.64.46.161,US,,True,1
172.64.46.17,US,,True,1
172.64.46.176,US,,True,1
172.64.46.177,US,,True,1
172.64.46.179,US,,True,1
172.64.46.192,US,,True,1
172.64.46.198,US,,True,1
172.64.46.202,US,,True,1
172.64.46.203,US,,True,1
172.64.46.213,US,,True,1
172.64.46.217,US,,True,1
172.64.46.22,US,,True,1
172.64.46.229,US,,True,1
172.64.46.230,US,,True,1
172.64.46.253,US,,True,1
172.64.46.255,US,,True,1
172.64.46.27,US,,True,1
172.64.46.28,US,,True,1
172.64.46.29,US,,True,1
172.64.46.34,US,,True,1
172.64.46.36,US,,True,1
172.64.46.42,US,,True,1
172.64.46.45,US,,True,1
172.64.46.52,US,,True,1
172.64.46.53,US,,True,1
172.64.46.62,US,,True,1
172.64.46.72,US,,True,1
172.64.46.84,US,,True,1
172.64.46.9,US,,True,1
172.64.47.102,US,,True,1
172.64.47.103,US,,True,1
172.64.47.104,US,,True,1
172.64.47.106,US,,True,1
172.64.47.107,US,,True,1
172.64.47.12,US,,True,1
172.64.47.133,US,,True,1
172.64.47.147,US,,True,1
172.64.47.158,US,,True,1
172.64.47.166,US,,True,1
172.64.47.167,US,,True,1
172.64.47.168,US,,True,1
172.64.47.170,US,,True,1
172.64.47.171,US,,True,1
172.64.47.174,US,,True,1
172.64.47.178,US,,True,1
172.64.47.18,US,,True,1
172.64.47.186,US,,True,1
172.64.47.195,US,,True,1
172.64.47.200,US,,True,1
172.64.47.204,US,,True,1
172.64.47.224,US,,True,1
172.64.47.227,US,,True,1
172.64.47.242,US,,True,1
172.64.47.254,US,,True,1
172.64.47.44,US,,True,1
172.64.47.45,US,,True,1
172.64.47.50,US,,True,1
172.64.47.85,US,,True,1
172.64.47.9,US,,True,1
172.64.47.91,US,,True,1
172.64.47.93,US,,True,1
181.224.160.153,CO,Santiago de Cali,False,0.09999999999999999
181.224.160.217,CO,Santiago de Cali,False,0.08
181.224.160.97,CO,Santiago de Cali,False,0.12
181.224.162.147,CO,Buenaventura,False,0.44
189.125.108.13,BR,,False,1
189.125.148.1,BR,,False,1
189.125.155.246,BR,,False,1
189.125.208.154,BR,Campinas,False,1
189.125.208.155,BR,Rio de Janeiro,False,1
189.125.94.220,BR,Praia Grande,False,1
190.216.111.247,EC,Quito,False,0.81
190.216.203.224,CO,Bogotá,False,1
190.216.204.79,CO,Bogotá,True,0.81
190.216.230.18,VE,Caracas,False,1
190.216.237.1,VE,Caracas,False,0.87
190.217.113.18,CO,Fundacion,False,1
190.217.113.186,CO,Florencia,False,1
190.217.25.34,CO,Envigado,False,1
190.217.29.177,CO,Ibague,False,1
190.217.6.145,VE,,False,1
193.240.207.200,GB,Luton,False,1
194.88.93.22,GB,Barking,False,1
199.77.206.122,VI,,False,1
200.0.194.78,AR,,False,1
200.12.130.66,CL,Nunoa,False,1
200.41.61.242,AR,Córdoba,False,1
200.41.61.248,AR,Córdoba,False,1
200.41.77.85,CO,Bogotá,False,1
200.41.78.212,CO,Florencia,False,1
200.55.59.101,AR,Lanus,False,1
200.55.59.102,AR,Lanus,False,1
201.234.119.52,PE,Lima,True,1
201.234.138.252,AR,Sampacho,False,1
201.234.231.130,AR,,False,1
201.234.53.209,PE,Lima,False,1
201.234.88.18,AR,Mendoza,False,1
204.199.106.78,CO,,False,1
204.199.122.250,CO,,False,1
204.199.129.38,CL,Puente Alto,False,1
204.199.157.70,EC,Quito,False,1
204.199.194.26,MX,Juanacatlan,False,1
204.199.204.133,MX,Lázaro Cárdenas,False,1
204.199.45.32,BR,São Paulo,True,1
204.199.6.86,AR,San Francisco,False,1
204.57.109.206,US,Cameron,False,1
206.169.117.104,US,Honolulu,False,1
206.169.200.135,US,Morenci,False,1
206.222.107.130,US,Haines City,False,1
206.222.107.34,US,Haines City,False,1
206.222.97.50,US,Haines City,False,1
206.222.97.82,US,Haines City,False,1
206.222.97.94,US,Haines City,False,1
206.57.41.222,US,Stow,False,1
206.80.23.5,US,South Pasadena,False,1
207.138.37.4,US,Santa Ana,False,1
207.138.38.22,US,Santa Ana,False,1
207.191.1.10,US,Sulphur,False,1
207.191.5.59,US,Sulphur,False,1
207.191.50.10,US,Lake Charles,False,1
208.48.253.142,US,Columbus,False,1
208.50.252.1,US,Farmington,False,1
208.51.60.215,US,,False,1
208.51.60.81,US,,False,1
209.136.132.135,US,Las Vegas,False,1
209.136.132.139,US,Las Vegas,False,1
209.136.8.87,US,Hope Hull,False,1
209.163.152.186,US,Houston,False,1
209.164.189.54,GU,Barrigada Village,False,1
209.164.189.55,GU,Barrigada Village,False,1
209.164.189.56,GU,Barrigada Village,False,1
209.200.100.150,US,,False,1
209.200.100.151,US,,False,1
209.200.100.200,US,,False,1
209.200.100.201,US,,False,1
209.200.100.202,US,,False,1
209.200.100.205,US,,False,1
209.200.100.207,US,,False,1
209.200.100.208,US,,False,1
209.200.100.209,US,,False,1
209.200.100.210,US,,False,1
209.200.100.217,US,,False,1
209.200.100.218,US,,False,1
209.200.100.219,US,,False,1
209.200.84.27,US,,False,1
209.203.82.54,US,Highland,True,1
209.234.196.12,US,Clovis,False,1
209.244.104.180,US,Spokane,False,1
209.244.104.181,US,Spokane,False,1
209.244.104.183,US,Spokane,False,1
209.244.104.184,US,Spokane,False,1
209.244.104.185,US,Spokane,False,1
209.244.104.186,US,Spokane,False,1
209.244.104.187,US,Spokane,False,1
209.244.104.188,US,Spokane,False,1
209.244.104.189,US,Spokane,False,1
209.247.118.9,US,Houston,False,1
212.187.140.53,GB,Runcorn,False,1
212.187.156.31,GB,Rickmansworth,False,1
212.3.255.178,BE,Vilvoorde,False,1
212.72.40.246,NL,Schiphol,False,1
212.73.221.104,FR,Ecquevilly,False,1
212.73.221.107,FR,Ecquevilly,False,1
216.119.106.10,US,,False,1
216.136.33.82,US,Jonesborough,False,1
216.136.82.113,US,Dallas,False,1
216.136.95.19,US,Houston,False,1
216.136.95.3,US,Houston,False,1
216.136.95.34,US,Houston,False,1
216.136.95.35,US,Houston,False,1
216.136.95.67,US,Houston,False,1
216.136.95.82,US,Houston,False,1
216.136.95.83,US,Houston,False,1
216.202.247.10,US,,False,1
216.253.18.136,US,Mobile,False,1
216.54.204.186,US,Glen Oaks,False,1
216.54.215.32,US,Arlington,False,1
216.55.100.220,CA,,False,1
216.55.99.220,CA,,False,1
217.163.100.200,GB,Wilmslow,False,1
217.163.121.254,GB,Harlow,False,1
217.163.136.1,GB,London,False,1
24.56.100.20,US,,False,1
24.56.102.20,US,,False,1
4.0.0.53,US,,False,1
4.1.226.201,US,Antioch,False,1
4.1.226.202,US,Antioch,False,1
4.1.37.10,US,Slocomb,False,1
4.1.67.145,US,Indianapolis,False,1
4.1.67.166,US,Indianapolis,False,1
4.14.161.87,US,Louisville,False,1
4.14.199.129,US,Las Vegas,False,1
4.16.3.86,US,Seattle,False,1
4.16.64.169,US,Rising Sun,False,1
4.2.163.211,US,Denver,True,1
4.26.50.74,US,Jacksonville,False,1
4.28.166.10,US,Newberry,False,1
4.28.35.165,US,Houston,False,1
4.30.165.222,US,West Des Moines,False,1
4.31.189.137,US,Peoria,False,1
4.34.37.186,US,Denver,False,1
4.34.90.218,US,Los Angeles,False,1
4.4.186.116,MX,Mexicali,True,1
4.4.211.46,US,Overland Park,False,1
4.4.26.135,US,Oshkosh,False,1
4.4.53.164,US,Houston,True,1
4.53.133.131,US,Canoga Park,False,1
4.53.7.42,US,Parker,True,1
4.59.232.194,CA,Burnaby,False,1
4.59.81.39,US,Naples,False,1
4.7.220.241,US,Minneapolis,False,1
4.7.75.194,US,Boise,True,1
4.7.98.154,US,Santa Ana,False,1
4.78.231.235,US,Fort Worth,False,1
4.79.132.219,US,,False,1
4.79.140.163,US,,False,1
4.79.216.6,US,Berkeley,False,1
4.79.241.44,US,Peoria,False,1
4.79.241.45,US,Peoria,False,1
4.79.244.118,US,Peoria,False,1
45.185.17.33,VE,,False,1
50.58.111.74,US,Wellston,False,1
50.59.195.146,US,Sorrento,False,1
50.59.195.147,US,Sorrento,False,1
50.59.195.149,US,Sorrento,False,1
62.67.58.165,DE,Giesen,False,1
63.134.209.160,US,,False,1
63.211.67.251,US,,False,1
63.232.89.67,US,North Liberty,False,1
64.129.104.46,US,Little Rock,False,1
64.129.67.113,US,Monument,False,1
64.132.102.138,US,Wake Forest,False,1
64.154.28.51,US,Austin,False,1
64.156.223.254,US,Yuma,False,1
64.157.61.123,US,Oxford,False,1
64.192.69.159,US,,False,1
64.208.105.1,US,Fremont,False,1
64.210.41.182,BB,Bridgetown,False,1
64.210.72.157,US,Roslyn Heights,False,1
64.215.98.148,US,,False,1
64.215.98.149,US,,False,1
64.76.47.162,AR,Zárate,False,1
64.76.47.163,AR,Zárate,False,1
64.76.47.164,AR,Zárate,False,1
64.76.47.165,AR,Zárate,False,1
65.56.156.242,US,Las Vegas,False,1
65.56.156.249,US,Las Vegas,False,1
66.162.142.38,US,Spokane,False,1
66.162.85.79,US,Beaumont,False,0.27
66.170.134.30,US,Reisterstown,False,0.97
66.193.38.100,US,Spokane,False,1
66.243.10.180,US,,False,1
67.199.112.67,US,,False,0.68
67.199.46.101,US,,False,1
67.199.6.158,US,,False,0.4
67.199.6.216,US,,False,0.15
67.199.6.217,US,,False,0.17
67.199.6.219,US,,False,0.17
67.199.6.222,US,,False,0.09
67.199.63.139,US,,False,1
67.30.143.54,US,Orlando,False,1
67.72.109.56,US,Jupiter,True,0.53
67.99.200.1,US,,False,1
72.236.151.44,US,Lehigh Acres,False,1
72.237.206.30,US,Landenberg,False,1
72.237.206.37,US,Landenberg,False,1
72.237.212.20,US,Buffalo,False,1
72.237.212.21,US,Buffalo,False,1
74.202.142.162,US,Monroe,False,1
74.203.137.50,US,Wesley Chapel,False,1
74.203.137.51,US,Wesley Chapel,False,1
74.203.92.247,US,Columbus,False,1
75.103.111.206,US,,False,1
75.103.120.118,US,,False,1
75.103.120.54,US,,False,1
75.103.120.55,US,,False,1
75.103.70.193,US,,False,1
75.103.70.213,US,,False,1
75.103.70.36,US,,False,1
75.103.70.84,US,,False,1
75.103.71.19,US,,False,1
75.103.71.213,US,,False,1
75.103.71.218,US,,False,1
75.103.71.36,US,,False,1
75.103.95.10,US,,False,1
75.103.95.11,US,,False,1
75.103.95.12,US,,False,1
75.103.95.14,US,,False,1
75.103.95.5,US,,False,1
75.103.95.7,US,,False,1
75.103.95.8,US,,False,1
75.98.227.194,US,,False,1
75.98.227.195,US,,False,1
75.98.227.198,US,,False,1
75.98.227.68,US,,False,1
8.14.62.67,US,Naples,False,1
8.14.63.90,US,Bonita Springs,False,1
8.17.126.157,US,Jacksonville,True,0.9400000000000001
8.17.30.61,US,Miami,False,1
8.17.40.101,US,Miami,False,0.55
8.17.40.108,US,Miami,False,0.75
8.17.96.74,US,Miami,False,0.79
8.18.226.210,US,Naples,False,1
8.20.204.150,US,Miami,False,0.85
8.20.205.196,US,Miami,False,1
8.20.205.198,US,Miami,False,0.19
8.20.207.155,US,Miami,False,0.76
8.20.207.156,US,Miami,False,0.34
8.20.247.103,US,Charlotte,False,0.83
8.20.247.11,US,,False,0.93
8.20.247.120,US,Charlotte,True,0.61
8.20.247.121,US,Charlotte,True,0.5700000000000001
8.20.247.125,US,Charlotte,True,0.68
8.20.247.126,US,Charlotte,True,0.71
8.20.247.127,US,Charlotte,True,0.95
8.20.247.13,US,,False,0.98
8.20.247.132,US,,False,0.91
8.20.247.138,US,,False,1
8.20.247.139,US,,False,1
8.20.247.140,US,,True,1
8.20.247.141,US,,True,1
8.20.247.142,US,,True,1
8.20.247.146,US,Charlotte,False,1
8.20.247.148,US,Charlotte,False,1
8.20.247.149,US,Charlotte,False,1
8.20.247.150,US,Charlotte,True,1
8.20.247.154,US,Charlotte,True,1
8.20.247.155,US,Charlotte,True,1
8.20.247.157,US,Charlotte,True,1
8.20.247.159,US,Charlotte,True,1
8.20.247.16,US,Charlotte,True,1
8.20.247.163,US,Charlotte,True,1
8.20.247.164,US,Charlotte,True,1
8.20.247.165,US,Charlotte,True,1
8.20.247.166,US,Charlotte,False,1
8.20.247.168,US,Charlotte,False,1
8.20.247.17,US,Charlotte,True,1
8.20.247.170,US,Charlotte,True,1
8.20.247.172,US,Charlotte,True,1
8.20.247.174,US,Charlotte,True,1
8.20.247.175,US,Charlotte,False,1
8.20.247.178,US,Charlotte,True,1
8.20.247.179,US,Charlotte,True,1
8.20.247.18,US,Charlotte,True,1
8.20.247.182,US,Charlotte,True,1
8.20.247.183,US,Charlotte,False,1
8.20.247.188,US,Charlotte,False,1
8.20.247.189,US,Charlotte,False,1
8.20.247.19,US,Charlotte,True,1
8.20.247.191,US,Charlotte,True,1
8.20.247.192,US,Charlotte,True,1
8.20.247.193,US,Charlotte,True,1
8.20.247.196,US,Charlotte,False,1
8.20.247.199,US,Charlotte,True,1
8.20.247.201,US,Charlotte,False,1
8.20.247.205,US,Charlotte,False,1
8.20.247.207,US,Charlotte,False,1
8.20.247.21,US,Charlotte,False,1
8.20.247.210,US,Charlotte,True,1
8.20.247.211,US,Charlotte,True,1
8.20.247.212,US,Charlotte,True,1
8.20.247.213,US,Charlotte,False,1
8.20.247.214,US,Charlotte,True,1
8.20.247.215,US,Charlotte,True,1
8.20.247.218,US,Charlotte,True,1
8.20.247.219,US,Charlotte,True,1
8.20.247.220,US,Charlotte,True,1
8.20.247.221,US,Charlotte,True,1
8.20.247.223,US,Charlotte,True,1
8.20.247.224,US,Charlotte,True,1
8.20.247.225,US,Charlotte,True,1
8.20.247.227,US,Charlotte,True,1
8.20.247.23,US,Charlotte,True,1
8.20.247.230,US,Charlotte,False,1
8.20.247.231,US,Charlotte,False,1
8.20.247.233,US,Charlotte,True,1
8.20.247.234,US,Charlotte,False,1
8.20.247.235,US,Charlotte,False,1
8.20.247.236,US,Charlotte,True,1
8.20.247.238,US,Charlotte,True,1
8.20.247.239,US,Charlotte,False,1
8.20.247.240,US,Charlotte,False,1
8.20.247.241,US,Charlotte,True,1
8.20.247.242,US,Charlotte,True,1
8.20.247.245,US,Charlotte,True,1
8.20.247.247,US,Charlotte,True,1
8.20.247.249,US,Charlotte,True,1
8.20.247.25,US,Charlotte,True,1
8.20.247.250,US,Charlotte,False,1
8.20.247.254,US,Charlotte,True,1
8.20.247.26,US,Charlotte,False,1
8.20.247.3,US,Charlotte,False,1
8.20.247.30,US,Charlotte,True,1
8.20.247.31,US,Charlotte,True,1
8.20.247.33,US,Charlotte,False,1
8.20.247.34,US,Charlotte,True,1
8.20.247.35,US,Charlotte,True,1
8.20.247.36,US,Charlotte,True,1
8.20.247.37,US,Charlotte,True,1
8.20.247.38,US,Charlotte,True,1
8.20.247.39,US,Charlotte,True,1
8.20.247.4,US,Charlotte,True,1
8.20.247.42,US,Charlotte,False,1
8.20.247.43,US,Charlotte,True,1
8.20.247.45,US,Charlotte,True,1
8.20.247.47,US,Charlotte,False,1
8.20.247.49,US,Charlotte,True,1
8.20.247.5,US,Charlotte,True,1
8.20.247.52,US,Charlotte,True,1
8.20.247.53,US,Charlotte,True,1
8.20.247.54,US,Charlotte,True,1
8.20.247.55,US,Charlotte,True,1
8.20.247.56,US,Charlotte,True,1
8.20.247.58,US,Charlotte,True,1
8.20.247.60,US,Charlotte,True,1
8.20.247.61,US,Charlotte,True,1
8.20.247.63,US,Charlotte,False,1
8.20.247.65,US,Charlotte,True,1
8.20.247.66,US,Charlotte,False,1
8.20.247.67,US,Charlotte,True,1
8.20.247.69,US,Charlotte,True,1
8.20.247.7,US,Charlotte,True,1
8.20.247.70,US,Charlotte,True,1
8.20.247.71,US,Charlotte,False,1
8.20.247.72,US,Charlotte,False,1
8.20.247.74,US,Charlotte,True,1
8.20.247.76,US,Charlotte,True,1
8.20.247.77,US,Charlotte,True,1
8.20.247.78,US,Charlotte,True,1
8.20.247.79,US,Charlotte,True,1
8.20.247.80,US,Charlotte,True,1
8.20.247.81,US,Charlotte,True,1
8.20.247.85,US,Charlotte,True,1
8.20.247.86,US,Charlotte,False,1
8.20.247.88,US,Charlotte,True,1
8.20.247.89,US,Charlotte,True,1
8.20.247.9,US,Charlotte,True,1
8.20.247.90,US,Charlotte,False,1
8.20.247.91,US,Charlotte,True,1
8.20.247.92,US,Charlotte,True,1
8.20.247.93,US,Charlotte,False,1
8.20.247.94,US,Charlotte,True,1
8.20.247.95,US,Charlotte,False,1
8.20.247.97,US,Charlotte,True,1
8.20.247.98,US,Charlotte,False,1
8.20.37.35,US,Jupiter,False,1
8.20.37.37,US,Jupiter,False,1
8.224.34.74,US,Buffalo,False,1
8.224.99.1,US,Montgomeryville,False,1
8.225.241.243,US,Lancaster,False,1
8.242.214.61,CO,Santiago de Cali,False,1
8.242.29.210,BR,,False,1
8.243.113.189,PE,Lima,False,1
8.243.126.105,PE,Lima,True,1
8.243.126.108,PE,Lima,True,1
8.243.126.120,PE,Lima,True,1
8.243.126.122,PE,Lima,True,1
8.243.126.123,PE,Lima,True,1
8.243.126.126,PE,Lima,True,1
8.243.126.127,PE,Lima,True,1
8.243.126.18,PE,Lima,True,1
8.243.126.19,PE,Lima,True,1
8.243.126.20,PE,Lima,True,1
8.243.126.21,PE,Lima,True,1
8.243.126.23,PE,Lima,True,1
8.243.126.25,PE,Lima,True,1
8.243.126.26,PE,Lima,True,1
8.243.126.27,PE,Lima,True,1
8.243.126.28,PE,Lima,True,1
8.243.126.29,PE,Lima,True,1
8.243.126.30,PE,Lima,True,1
8.243.126.66,PE,Lima,True,1
8.243.126.69,PE,Lima,True,1
8.243.126.70,PE,Lima,True,1
8.243.126.71,PE,Lima,True,1
8.243.126.72,PE,Lima,True,1
8.243.126.73,PE,Lima,True,1
8.243.126.77,PE,Lima,True,1
8.25.185.131,US,Fort Myers,False,1
8.26.56.100,US,Marysville,False,1
8.26.56.101,US,Marysville,True,1
8.26.56.102,US,Marysville,True,1
8.26.56.103,US,Marysville,True,1
8.26.56.104,US,Marysville,True,1
8.26.56.105,US,Marysville,False,1
8.26.56.106,US,Marysville,False,1
8.26.56.107,US,Marysville,True,1
8.26.56.109,US,Marysville,False,1
8.26.56.11,US,Marysville,False,1
8.26.56.110,US,Marysville,True,1
8.26.56.111,US,Marysville,False,1
8.26.56.112,US,Marysville,True,1
8.26.56.113,US,Marysville,True,1
8.26.56.114,US,Marysville,True,1
8.26.56.115,US,Marysville,False,1
8.26.56.116,US,Marysville,True,1
8.26.56.118,US,Marysville,True,1
8.26.56.119,US,Marysville,True,1
8.26.56.12,US,Marysville,True,1
8.26.56.122,US,Marysville,True,1
8.26.56.123,US,Marysville,False,1
8.26.56.124,US,Marysville,True,1
8.26.56.125,US,Marysville,True,1
8.26.56.126,US,Marysville,True,1
8.26.56.127,US,Marysville,True,1
8.26.56.129,US,Marysville,True,1
8.26.56.13,US,Marysville,False,1
8.26.56.131,US,Marysville,True,1
8.26.56.133,US,Marysville,True,1
8.26.56.135,US,Marysville,True,1
8.26.56.136,US,Marysville,True,1
8.26.56.137,US,Marysville,True,1
8.26.56.139,US,Marysville,True,1
8.26.56.141,US,Marysville,True,1
8.26.56.142,US,Marysville,False,1
8.26.56.143,US,Marysville,False,1
8.26.56.144,US,Marysville,False,1
8.26.56.146,US,Marysville,True,1
8.26.56.147,US,Marysville,True,1
8.26.56.148,US,Marysville,True,1
8.26.56.15,US,Marysville,True,1
8.26.56.151,US,Marysville,False,1
8.26.56.153,US,Marysville,True,1
8.26.56.154,US,Marysville,False,1
8.26.56.155,US,Marysville,True,1
8.26.56.156,US,Marysville,True,1
8.26.56.157,US,Marysville,True,1
8.26.56.158,US,Marysville,True,1
8.26.56.159,US,Marysville,True,1
8.26.56.16,US,Marysville,True,1
8.26.56.160,US,Marysville,True,1
8.26.56.161,US,Marysville,True,1
8.26.56.162,US,Marysville,True,1
8.26.56.163,US,Marysville,False,1
8.26.56.167,US,Marysville,False,1
8.26.56.168,US,Marysville,True,1
8.26.56.169,US,Marysville,True,1
8.26.56.17,US,Marysville,True,1
8.26.56.171,US,Marysville,True,1
8.26.56.173,US,Marysville,True,1
8.26.56.174,US,Marysville,True,1
8.26.56.175,US,Marysville,True,1
8.26.56.178,US,Marysville,True,1
8.26.56.18,US,Marysville,True,1
8.26.56.182,US,Marysville,True,1
8.26.56.183,US,Marysville,False,1
8.26.56.186,US,Marysville,True,1
8.26.56.19,US,Marysville,False,1
8.26.56.194,US,Marysville,False,1
8.26.56.195,US,Marysville,True,1
8.26.56.196,US,Marysville,True,1
8.26.56.197,US,Marysville,True,1
8.26.56.198,US,Marysville,False,1
8.26.56.20,US,Marysville,True,1
8.26.56.201,US,Marysville,True,1
8.26.56.202,US,Marysville,True,1
8.26.56.203,US,Marysville,True,1
8.26.56.204,US,Marysville,True,1
8.26.56.205,US,Marysville,True,1
8.26.56.206,US,Marysville,True,1
8.26.56.209,US,Marysville,True,1
8.26.56.210,US,Marysville,True,1
8.26.56.211,US,Marysville,False,1
8.26.56.212,US,Marysville,True,1
8.26.56.213,US,Marysville,False,1
8.26.56.214,US,Marysville,True,1
8.26.56.216,US,Marysville,True,1
8.26.56.217,US,Marysville,True,1
8.26.56.219,US,Marysville,True,1
8.26.56.22,US,Marysville,True,1
8.26.56.221,US,Marysville,True,1
8.26.56.222,US,Marysville,False,1
8.26.56.223,US,Marysville,True,1
8.26.56.226,US,Marysville,False,1
8.26.56.227,US,Marysville,True,1
8.26.56.228,US,Marysville,True,1
8.26.56.23,US,Marysville,False,1
8.26.56.230,US,Marysville,True,1
8.26.56.232,US,Marysville,True,1
8.26.56.233,US,Marysville,True,1
8.26.56.236,US,Marysville,False,1
8.26.56.237,US,Marysville,True,1
8.26.56.238,US,Marysville,True,1
8.26.56.24,US,Marysville,True,1
8.26.56.240,US,Marysville,True,1
8.26.56.241,US,Marysville,False,1
8.26.56.243,US,Marysville,True,1
8.26.56.245,US,Marysville,True,1
8.26.56.246,US,Marysville,True,1
8.26.56.247,US,Marysville,False,1
8.26.56.249,US,Marysville,True,1
8.26.56.25,US,Marysville,True,1
8.26.56.250,US,Marysville,True,1
8.26.56.252,US,Marysville,False,1
8.26.56.255,US,Marysville,False,1
8.26.56.26,US,Marysville,True,1
8.26.56.27,US,Marysville,False,1
8.26.56.28,US,Marysville,True,1
8.26.56.3,US,Marysville,True,1
8.26.56.30,US,Marysville,True,1
8.26.56.31,US,Marysville,True,1
8.26.56.33,US,Marysville,True,1
8.26.56.35,US,Marysville,False,1
8.26.56.36,US,Marysville,True,1
8.26.56.38,US,Marysville,False,1
8.26.56.39,US,Marysville,True,1
8.26.56.40,US,Marysville,False,1
8.26.56.41,US,Marysville,True,1
8.26.56.42,US,Marysville,True,1
8.26.56.44,US,Marysville,True,1
8.26.56.45,US,Marysville,False,1
8.26.56.46,US,Marysville,True,1
8.26.56.51,US,Marysville,True,1
8.26.56.52,US,Marysville,True,1
8.26.56.53,US,Marysville,True,1
8.26.56.54,US,Marysville,True,1
8.26.56.57,US,Marysville,True,1
8.26.56.58,US,Marysville,True,1
8.26.56.6,US,Marysville,True,1
8.26.56.62,US,Marysville,True,1
8.26.56.63,US,Marysville,True,1
8.26.56.64,US,Marysville,True,1
8.26.56.65,US,Marysville,True,1
8.26.56.68,US,Marysville,True,1
8.26.56.7,US,Marysville,True,1
8.26.56.70,US,Marysville,True,1
8.26.56.72,US,Marysville,True,1
8.26.56.74,US,Marysville,True,1
8.26.56.77,US,Marysville,True,1
8.26.56.78,US,Marysville,True,1
8.26.56.83,US,Marysville,True,1
8.26.56.84,US,Marysville,True,1
8.26.56.85,US,Marysville,True,1
8.26.56.86,US,Marysville,True,1
8.26.56.87,US,Marysville,True,1
8.26.56.88,US,Marysville,True,1
8.26.56.90,US,Marysville,False,1
8.26.56.92,US,Marysville,False,1
8.26.56.93,US,Marysville,True,1
8.26.56.94,US,Marysville,True,1
8.26.56.95,US,Marysville,True,1
8.26.56.96,US,Marysville,True,1
8.26.56.97,US,Marysville,False,1
8.26.56.99,US,Marysville,False,1
8.27.215.70,US,Clarksville,False,1
8.28.109.11,US,Cape Coral,False,1
8.28.109.122,US,Cape Coral,False,1
8.28.109.226,US,Bradenton,False,1
8.28.109.252,US,Bradenton,False,1
8.28.109.4,US,Cape Coral,False,1
8.28.109.74,US,Cape Coral,False,1
8.28.109.75,US,Cape Coral,False,1
8.28.109.84,US,Cape Coral,False,1
8.29.3.138,US,North Miami Beach,False,1
8.29.3.236,US,North Miami Beach,False,1
8.29.3.238,US,North Miami Beach,False,1
8.29.3.36,US,Deerfield Beach,False,1
8.29.3.37,US,Deerfield Beach,False,1
8.29.3.75,US,Deerfield Beach,False,1
8.29.3.76,US,Deerfield Beach,False,1
8.29.64.122,US,Miami,False,1
8.30.36.94,US,Miami,False,1
8.34.34.101,US,,False,1
8.34.34.103,US,,False,1
8.34.34.11,US,,False,1
8.34.34.34,US,,False,1
8.35.35.10,US,,False,1
8.35.35.101,US,,False,1
8.35.35.103,US,,False,1
8.35.35.35,US,,False,1
8.36.139.1,US,Petersham,False,1
8.36.139.129,US,Petersham,False,1
8.36.152.1,US,Petersham,False,1
8.36.160.49,US,,False,1
8.36.63.5,US,Dayton,False,1
8.38.89.46,US,Fort Lauderdale,False,1
8.40.240.36,US,North Little Rock,False,1
8.41.17.84,US,Inman,True,1
8.42.68.21,US,Boulder,False,1
8.43.56.34,US,Tulsa,False,1
8.43.56.38,US,Tulsa,False,1
8.8.50.1,US,Cumberland,False,1
97.65.124.6,US,,False,1
64.233.207.16,US,Panama City Beach,True,0.98
200.87.100.10,BO,,False,1
217.160.70.42,DE,,True,1
195.186.1.109,CH,,True,1
155.254.21.250,US,Charlotte,True,1
167.114.84.132,CA,Montreal,True,1
103.14.26.190,MX,Mexico City,True,1
37.120.217.75,DE,Berlin,True,1
177.54.145.131,BR,São Paulo,True,1
198.7.58.227,US,Great Falls,True,1
173.234.56.115,US,Lombard,True,1
165.231.253.163,IN,New Delhi,True,1
178.175.129.16,US,New Castle,True,1
91.219.215.227,NO,Oslo,True,1
91.205.230.224,PT,Lisbon,True,1
146.70.66.227,RO,,True,1
64.120.5.251,US,Seattle,True,1
128.127.104.108,SE,Stockholm,True,1
146.70.31.43,JP,Tokyo,True,1
68.183.253.200,GB,London,True,0.97
199.45.32.37,US,,False,1
199.45.32.38,US,Hudson,False,1
199.45.32.40,US,,False,1
1.0.138.176,TH,Udon Thani,False,1
1.0.166.233,TH,Phuket,False,1
1.0.170.33,TH,Don Tum,False,1
1.0.170.39,TH,Don Tum,False,0.97
1.0.170.83,TH,Nakhon Pathom,False,1
1.0.170.91,TH,Don Tum,False,0.99
1.0.170.113,TH,Don Tum,False,0.9400000000000001
1.0.170.234,TH,Nong Khae,False,1
1.0.170.243,TH,Don Tum,False,1
1.0.171.24,TH,Don Tum,False,0.99
1.0.202.216,TH,Sawi,False,0.99
1.0.203.44,TH,Sawi,False,0.96
1.0.203.107,TH,Krabi,False,1
1.0.216.30,TH,Chiang Mai,False,1
1.0.216.56,TH,Chiang Mai,False,1
1.0.216.155,TH,Chiang Mai,False,1
1.0.216.220,TH,Chiang Mai,False,1
1.0.218.57,TH,Chiang Mai,False,1
170.56.58.53,US,,True,1
195.99.66.220,GB,,True,1
198.60.22.2,US,,True,1
202.138.120.6,IN,,False,0.34
202.248.20.133,JP,Ageo,False,1
203.133.1.8,TW,,True,1
203.2.193.67,AU,,True,1
207.17.190.5,US,,False,0.96
209.216.160.131,US,Mitchell,False,1
217.144.6.6,JO,,False,0.9400000000000001
62.40.32.34,IE,Swords,False,0.83
79.141.83.250,CH,Morges,True,1
45.90.30.1,US,,True,1
45.90.28.1,US,,True,1
103.151.56.56,VN,,True,1
14.225.24.83,VN,,True,0.99
14.225.24.84,VN,,True,0.97
45.90.28.10,US,,True,1
45.90.30.10,US,,True,1
45.90.28.11,US,,True,1
45.90.30.11,US,,True,1
45.90.28.12,US,,True,1
45.90.30.12,US,,True,1
45.90.28.13,US,,True,1
45.90.30.13,US,,True,1
45.90.28.14,US,,True,1
45.90.30.14,US,,True,1
45.90.28.15,US,,True,1
45.90.30.15,US,,True,1
45.90.28.16,US,,True,1
45.90.30.16,US,,True,1
45.90.28.17,US,,True,1
45.90.30.17,US,,True,1
45.90.28.18,US,,True,1
45.90.30.18,US,,True,1
45.90.28.19,US,,True,1
45.90.30.19,US,,True,1
45.90.28.20,US,,True,1
45.90.30.20,US,,True,1
45.90.28.21,US,,True,1
45.90.30.21,US,,True,1
45.90.28.22,US,,True,1
45.90.30.22,US,,True,1
45.90.28.23,US,,True,1
45.90.30.23,US,,True,1
45.90.28.24,US,,True,1
45.90.30.24,US,,True,1
45.90.28.25,US,,True,1
45.90.30.25,US,,True,1
45.90.28.26,US,,True,1
45.90.30.26,US,,True,1
45.90.28.27,US,,True,1
45.90.30.27,US,,True,1
45.90.28.28,US,,True,1
45.90.30.28,US,,True,1
45.90.28.29,US,,True,1
45.90.30.29,US,,True,1
45.90.28.30,US,,True,0.13
45.90.30.30,US,,True,1
14.225.232.26,VN,Ho Chi Minh City,True,1
123.30.187.240,VN,Hanoi,True,0.92
103.48.78.156,VN,,False,1
103.48.78.157,VN,,False,1
203.113.172.91,VN,,False,1
95.215.19.53,FI,,True,1
202.6.96.4,VN,,False,1
222.255.237.207,VN,Hanoi,True,1
103.137.156.3,VN,,False,0.97
202.6.96.3,VN,,False,0.9
103.196.16.3,VN,,False,1
202.78.224.129,VN,Ho Chi Minh City,False,1
202.78.224.130,VN,Ho Chi Minh City,False,1
222.255.167.61,VN,Hanoi,False,1
203.113.135.26,VN,Ho Chi Minh City,False,1
203.113.135.28,VN,Ho Chi Minh City,False,0.92
116.100.88.123,VN,Hanoi,False,1
202.78.224.134,VN,Ho Chi Minh City,False,1
203.113.148.12,VN,,False,0.99
123.30.27.24,VN,Thanh Hóa,False,1
58.186.80.17,VN,Hanoi,False,1
58.186.80.18,VN,Hanoi,False,1
103.239.32.81,VN,,False,1
116.193.64.22,VN,Ho Chi Minh City,False,1
118.69.187.252,VN,Ho Chi Minh City,True,1
103.239.32.36,VN,,False,1
116.193.64.16,VN,Ho Chi Minh City,False,1
202.43.108.1,VN,,True,1
202.43.108.2,VN,,True,1
101.53.12.102,VN,,False,1
103.147.187.246,VN,,True,1
125.234.254.184,VN,Hanoi,False,1
113.161.86.104,VN,Ho Chi Minh City,True,1
103.160.248.44,VN,,True,1
103.160.248.45,VN,,True,1
113.161.182.253,VN,Thu Duc,False,1
116.118.119.167,VN,Ho Chi Minh City,True,1
203.162.125.129,VN,,True,1
222.255.206.232,VN,Ho Chi Minh City,True,1
103.139.14.2,VN,,False,1
118.69.109.45,VN,Ho Chi Minh City,True,1
14.238.96.162,VN,Ho Chi Minh City,False,1
171.251.51.138,VN,Da Nang,False,0.92
113.161.116.121,VN,Ho Chi Minh City,True,0.89
125.234.104.230,VN,Ho Chi Minh City,False,1
14.238.93.131,VN,Ho Chi Minh City,False,0.96
27.76.137.77,VN,Thanh Hóa,False,1
118.70.203.68,VN,Hanoi,False,0.76
45.125.208.8,VN,,True,1
45.125.211.11,VN,,True,1
123.31.40.97,VN,Vũng Tàu,True,1
14.225.246.17,VN,Hanoi,True,1
202.87.213.253,VN,,True,1
202.87.214.253,VN,,True,1
203.162.125.130,VN,,True,0.68
113.191.253.82,VN,Hanoi,False,1
210.245.2.227,VN,Hanoi,False,1
103.3.254.20,VN,,False,1
125.234.238.3,VN,Hanoi,False,1
210.245.31.102,VN,Bien Hoa,False,1
103.16.63.166,KH,Phnom Penh,True,1
103.242.58.166,KH,,False,1
103.242.58.167,KH,,False,1
180.180.247.37,TH,,False,0.99
180.180.247.38,TH,,False,1
203.150.225.9,TH,Bangkok,False,0.95
203.151.59.6,TH,,False,1
203.117.96.181,SG,Singapore,False,1
103.59.52.3,LA,Vientiane,False,0.93
202.123.179.205,LA,,False,0.79
103.237.126.4,MO,,True,1
202.86.145.235,MO,Macao,False,0.84
114.119.173.151,SG,Singapore,False,1
101.32.12.169,HK,Central,False,1
8.219.141.163,SG,,False,1
103.214.109.52,US,Los Angeles,False,1
103.7.10.187,SG,,False,1
202.160.38.188,BN,Bandar Seri Begawan,False,1
13.67.61.31,SG,Singapore,False,1
202.14.14.97,SG,Singapore,False,1
203.127.160.66,SG,,False,1
203.127.160.67,SG,,False,1
223.25.232.2,SG,,False,1
103.246.244.143,HK,,True,1
103.51.144.212,HK,,True,1
103.51.144.214,HK,,True,1
103.51.144.216,HK,,True,1
103.87.243.149,HK,,True,1
111.223.244.111,HK,,False,1
111.223.244.63,HK,,False,1
111.68.6.234,HK,,True,1
111.68.9.146,HK,,True,1
117.18.114.24,HK,,False,1
118.140.234.50,HK,Central,False,1
139.5.203.83,HK,,True,1
141.193.156.107,HK,,True,1
148.66.58.98,HK,Central,True,1
175.159.154.38,HK,,False,1
175.159.154.39,HK,,False,1
180.178.33.203,HK,,False,1
202.126.222.2,HK,Causeway Bay,False,1
202.181.174.121,HK,,True,1
202.181.174.122,HK,,True,1
202.181.233.180,HK,,True,1
202.62.195.3,HK,,False,1
202.62.222.220,HK,,False,1
202.62.222.222,HK,,False,1
202.82.121.113,HK,Kowloon,False,1
202.82.148.186,HK,North,False,1
202.82.84.220,HK,Sai Ying Pun,False,1
203.83.75.18,HK,,False,1
203.83.75.19,HK,,False,1
203.98.133.71,HK,Ma On Shan,False,1
210.17.195.71,HK,Central,False,1
210.87.250.116,HK,,True,1
210.87.250.156,HK,,True,1
218.255.20.119,HK,Central,False,1
58.177.179.58,HK,Central,False,0.98
59.152.206.146,HK,Central,False,1
59.188.181.43,HK,,True,0.6
61.244.16.37,HK,Central,False,1
61.244.186.188,HK,Central,False,1
61.244.186.189,HK,Central,False,1
103.142.147.14,HK,,True,0.98
103.143.29.68,HK,,True,0.97
103.249.33.206,HK,Central,False,1
103.26.120.114,HK,Central,False,1
103.6.137.52,HK,Kowloon,False,0.89
103.98.115.155,HK,,False,1
113.208.80.4,HK,,True,1
115.126.20.15,HK,,True,0.92
115.160.158.214,HK,Central,False,0.89
146.196.52.213,HK,,False,1
175.45.0.14,HK,Central,False,1
202.131.73.38,HK,Tai Kok Tsui,True,1
202.131.75.162,HK,Tuen Mun,False,0.95
202.181.233.243,HK,,False,1
202.77.35.41,HK,Central,True,1
202.77.35.42,HK,Central,True,1
203.184.176.150,HK,,False,0.83
203.198.62.23,HK,Sha Tin Wai,False,1
210.176.210.4,HK,Central,False,0.74
210.177.222.168,HK,Mid Levels,False,1
210.3.234.46,HK,Central,False,0.91
210.3.252.27,HK,Central,True,1
218.102.13.133,HK,Central,False,1
218.253.232.19,HK,Central,False,1
218.255.101.37,HK,Sai Kung,False,1
218.255.18.2,HK,Central,False,0.86
223.197.185.46,HK,Central,True,1
223.255.176.195,HK,Wanchai,False,1
23.102.236.129,HK,Central,False,1
27.111.83.70,AU,,False,1
59.148.14.33,HK,Wong Tai Sin,False,1
59.152.238.147,HK,Tuen Mun,False,1
59.152.242.164,HK,Central,False,1
59.152.242.165,HK,Central,False,1
59.188.10.22,HK,,False,1
59.188.10.29,HK,,False,1
61.238.159.4,HK,Central,False,1
18.167.5.157,HK,,False,1
202.46.33.250,CN,,False,1
23.224.78.116,US,,True,0.99
103.18.93.7,MY,Kuala Lumpur,False,1
103.18.93.8,MY,Kuala Lumpur,False,1
103.222.236.20,MY,Port Dickson,False,1
103.222.236.21,MY,Port Dickson,False,1
103.78.35.229,MY,Subang Jaya,False,1
115.134.79.113,MY,Kuala Terengganu,False,1
117.53.152.76,MY,,False,1
121.121.44.131,MY,Petaling Jaya,False,1
143.192.101.55,MY,,True,1
183.78.169.111,MY,,False,1
183.78.169.233,MY,,False,1
202.188.124.58,MY,Seremban,False,1
202.43.102.123,MY,,False,1
202.75.45.149,MY,,False,1
211.24.103.11,MY,Kuala Lumpur,False,1
218.208.114.28,MY,Sepang,False,1
218.208.115.68,MY,Sepang,False,1
58.26.238.231,MY,George Town,False,1
58.26.238.248,MY,George Town,False,1
196.13.208.10,SC,,True,0.95
45.141.58.191,SC,,False,1
103.225.36.226,PH,,True,1
103.225.36.238,PH,,True,1
103.225.36.58,PH,,True,1
112.199.109.198,PH,Tanza,False,1
112.199.109.218,PH,Tanza,False,1
112.199.115.40,PH,Binan,False,1
115.84.252.2,PH,,False,0.98
115.84.252.3,PH,,False,0.98
116.50.180.210,PH,Cavite City,False,0.76
119.92.150.133,PH,Cagayan de Oro,False,1
121.58.203.1,PH,Manila,False,1
121.58.248.195,PH,Manila,False,1
122.49.209.68,PH,Quezon City,True,1
122.52.251.163,PH,Taytay,False,1
122.53.148.218,PH,Calamba,False,1
122.53.179.133,PH,Bacoor,True,1
122.55.31.181,PH,Artacho,False,1
124.83.13.150,PH,Balingasag,True,1
130.105.145.84,PH,Manila,False,1
155.137.78.72,PH,Binan,False,1
155.137.78.74,PH,Binan,False,1
202.124.128.3,PH,Las Pinas,True,1
202.57.32.1,PH,Paranaque City,False,1
202.78.64.84,PH,,False,1
202.90.128.132,PH,Quezon City,False,1
202.90.137.75,PH,Quezon City,False,1
203.158.15.67,PH,,False,1
203.158.9.5,PH,,False,1
203.160.160.1,PH,City of Muntinlupa,False,1
203.177.108.187,PH,Iligan,False,1
203.177.190.130,PH,Ilagan,False,1
203.177.52.229,PH,Andres Bonifacio,True,1
203.177.84.2,PH,,False,1
203.177.88.250,PH,Atop-atop,False,1
210.1.79.37,PH,Manila,False,1
210.1.81.40,PH,Mandaue City,False,1
210.1.81.41,PH,Mandaue City,False,1
210.213.82.253,PH,Tacloban City,False,1
210.5.88.194,PH,Cebu City,True,1
210.5.95.141,PH,Manila,True,1
222.127.151.3,PH,,False,1
222.127.25.226,PH,Tayabas,False,1
27.126.155.1,PH,Manila,False,1
27.126.155.4,PH,Manila,False,1
43.247.16.2,PH,,True,1
45.64.123.199,PH,Davao City,False,1
58.71.15.85,PH,Baybay,True,1
58.71.32.67,PH,Makati City,False,1
178.150.0.151,UA,Kyiv,False,1
178.93.151.230,UA,Kyiv,True,0.8
193.243.159.110,UA,,False,1
194.44.221.230,UA,Lviv,True,1
195.177.236.66,UA,Vinnytsia,False,1
195.248.191.102,UA,Dnipro,False,1
195.66.200.100,UA,Yuzhne,True,1
212.1.104.5,UA,Lutsk,True,1
212.1.77.170,UA,,True,1
212.1.84.18,UA,Dnipro,False,1
213.226.121.4,PL,Warsaw,False,1
213.227.192.136,UA,,False,1
80.70.64.18,UA,,True,1
80.73.9.245,UA,Kyiv,False,1
93.183.204.1,UA,Kharkiv,False,1
109.226.62.90,IL,Qiryat Ono,False,0.89
109.226.62.94,IL,Qiryat Ono,False,0.97
192.115.100.131,IL,,True,1
192.116.245.10,IL,Petah Tikva,False,1
193.138.92.129,IL,,False,1
194.90.119.243,IL,Tel Aviv,False,1
195.62.19.119,IL,,False,1
212.150.19.15,IL,Tel Aviv,False,1
212.150.19.47,IL,Tel Aviv,False,1
212.150.211.114,IL,Nazerat 'Illit,False,1
212.150.241.254,IL,Judeida Makr,False,1
212.199.114.11,IL,Mevaseret Zion,False,1
212.199.114.12,IL,Mevaseret Zion,False,1
212.68.146.199,IL,Holon,False,0.89
212.68.146.205,IL,Ganei Tikva,False,1
213.8.29.68,IL,Or Yehuda,False,0.56
213.8.5.219,IL,Jerusalem,False,1
31.154.3.161,IL,Nir 'Oz,False,1
62.219.67.76,IL,Kfar Saba,False,0.98
62.90.17.198,IL,Jerusalem,False,1
62.90.188.148,IL,Ramat HaSharon,False,1
80.179.59.162,IL,Giv‘atayim,False,0.76
80.179.59.163,IL,Giv‘atayim,False,0.77
80.70.128.10,IL,,False,1
80.70.128.11,IL,,False,1
81.218.45.94,IL,Jerusalem,False,1
82.166.213.148,IL,Tel Aviv,True,1
91.198.129.127,IL,,False,1
91.227.164.83,IL,,False,1
112.121.75.185,TW,,False,1
113.196.177.211,TW,Nantou City,False,1
113.61.224.12,TW,Beitun,False,0.99
114.34.84.173,TW,New Taipei,True,1
118.163.207.91,TW,Taichung,False,1
122.117.37.174,TW,Taichung,False,0.99
122.147.130.5,TW,Taoyuan District,False,1
125.227.236.249,TW,Pingzhen District,False,1
125.227.249.217,TW,New Taipei,False,1
163.29.197.65,TW,,False,1
163.29.32.1,TW,,False,0.87
175.98.134.195,TW,Taoyuan District,False,1
175.99.79.131,TW,,False,1
203.66.176.1,TW,,False,1
210.208.81.3,TW,,False,1
210.67.33.3,TW,,False,1
210.68.106.118,TW,,False,1
193.17.47.1,CZ,,True,1
185.246.188.51,NL,,True,1
185.247.225.17,SC,,True,1
211.21.7.246,TW,New Taipei,False,1
211.23.165.165,TW,Taipei,True,1
211.23.241.114,TW,Tainan City,False,1
211.75.158.220,TW,New Taipei,False,1
211.75.71.229,TW,Taichung,False,1
218.32.187.102,TW,,False,1
219.87.72.1,TW,Taipei,False,1
219.87.72.2,TW,Taipei,False,1
59.120.77.163,TW,Taichung,False,1
59.124.0.180,TW,Taipei,False,1
59.124.26.210,TW,New Taipei,False,1
59.124.46.89,TW,New Taipei,False,1
59.125.10.126,TW,Taichung,False,1
59.125.160.221,TW,New Taipei,False,1
59.126.58.204,TW,Taichung,False,1
59.127.128.96,TW,Nantou City,False,1
60.248.224.205,TW,Taichung,False,1
60.249.5.77,TW,Taichung,False,1
60.250.132.102,TW,Ankeng,False,1
60.250.84.108,TW,New Taipei,True,1
60.250.9.222,TW,Taipei,False,1
60.251.102.36,TW,Taipei,True,1
60.251.138.182,TW,New Taipei,False,1
60.251.65.49,TW,Taipei,False,1
61.216.168.145,TW,Nantou City,False,1
61.30.172.173,TW,Taipei,False,1
61.57.229.1,TW,,False,1
61.57.229.2,TW,,False,1
61.60.129.37,TW,Toufen Township,False,1
47.190.31.18,US,Lewisville,False,1
192.206.244.25,US,Carrollton,False,1
192.206.246.8,US,Carrollton,False,1
13.232.55.105,IN,Mumbai,True,1
15.188.45.248,FR,Paris,False,1
161.11.226.170,US,,False,1
165.201.112.77,US,Topeka,False,1
18.140.176.218,SG,Singapore,False,1
52.152.253.1,US,Tappahannock,False,1
52.183.143.210,IN,Mumbai,False,1
52.226.49.57,US,Tappahannock,False,0.68
63.226.77.22,US,Riverton,False,1
72.252.248.25,JM,Kingston,False,1
74.112.48.13,US,Edmonds,False,1
222.255.158.38,VN,Da Nang,False,1
176.98.80.97,UA,Uman,False,1
95.67.59.140,UA,Kyiv,False,1
63.143.125.14,JM,Kingston,False,1
1.1.188.104,TH,Ban Phan Don,False,1
1.1.189.134,TH,Ban Phan Don,False,1
1.1.189.135,TH,Ban Phan Don,False,1
202.5.200.8,MN,,True,1
202.5.192.9,MN,Mörön,True,1
202.55.176.10,MN,,False,1
203.169.48.9,MN,,False,1
203.169.48.8,MN,,False,1
103.20.152.11,MN,,False,1
103.251.105.188,CN,Nanning,False,1
110.10.12.39,KR,Buk-gu,False,1
110.45.146.30,KR,,False,1
111.92.189.105,KR,,True,1
111.92.189.106,KR,,False,1
119.205.215.221,KR,,True,1
121.254.156.205,KR,,False,0.8200000000000001
121.254.159.28,KR,,False,0.76
121.254.159.29,KR,,False,0.76
121.254.171.111,KR,,False,1
121.78.147.191,KR,,True,1
128.134.135.200,KR,Ansan-si,False,1
14.41.60.10,KR,Chuncheon,False,1
14.41.60.11,KR,Chuncheon,False,1
14.63.217.126,KR,,False,0.77
14.63.217.75,KR,,False,1
152.149.40.2,KR,,False,1
168.154.224.50,KR,,False,1
175.126.226.103,KR,Seoul,False,1
183.111.169.80,KR,,False,0.6
203.225.255.11,KR,,False,1
203.233.205.33,KR,Songpa-gu,False,0.98
203.236.1.12,KR,Daegu,False,1
203.236.20.11,KR,Seongnam-si,False,1
203.239.130.1,KR,,False,0.77
203.242.200.6,KR,,False,0.85
203.249.161.2,KR,Gangseo-gu,False,1
203.249.171.2,KR,Gwanak-gu,False,1
210.118.193.172,KR,,False,0.99
210.207.102.134,KR,,True,1
210.220.16.6,KR,,False,1
211.115.66.175,KR,Cheonan,False,1
211.182.233.2,KR,Busan,False,1
211.182.233.3,KR,Busan,False,1
211.188.180.21,KR,,False,1
211.188.180.22,KR,,False,0.47000000000000003
211.233.62.178,KR,Jongno-gu,True,1
211.236.182.52,KR,,True,0.6
218.146.34.200,KR,,False,1
218.159.112.239,KR,,False,1
218.159.112.240,KR,,False,1
218.237.66.232,KR,Suyeong-gu,True,1
220.64.135.149,KR,Seoul,False,1
220.64.86.2,KR,,False,1
221.168.1.1,KR,Dalseo-gu,False,0.95
222.101.9.212,KR,Gapyeong County,False,1
222.101.9.213,KR,Yongsan-gu,False,1
222.122.149.60,KR,,False,1
222.122.49.6,KR,,False,0.93
222.122.82.24,KR,,False,0.98
45.64.173.74,KR,,False,1
49.254.144.195,KR,Boryeong-si,False,1
49.254.144.223,KR,Boryeong-si,False,1
58.103.130.4,KR,Gunpo,True,1
58.229.253.16,KR,Anyang-si,False,1
61.100.13.145,KR,,False,1
61.100.13.46,KR,,False,1
61.100.13.50,KR,,False,1
61.111.3.11,KR,Seongnam-si,True,1
61.32.254.2,KR,,False,1
91.217.187.1,RO,,False,1
103.141.105.231,ID,Palangkaraya,False,1
103.145.96.209,ID,Jakarta,False,1
103.145.96.210,ID,Jakarta,False,1
103.5.148.100,ID,,False,0.72
103.61.71.212,ID,,False,1
103.86.103.29,ID,,True,1
118.98.223.17,ID,,False,1
139.255.60.67,ID,Jakarta,False,1
1.1.248.217,TH,Yasothon,False,1
1.2.161.92,TH,Kosamphi Nakhon,False,1
1.2.168.231,TH,Nakhon Ratchasima,False,1
1.2.169.30,TH,Nakhon Ratchasima,False,1
1.2.179.105,TH,Bangkok,False,1
1.2.179.117,TH,Bangkok,False,1
1.2.254.143,TH,Bangkok,False,1
1.4.141.81,TH,Ban Chan,False,0.98
1.4.194.52,TH,Ban Dan,False,1
1.4.194.161,TH,Ban Dan,False,1
1.4.194.136,TH,Ban Dan,False,1
1.4.194.133,TH,Ban Dan,False,1
1.4.194.244,TH,Ban Dan,False,1
1.4.194.135,TH,Ban Dan,False,1
1.4.195.10,TH,Ban Dan,False,1
1.4.195.110,TH,Ban Dan,False,1
1.4.195.131,TH,Ban Dan,False,1
1.4.195.40,TH,Ban Dan,False,1
1.4.195.196,TH,Ban Dan,False,1
1.4.198.128,TH,Trang,False,1
1.4.198.131,TH,Trang,False,1
1.4.198.146,TH,Trang,False,1
1.4.198.229,TH,Trang,False,1
1.4.214.151,TH,Bangkok,False,1
1.4.217.23,TH,Hat Yai,False,1
1.6.62.50,IN,,True,1
1.9.70.93,MY,Ipoh,False,0.93
1.9.47.17,MY,Petaling Jaya,False,1
1.9.141.114,MY,Jenjarum,False,1
1.10.144.244,TH,Bangkok,False,1
1.10.168.216,TH,Bangkok,False,1
1.11.251.105,KR,Bupyeong-gu,False,1
1.20.81.36,TH,,False,1
1.20.81.81,TH,,False,1
1.20.92.65,TH,Udon Thani,False,1
1.20.198.242,TH,Chachoengsao,False,1
1.20.208.203,TH,Ban Laem Bang Yang,True,1
1.20.217.116,TH,Dusit,False,1
1.20.227.77,TH,,False,1
1.20.227.152,TH,,False,1
1.20.253.140,TH,Narathiwat,False,1
1.22.231.211,IN,Pune,False,1
1.32.57.161,MY,Air Putih,False,1
1.33.129.233,JP,,False,1
1.33.193.144,JP,Aioicho,False,1
1.34.29.58,TW,Taoyuan District,False,1
1.38.3.52,IN,Delhi,False,1
1.38.3.11,IN,Delhi,True,1
1.54.234.128,VN,Ho Chi Minh City,False,1
1.161.124.140,TW,New Taipei,False,1
1.174.64.33,TW,Kaohsiung City,False,1
1.176.94.207,KR,Busan,False,1
1.177.152.28,KR,Geumjeong-gu,False,1
1.177.207.153,KR,Haeundae-gu,False,0.37
1.179.146.17,TH,Sam Phran,False,1
1.179.150.229,TH,Ban Kaeng,False,1
1.179.189.193,TH,Lue Amnat,False,1
1.179.196.229,TH,Pathum Thani,False,1
1.179.201.220,TH,Phitsanulok,False,1
1.179.209.177,TH,,False,1
1.209.148.129,KR,Gwanak-gu,False,0.84
1.214.240.138,KR,Hwaseong-si,True,0.96
1.217.14.93,KR,,False,0.5
1.221.157.149,KR,Changwon,True,1
1.222.47.132,KR,Changwon,False,1
1.224.253.87,KR,Dalseo-gu,False,1
1.225.12.35,KR,Seongdong-gu,False,1
1.226.38.108,KR,Gangdong-gu,False,1
1.226.84.227,KR,Pyeongtaek-si,False,1
1.226.167.221,KR,Buk-gu,False,1
1.226.190.17,KR,Gwangsan-gu,False,1
1.226.192.98,KR,Jeollanam-do,False,1
1.226.193.136,KR,Jeollanam-do,False,1
1.227.0.163,KR,Buk-gu,False,1
1.227.4.73,KR,Buk-gu,False,1
1.227.9.73,KR,Buk-gu,False,1
1.227.56.61,KR,Gangnam-gu,False,1
1.227.136.162,KR,Songpa-gu,False,1
1.228.17.141,KR,Cheonan,False,1
1.228.92.61,KR,Cheonan,False,1
1.228.92.217,KR,Cheonan,False,1
1.228.180.245,KR,Cheonan,False,1
1.228.222.180,KR,Sejong,False,1
1.228.224.47,KR,Cheonan,False,1
1.228.224.63,KR,Cheonan,False,1
1.228.224.43,KR,Cheonan,False,1
1.229.42.95,KR,Seoul,False,1
1.229.46.93,KR,Seoul,False,1
1.229.71.72,KR,Dobong-gu,False,1
1.229.87.167,KR,Seongbuk-gu,False,1
1.229.87.165,KR,Seongbuk-gu,False,1
1.229.136.24,KR,Jung-gu,False,1
1.229.136.136,KR,Jung-gu,False,1
1.229.182.36,KR,Dongdaemun-gu,False,1
1.229.184.91,KR,Jungnang-gu,False,1
1.229.245.228,KR,Nowon-gu,False,1
1.231.54.26,KR,Seongdong-gu,False,1
1.231.64.167,KR,Dobong-gu,False,1
1.231.80.101,KR,Gangbuk-gu,False,1
1.231.96.89,KR,Dongdaemun-gu,False,1
1.233.8.222,KR,Hanam,False,1
1.233.88.39,KR,Songpa-gu,False,1
1.234.24.252,KR,,False,1
1.234.51.240,KR,,False,1
1.234.66.81,KR,Seoul,False,1
1.234.79.82,KR,Seoul,True,0.98
1.235.186.131,KR,Jongno-gu,False,0.87
1.237.185.162,KR,Gwangju,False,1
1.238.112.247,KR,Hwaseong-si,False,0.7
1.239.87.153,KR,Yeoncheon-gun,True,1
1.240.146.22,KR,Icheon-si,True,1
1.245.98.156,KR,Yeongdong-gun,False,1
1.245.216.209,KR,Seo-gu,False,0.47000000000000003
1.245.252.10,KR,Daejeon,False,0.97
1.247.120.139,KR,Gangseo-gu,False,0.68
1.247.209.5,KR,Cheonan,False,1
1.248.170.128,KR,Seongdong-gu,False,1
1.248.235.65,KR,Seoul,False,1
1.248.245.116,KR,Gwangjin-gu,False,0.78
1.249.43.20,KR,Dong-gu,False,1
1.249.47.28,KR,Gwangsan-gu,False,1
1.249.165.26,KR,Gwangyang-si,False,1
1.249.186.136,KR,Suncheon-si,False,1
1.249.200.229,KR,Yeosu,False,1
1.250.26.67,KR,Jeonju,False,0.56
1.250.122.138,KR,Seogwipo-si,False,1
1.253.233.47,KR,Ulju-gun,False,1
2.40.61.148,IT,Lurago Marinone,False,1
2.52.252.252,IL,,False,1
2.55.127.105,IL,Jerusalem,False,1
2.55.125.243,IL,Jerusalem,False,1
2.56.137.67,US,Chicago,False,1
2.56.212.249,NL,Dronten,True,1
2.57.245.35,SE,Mariestad,False,1
2.60.117.118,RU,Irkutsk,False,1
2.74.193.85,KZ,,True,1
2.109.110.110,DK,Aarhus,False,1
2.136.93.224,ES,Alicante,False,1
2.142.135.47,ES,Lucena,False,1
2.189.44.44,IR,,False,1
202.14.14.99,SG,Singapore,False,1
1.0.171.53,TH,Don Tum,False,0.99
1.2.236.10,TH,Chiang Mai,False,1
1.4.207.249,TH,Bangkok,False,1
1.4.214.150,TH,Bangkok,False,1
1.4.214.162,TH,Bangkok,False,1
1.4.215.56,TH,Bangkok,False,1
1.6.165.187,IN,,True,1
1.9.63.97,MY,Shah Alam,False,1
1.9.117.37,MY,Lunas,False,1
1.9.117.249,MY,Lunas,False,1
1.9.165.210,MY,Petaling Jaya,False,1
1.9.203.114,MY,Kuching,True,1
1.10.10.11,AU,Melbourne,True,1
1.10.10.10,AU,Melbourne,True,1
1.10.182.214,TH,Ban Kaeng,False,1
1.12.13.53,CN,,False,1
1.20.143.191,TH,Bangkok,False,1
1.20.198.168,TH,Chachoengsao,False,1
1.20.203.194,TH,Si Prachan,False,1
1.34.94.130,TW,New Taipei,False,1
1.34.173.230,TW,Taoyuan District,False,1
1.54.216.81,VN,Hanoi,False,1
1.171.14.164,TW,Hsinchu,False,1
1.176.59.222,KR,Changwon,False,1
1.177.105.180,KR,Busanjin-gu,False,0.56
1.177.157.75,KR,Busan,False,1
1.177.202.178,KR,Geumjeong-gu,False,0.43
1.179.148.253,TH,Bangkok,False,0.8200000000000001
1.179.152.38,TH,Nonthaburi,True,1
1.179.153.18,TH,Bangkok,False,0.86
1.179.208.81,TH,,False,1
1.179.203.226,TH,Phitsanulok,True,1
1.179.228.10,TH,,False,0.88
1.179.232.216,TH,Bang Bon,False,1
1.179.237.38,TH,Bang Bon,False,1
1.209.85.3,KR,Yangsan,False,1
1.225.165.101,KR,Hwaseong-si,False,0.93
1.226.6.131,KR,Jeju City,False,1
1.226.40.213,KR,Iksan,False,1
1.226.76.30,KR,Jung-gu,False,1
1.226.83.233,KR,Pyeongtaek-si,False,1
1.226.129.61,KR,Seongnam-si,False,1
1.226.130.220,KR,Gwangju,False,1
1.226.185.158,KR,Gwangsan-gu,False,0.84
1.226.189.24,KR,Dong-gu,False,1
1.228.32.93,KR,Dong-gu,False,1
1.228.134.141,KR,Asan,False,1
1.228.180.5,KR,Seongdong-gu,False,1
1.228.224.139,KR,Yangcheon-gu,False,1
gitextract_097p0ehk/
├── .config/
│ └── dotnet-tools.json
├── .dockerignore
├── .forgejo/
│ ├── win/
│ │ ├── README.md
│ │ ├── dug.nuspec
│ │ └── output/
│ │ ├── LICENSE.txt
│ │ └── VERIFICATION.txt
│ └── workflows/
│ ├── build-test-publish.yaml
│ └── update-docs.yaml
├── .gitignore
├── .gitmodules
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── tasks.json
├── Dockerfile
├── Dockerfile-alpine
├── LICENSE
├── README.md
├── cli/
│ ├── App.cs
│ ├── Config.cs
│ ├── Data/
│ │ ├── ContinentCodes.cs
│ │ ├── DataMaps.cs
│ │ ├── DnsResponse.cs
│ │ └── Models/
│ │ └── DnsServer.cs
│ ├── Directory.Build.props
│ ├── Options/
│ │ ├── GlobalOptions.cs
│ │ ├── RunOptions.cs
│ │ └── UpdateOptions.cs
│ ├── Parsing/
│ │ ├── CustomDnsServerMapping.cs
│ │ ├── DnsServerParser.cs
│ │ ├── IDnsServerParser.cs
│ │ ├── IpAddressConverter.cs
│ │ ├── LocalCsvDnsServerMapping.cs
│ │ └── RemoteCsvDnsServerMapping.cs
│ ├── Program.cs
│ ├── Resources/
│ │ └── default_servers.csv
│ ├── Services/
│ │ ├── ConsoleTableService.cs
│ │ ├── ConsoleTemplateService.cs
│ │ ├── DnsQueryService.cs
│ │ ├── DnsServerService.cs
│ │ ├── IConsoleTableService.cs
│ │ ├── IConsoleTemplateService.cs
│ │ ├── IDnsQueryService.cs
│ │ ├── IDnsServerService.cs
│ │ ├── IPercentageAnimator.cs
│ │ └── PercentageAnimator.cs
│ ├── Utils/
│ │ ├── MarkupHelper.cs
│ │ ├── ReflectionHelper.cs
│ │ └── TemplateHelper.cs
│ ├── Utils.cs
│ ├── auth_template
│ ├── dug.csproj
│ ├── i18n/
│ │ ├── dug.Designer.cs
│ │ ├── dug.de.resx
│ │ ├── dug.es.resx
│ │ └── dug.resx
│ ├── snap/
│ │ └── snapcraft.yaml
│ ├── snapcraft.Dockerfile
│ ├── test_custom_header_servers.csv
│ ├── test_custom_header_servers_colon_separated.csv
│ ├── test_custom_header_servers_color.csv
│ └── test_servers.csv
├── cli.tests/
│ ├── XUnit/
│ │ ├── UnitTest1.cs
│ │ └── cli.tests.csproj
│ └── bats/
│ └── run.sh
├── dug/
│ └── APKBUILD
└── dug-docs/
├── README.md
├── babel.config.js
├── dockerfile
├── docs/
│ ├── install.md
│ ├── introduction.md
│ ├── mdx.md
│ ├── run.md
│ ├── templated_input.md
│ ├── templated_output.md
│ └── update.md
├── docusaurus.config.js
├── package.json
├── sidebars.js
├── src/
│ ├── css/
│ │ └── custom.css
│ └── pages/
│ ├── index.js
│ └── styles.module.css
└── static/
└── .nojekyll
SYMBOL INDEX (132 symbols across 33 files)
FILE: cli.tests/XUnit/UnitTest1.cs
class UnitTest1 (line 7) | public class UnitTest1
method Test1 (line 9) | [Fact]
FILE: cli/App.cs
class App (line 18) | public class App
method App (line 28) | public App(ParserResult<object> cliArgs, IDnsServerParser parser, IDns...
method RunAsync (line 39) | public async Task<int> RunAsync()
method HandleErrors (line 47) | private void HandleErrors(IEnumerable<Error> errors)
method ExecuteArgumentsAsync (line 89) | private async Task ExecuteArgumentsAsync(object args)
method HandleGlobalAndSpecialOptions (line 116) | private void HandleGlobalAndSpecialOptions(GlobalOptions options)
method ExecuteRun (line 124) | private async Task ExecuteRun(RunOptions opts)
method Query (line 213) | private async Task<Dictionary<DnsServer, List<DnsResponse>>> Query(Run...
method ExecuteUpdate (line 218) | private async Task ExecuteUpdate(UpdateOptions opts)
FILE: cli/Config.cs
class Config (line 6) | public static class Config {
method getConfigBaseDirectory (line 15) | private static string getConfigBaseDirectory(){
FILE: cli/Data/ContinentCodes.cs
class ContinentCodes (line 8) | public class ContinentCodes
method ContinentCodes (line 10) | private ContinentCodes(string code, string name) { Code = code; Name =...
method ToString (line 15) | public override string ToString()
method TryParse (line 30) | public static bool TryParse(string value, out ContinentCodes result){
class ContinentCodeComparer (line 42) | public class ContinentCodeComparer : IEqualityComparer<ContinentCodes>
method Equals (line 44) | public bool Equals(ContinentCodes x, ContinentCodes y)
method GetHashCode (line 49) | public int GetHashCode([DisallowNull] ContinentCodes obj)
FILE: cli/Data/DataMaps.cs
class DataMaps (line 5) | public class DataMaps
FILE: cli/Data/DnsResponse.cs
class DnsResponse (line 6) | public class DnsResponse
method DnsResponse (line 8) | public DnsResponse(IDnsQueryResponse queryResponse, long responseTime,...
method DnsResponse (line 14) | public DnsResponse(DnsResponseException error, long responseTime, Quer...
FILE: cli/Data/Models/DnsServer.cs
class DnsServer (line 8) | public class DnsServer
method ToCsvString (line 61) | public string ToCsvString(){
class DnsServerComparer (line 69) | public class DnsServerComparer : IEqualityComparer<DnsServer>
method Equals (line 72) | public bool Equals(DnsServer x, DnsServer y)
method GetHashCode (line 77) | public int GetHashCode([DisallowNull] DnsServer obj)
FILE: cli/Options/GlobalOptions.cs
class GlobalOptions (line 6) | public class GlobalOptions
FILE: cli/Options/RunOptions.cs
type OutputFormats (line 13) | public enum OutputFormats
class RunOptions (line 20) | [Verb("run", isDefault: true, HelpText = "HT_Run", ResourceType = typeof...
FILE: cli/Options/UpdateOptions.cs
type ReliabilityUpdateType (line 11) | public enum ReliabilityUpdateType
class UpdateOptions (line 17) | [Verb("update", HelpText = "HT_Update", ResourceType = typeof(i18n.dug))]
FILE: cli/Parsing/CustomDnsServerMapping.cs
class CustomDnsServerMapping (line 10) | public class CustomDnsServerMapping : CsvMapping<DnsServer>
method CustomDnsServerMapping (line 13) | public CustomDnsServerMapping(string customHeaders) : base()
method MapCustomHeaders (line 19) | private bool MapCustomHeaders(DnsServer server, TokenizedRow headers)
FILE: cli/Parsing/DnsServerParser.cs
type DnsServerCsvFormats (line 11) | public enum DnsServerCsvFormats{
class DnsServerParser (line 16) | public class DnsServerParser: IDnsServerParser
method DnsServerParser (line 21) | public DnsServerParser(){
method ParseServersFromStream (line 24) | public ParallelQuery<DnsServer> ParseServersFromStream(Stream stream, ...
FILE: cli/Parsing/IDnsServerParser.cs
type IDnsServerParser (line 8) | public interface IDnsServerParser{
method ParseServersFromStream (line 9) | ParallelQuery<DnsServer> ParseServersFromStream(Stream stream, ICsvMap...
FILE: cli/Parsing/IpAddressConverter.cs
class IpAddressConverter (line 7) | internal class IpAddressConverter : ITypeConverter<IPAddress>
method TryConvert (line 11) | public bool TryConvert(string value, out IPAddress result)
FILE: cli/Parsing/LocalCsvDnsServerMapping.cs
class LocalCsvDnsServerMapping (line 6) | public class LocalCsvDnsServerMapping : CsvMapping<DnsServer>
method LocalCsvDnsServerMapping (line 8) | public LocalCsvDnsServerMapping() : base()
FILE: cli/Parsing/RemoteCsvDnsServerMapping.cs
class RemoteCsvDnsServerMapping (line 6) | public class RemoteCsvDnsServerMapping : CsvMapping<DnsServer>
method RemoteCsvDnsServerMapping (line 8) | public RemoteCsvDnsServerMapping() : base()
FILE: cli/Program.cs
class Program (line 11) | class Program
method Main (line 13) | static async Task<int> Main(string[] args)
method ConfigureServices (line 40) | private static IServiceCollection ConfigureServices(string[] args)
FILE: cli/Services/ConsoleTableService.cs
class ConsoleTableService (line 17) | public class ConsoleTableService : IConsoleTableService
method DrawResults (line 19) | public void DrawResults(Dictionary<DnsServer, List<DnsResponse>> resul...
method DrawLiveTable (line 30) | public async Task DrawLiveTable(Dictionary<DnsServer, List<DnsResponse...
method DrawVerboseTable (line 47) | private void DrawVerboseTable(Dictionary<DnsServer, List<DnsResponse>>...
method GenerateConciseTable (line 92) | private Table GenerateConciseTable(Dictionary<DnsServer, List<DnsRespo...
method DrawUrlHeader (line 147) | private void DrawUrlHeader(RunOptions options)
method RenderInfoPanel (line 152) | public void RenderInfoPanel<T>(object args)
FILE: cli/Services/ConsoleTemplateService.cs
class ConsoleTemplateService (line 11) | public class ConsoleTemplateService : IConsoleTemplateService
method DrawResults (line 13) | public void DrawResults(Dictionary<DnsServer, List<DnsResponse>> resul...
method DrawJsonResults (line 27) | private void DrawJsonResults(Dictionary<DnsServer, List<DnsResponse>> ...
method DrawCsvResults (line 61) | private void DrawCsvResults(Dictionary<DnsServer, List<DnsResponse>> r...
FILE: cli/Services/DnsQueryService.cs
class DnsQueryService (line 16) | public class DnsQueryService : IDnsQueryService
method QueryDnsServer (line 18) | private async Task<IDnsQueryResponse> QueryDnsServer(DnsServer server,...
method ServerHasDNSSEC (line 29) | public async Task<bool> ServerHasDNSSEC(IPAddress serverAddress, TimeS...
method QueryServers (line 40) | public async Task<Dictionary<DnsServer, List<DnsResponse>>> QueryServe...
FILE: cli/Services/DnsServerService.cs
class DnsServerService (line 18) | public class DnsServerService : IDnsServerService
method DnsServerService (line 28) | public DnsServerService(IDnsServerParser serverParser){
method EnsureServers (line 33) | public void EnsureServers()
method LoadServersFromStream (line 54) | private int LoadServersFromStream(Stream stream, ICsvMapping<DnsServer...
method LoadServers (line 61) | private int LoadServers(List<DnsServer> servers, bool overwrite = false){
method UpdateServers (line 77) | public void UpdateServers(List<DnsServer> servers, bool overwrite){
method ParseServersFromStream (line 87) | public List<DnsServer> ParseServersFromStream(Stream stream, ICsvMappi...
method PersistServers (line 92) | private void PersistServers(){
method UpdateServersFromFile (line 106) | public void UpdateServersFromFile(string customFilePath, string custom...
method UpdateServersFromFileDefaultHeaders (line 131) | private void UpdateServersFromFileDefaultHeaders(string customFilePath...
method LoadServersFromDatastore (line 141) | private void LoadServersFromDatastore(){
method UpdateServersFromRemote (line 151) | public async Task UpdateServersFromRemote(string url, char separator, ...
method UpdateServersFromDefaultRemote (line 159) | public async Task UpdateServersFromDefaultRemote(bool overwrite)
method UpdateServerReliabilityFromResults (line 168) | public void UpdateServerReliabilityFromResults(Dictionary<DnsServer, L...
FILE: cli/Services/IConsoleTableService.cs
type IConsoleTableService (line 11) | public interface IConsoleTableService
method DrawLiveTable (line 13) | Task DrawLiveTable(Dictionary<DnsServer, List<DnsResponse>> results, R...
method DrawResults (line 14) | void DrawResults(Dictionary<DnsServer, List<DnsResponse>> results, Run...
method RenderInfoPanel (line 19) | void RenderInfoPanel<T>(object args);
FILE: cli/Services/IConsoleTemplateService.cs
type IConsoleTemplateService (line 8) | public interface IConsoleTemplateService
method DrawResults (line 10) | void DrawResults(Dictionary<DnsServer, List<DnsResponse>> results, Run...
FILE: cli/Services/IDnsQueryService.cs
type IDnsQueryService (line 10) | public interface IDnsQueryService
method QueryServers (line 12) | Task<Dictionary<DnsServer, List<DnsResponse>>> QueryServers(string url...
FILE: cli/Services/IDnsServerService.cs
type IDnsServerService (line 11) | public interface IDnsServerService{
method UpdateServersFromFile (line 18) | void UpdateServersFromFile(string customFilePath, string customHeaders...
method UpdateServersFromDefaultRemote (line 22) | Task UpdateServersFromDefaultRemote(bool overwrite);
method UpdateServersFromRemote (line 28) | Task UpdateServersFromRemote(string url, char separator, string custom...
method UpdateServers (line 32) | void UpdateServers(List<DnsServer> servers, bool overwrite);
method ParseServersFromStream (line 34) | List<DnsServer> ParseServersFromStream(Stream stream, ICsvMapping<DnsS...
method UpdateServerReliabilityFromResults (line 42) | void UpdateServerReliabilityFromResults(Dictionary<DnsServer, List<Dns...
method EnsureServers (line 44) | void EnsureServers();
FILE: cli/Services/IPercentageAnimator.cs
type IPercentageAnimator (line 3) | public interface IPercentageAnimator
method EventHandler (line 5) | void EventHandler(string customString);
method Start (line 7) | void Start(string header, double totalEvents, int progressBarLength = ...
method StopIfRunning (line 9) | void StopIfRunning();
FILE: cli/Services/PercentageAnimator.cs
class PercentageAnimator (line 8) | public class PercentageAnimator : IPercentageAnimator, IDisposable {
method PercentageAnimator (line 24) | public PercentageAnimator (){
method EventHandler (line 28) | public void EventHandler(string customString = null){
method Start (line 35) | public void Start(string header, double totalEvents, int progressBarLe...
method StopIfRunning (line 56) | public void StopIfRunning()
method Spin (line 66) | private void Spin()
method Draw (line 75) | private void Draw(char c, bool end = false)
method GetProgressBar (line 109) | private string GetProgressBar(double progress){
method Turn (line 122) | private void Turn()
method Dispose (line 127) | public void Dispose()
method Interpolate (line 132) | private Color Interpolate(Color color1, Color color2, double fraction)
method InterpolateDoubles (line 143) | private double InterpolateDoubles(double d1, double d2, double fraction)
FILE: cli/Utils.cs
class DugConsole (line 5) | public static class DugConsole
method Write (line 7) | public static void Write(string content){
method WriteLine (line 12) | public static void WriteLine(string content){
method VerboseWrite (line 16) | public static void VerboseWrite(string content){
method VerboseWriteLine (line 21) | public static void VerboseWriteLine(string content){
FILE: cli/Utils/MarkupHelper.cs
class MarkupHelper (line 10) | public static class MarkupHelper
method FormatDnsResponseMarkup (line 16) | public static string FormatDnsResponseMarkup(string dnsResponse, strin...
method ResponseMarkupInPlace (line 31) | public static string ResponseMarkupInPlace(string value, string highli...
method FormatConsensusMarkup (line 48) | public static string FormatConsensusMarkup(Dictionary<ContinentCodes, ...
method FormatPercentageMarkup (line 69) | public static string FormatPercentageMarkup(double percentage){
FILE: cli/Utils/ReflectionHelper.cs
class ReflectionHelper (line 5) | public static class ReflectionHelper
method GetDefaultValue (line 7) | public static object GetDefaultValue(Type t)
method GetDefaultValueAsString (line 15) | public static string GetDefaultValueAsString(Type t)
FILE: cli/Utils/TemplateHelper.cs
class TemplateHelper (line 9) | public class TemplateHelper
method GetAnswersString (line 44) | public static string GetAnswersString(DnsResponse response){
FILE: cli/i18n/dug.Designer.cs
class dug (line 14) | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools....
method dug (line 23) | [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.P...
FILE: dug-docs/src/pages/index.js
function Feature (line 41) | function Feature({imageUrl, title, description}) {
function Home (line 56) | function Home() {
Condensed preview — 82 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,358K chars).
[
{
"path": ".config/dotnet-tools.json",
"chars": 481,
"preview": "{\n \"version\": 1,\n \"isRoot\": true,\n \"tools\": {\n \"dotnet-deb\": {\n \"version\": \"0.1.232\",\n \"commands\": [\n "
},
{
"path": ".dockerignore",
"chars": 62,
"preview": "**/bin\n**/obj\n**/out\n**/.vscode\n**/.vs\n.dotnet\n**/node_modules"
},
{
"path": ".forgejo/win/README.md",
"chars": 837,
"preview": "Note, this doesnt currently function but was moved here fromt he old `./.ci` directory for reference if we ever add back"
},
{
"path": ".forgejo/win/dug.nuspec",
"chars": 5626,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Read this before creating packages: https://chocolatey.org/docs/create-packa"
},
{
"path": ".forgejo/win/output/LICENSE.txt",
"chars": 1606,
"preview": "ANTI-CAPITALIST SOFTWARE LICENSE (v 1.4)\n\nCopyright © 2020 Matthew Monahan, Unfrl LLC\n\nThis is anti-capitalist software,"
},
{
"path": ".forgejo/win/output/VERIFICATION.txt",
"chars": 305,
"preview": "\nVERIFICATION\nVerification is intended to assist the Chocolatey moderators and community\nin verifying that this package'"
},
{
"path": ".forgejo/workflows/build-test-publish.yaml",
"chars": 3517,
"preview": "name: Build Test Publish\n\non:\n push:\n branches:\n - '**'\n tags:\n - '[0-9]+\\.[0-9]+\\.[0-9]+'\n\nenv:\n DOTN"
},
{
"path": ".forgejo/workflows/update-docs.yaml",
"chars": 833,
"preview": "name: Update docs\n\non:\n push:\n paths: \n - 'dug-docs/**'\n tags:\n - '[0-9]+\\.[0-9]+\\.[0-9]+'\n\nenv:\n DOCK"
},
{
"path": ".gitignore",
"chars": 7481,
"preview": "## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n##\r\n#"
},
{
"path": ".gitmodules",
"chars": 382,
"preview": "[submodule \"cli.tests/bats/libs/bats\"]\n\tpath = cli.tests/bats/libs/bats\n\turl = https://github.com/sstephenson/bats\n[subm"
},
{
"path": ".vscode/extensions.json",
"chars": 68,
"preview": "{\n \"recommendations\": [\n \"ms-dotnettools.csdevkit\"\n ]\n}"
},
{
"path": ".vscode/launch.json",
"chars": 8894,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n"
},
{
"path": ".vscode/tasks.json",
"chars": 1208,
"preview": "{\n \"version\": \"2.0.0\",\n \"tasks\": [\n {\n \"label\": \"build\",\n \"command\": \"dotnet\",\n "
},
{
"path": "Dockerfile",
"chars": 370,
"preview": "FROM mcr.microsoft.com/dotnet/sdk:10.0 as build\nWORKDIR /app\n\nCOPY ./cli/dug.csproj .\nRUN dotnet restore\nCOPY ./cli .\nRU"
},
{
"path": "Dockerfile-alpine",
"chars": 451,
"preview": "#This DOckerfile \"works\" but for some reason the animated parts of the output dont look correct.\nFROM mcr.microsoft.com/"
},
{
"path": "LICENSE",
"chars": 1082,
"preview": "MIT License\n\nCopyright (c) 2024 Matthew Monahan, Unfrl LLC\n\nPermission is hereby granted, free of charge, to any person "
},
{
"path": "README.md",
"chars": 4447,
"preview": "# dug\n\n> [!WARNING]\n> If you are reading this on GitHub note that this a mirrored repository. The primary repo is at: ht"
},
{
"path": "cli/App.cs",
"chars": 11599,
"preview": "using System;\nusing System.Threading.Tasks;\nusing System.Linq;\nusing CommandLine;\nusing dug.Options;\nusing dug.Parsing;\n"
},
{
"path": "cli/Config.cs",
"chars": 955,
"preview": "using System;\nusing System.IO;\n\nnamespace dug\n{\n public static class Config {\n public static string ConfigDire"
},
{
"path": "cli/Data/ContinentCodes.cs",
"chars": 2162,
"preview": "using System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nn"
},
{
"path": "cli/Data/DataMaps.cs",
"chars": 24768,
"preview": "using System.Collections.Generic;\n\nnamespace dug.Data\n{\n public class DataMaps\n {\n public static readonly D"
},
{
"path": "cli/Data/DnsResponse.cs",
"chars": 1144,
"preview": "using DnsClient;\n\nnamespace dug.Data\n{\n //TODO: I want to remove this class, but there is an issue where ThrowDnsErro"
},
{
"path": "cli/Data/Models/DnsServer.cs",
"chars": 2831,
"preview": "using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Diagnostics.CodeAnalysis;\nus"
},
{
"path": "cli/Directory.Build.props",
"chars": 323,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/ms"
},
{
"path": "cli/Options/GlobalOptions.cs",
"chars": 1539,
"preview": "using System;\nusing CommandLine;\n\nnamespace dug.Options\n{\n public class GlobalOptions\n {\n [Option('v', \"ver"
},
{
"path": "cli/Options/RunOptions.cs",
"chars": 10815,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing CommandLine;\nusing CommandLine.Text;\nusing DnsCl"
},
{
"path": "cli/Options/UpdateOptions.cs",
"chars": 6583,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing CommandLine;\nusing CommandLine.Text;\nusing dug.D"
},
{
"path": "cli/Parsing/CustomDnsServerMapping.cs",
"chars": 1547,
"preview": "using System;\nusing dug.Data.Models;\nusing dug.Utils;\nusing TinyCsvParser.Mapping;\nusing TinyCsvParser.Model;\nusing Syst"
},
{
"path": "cli/Parsing/DnsServerParser.cs",
"chars": 990,
"preview": "using dug.Data.Models;\nusing TinyCsvParser;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing System;\nusing T"
},
{
"path": "cli/Parsing/IDnsServerParser.cs",
"chars": 296,
"preview": "using System.IO;\nusing System.Linq;\nusing dug.Data.Models;\nusing TinyCsvParser.Mapping;\n\nnamespace dug.Parsing\n{\n pub"
},
{
"path": "cli/Parsing/IpAddressConverter.cs",
"chars": 370,
"preview": "using System;\nusing System.Net;\nusing TinyCsvParser.TypeConverter;\n\nnamespace dug.Parsing\n{\n internal class IpAddress"
},
{
"path": "cli/Parsing/LocalCsvDnsServerMapping.cs",
"chars": 479,
"preview": "using dug.Data.Models;\nusing TinyCsvParser.Mapping;\n\nnamespace dug.Parsing\n{\n public class LocalCsvDnsServerMapping :"
},
{
"path": "cli/Parsing/RemoteCsvDnsServerMapping.cs",
"chars": 481,
"preview": "using dug.Data.Models;\nusing TinyCsvParser.Mapping;\n\nnamespace dug.Parsing\n{\n public class RemoteCsvDnsServerMapping "
},
{
"path": "cli/Program.cs",
"chars": 2092,
"preview": "using System.Threading.Tasks;\r\nusing CommandLine;\r\nusing dug.Services;\r\nusing dug.Options;\r\nusing dug.Parsing;\r\nusing M"
},
{
"path": "cli/Resources/default_servers.csv",
"chars": 1000704,
"preview": "ip_address,country_code,city,dnssec,reliability\n8.8.8.8,US,,True,1\n208.67.222.222,US,Wright City,True,1\n46.105.55.84,FR,"
},
{
"path": "cli/Services/ConsoleTableService.cs",
"chars": 9532,
"preview": "using System.Reflection;\nusing System.Collections.Generic;\nusing System.Linq;\nusing DnsClient;\nusing dug.Data;\nusing dug"
},
{
"path": "cli/Services/ConsoleTemplateService.cs",
"chars": 4169,
"preview": "using System;\nusing System.Collections.Generic;\nusing dug.Data;\nusing dug.Data.Models;\nusing dug.Options;\nusing dug.Util"
},
{
"path": "cli/Services/DnsQueryService.cs",
"chars": 5337,
"preview": "using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Sys"
},
{
"path": "cli/Services/DnsServerService.cs",
"chars": 9729,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System."
},
{
"path": "cli/Services/IConsoleTableService.cs",
"chars": 675,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing DnsClient;\nusing dug.Data;\nusing dug"
},
{
"path": "cli/Services/IConsoleTemplateService.cs",
"chars": 272,
"preview": "using System.Collections.Generic;\nusing dug.Data;\nusing dug.Data.Models;\nusing dug.Options;\n\nnamespace dug.Services\n{\n "
},
{
"path": "cli/Services/IDnsQueryService.cs",
"chars": 448,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing DnsClient;\nusing dug.Data;\nusing dug"
},
{
"path": "cli/Services/IDnsServerService.cs",
"chars": 2903,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing dug.Data;\nusin"
},
{
"path": "cli/Services/IPercentageAnimator.cs",
"chars": 242,
"preview": "namespace dug.Services\n{\n public interface IPercentageAnimator\n {\n void EventHandler(string customString);\n"
},
{
"path": "cli/Services/PercentageAnimator.cs",
"chars": 4751,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Threading;\nusing Spectre.Console;\n\nnamespace dug.Services\n{\n pub"
},
{
"path": "cli/Utils/MarkupHelper.cs",
"chars": 3711,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing DnsClient;\nusing dug.Data;\n\n"
},
{
"path": "cli/Utils/ReflectionHelper.cs",
"chars": 411,
"preview": "using System;\n\nnamespace dug.Utils\n{\n public static class ReflectionHelper\n {\n public static object GetDefa"
},
{
"path": "cli/Utils/TemplateHelper.cs",
"chars": 3230,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing dug.Data;\nusing dug.Data.Models;\n\nnamespace dug."
},
{
"path": "cli/Utils.cs",
"chars": 596,
"preview": "using System;\n\nnamespace dug.Utils\n{\n public static class DugConsole\n {\n public static void Write(string co"
},
{
"path": "cli/auth_template",
"chars": 98,
"preview": "[login.ubuntu.com]\nmacaroon = macaroon_value\nunbound_discharge = ud_value\nemail = matt@unfrl.com\n\n"
},
{
"path": "cli/dug.csproj",
"chars": 1731,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n <PropertyGroup>\r\n <OutputType>Exe</OutputType>\r\n <TargetFramework>net10.0</"
},
{
"path": "cli/i18n/dug.Designer.cs",
"chars": 24515,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "cli/i18n/dug.de.resx",
"chars": 19217,
"preview": "<root>\n <resheader name=\"resmimetype\">\n <value>text/microsoft-resx</value>\n </resheader>\n <resheader nam"
},
{
"path": "cli/i18n/dug.es.resx",
"chars": 23821,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema\n\n Version 2.0\n\n The primary goals o"
},
{
"path": "cli/i18n/dug.resx",
"chars": 22519,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema\n\n Version 2.0\n\n The primary goals o"
},
{
"path": "cli/snap/snapcraft.yaml",
"chars": 1251,
"preview": "name: unfrl-dug # you probably want to 'snapcraft register <name>'\nbase: core18 # the base snap is the execution environ"
},
{
"path": "cli/snapcraft.Dockerfile",
"chars": 2316,
"preview": "FROM ubuntu:bionic as builder\n\n# Grab dependencies\nRUN apt update\nRUN apt dist-upgrade --yes\nRUN apt install --yes \\\n "
},
{
"path": "cli/test_custom_header_servers.csv",
"chars": 141,
"preview": "city,ip_address,country_code,dnssec,reliability\nRawalpindi,103.209.52.250,PK,False,0.85\nLake Saint Louis,8.8.8.8,US,True"
},
{
"path": "cli/test_custom_header_servers_colon_separated.csv",
"chars": 141,
"preview": "city:ip_address:country_code:dnssec:reliability\nRawalpindi:103.209.52.250:PK:False:0.85\nLake Saint Louis:8.8.8.8:US:True"
},
{
"path": "cli/test_custom_header_servers_color.csv",
"chars": 157,
"preview": "city,ip_address,country_code,dnssec,reliability,color\nRawalpindi,103.209.52.250,PK,False,0.85,red\nLake Saint Louis,8.8.8"
},
{
"path": "cli/test_servers.csv",
"chars": 80,
"preview": "ip_address,country_code,city,dnssec,reliability\n8.8.8.8,US,Mountain View,True,1\n"
},
{
"path": "cli.tests/XUnit/UnitTest1.cs",
"chars": 232,
"preview": "using System;\r\nusing dug.Options;\r\nusing Xunit;\r\n\r\nnamespace cli.tests\r\n{\r\n public class UnitTest1\r\n {\r\n [F"
},
{
"path": "cli.tests/XUnit/cli.tests.csproj",
"chars": 914,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n <PropertyGroup>\r\n <TargetFramework>net6.0</TargetFramework>\r\n\r\n <IsPackable"
},
{
"path": "cli.tests/bats/run.sh",
"chars": 3237,
"preview": "#!./cli.tests/bats/libs/bats/bin/bats\n# This test is designed for BATS. Ideally it should be able to be run from the roo"
},
{
"path": "dug/APKBUILD",
"chars": 342,
"preview": "# Contributor: buildozer <alpine-infra@lists.alpinelinux.org>\n# Maintainer:\npkgname=dug\npkgver=\npkgrel=0\npkgdesc=\"\"\nurl="
},
{
"path": "dug-docs/README.md",
"chars": 745,
"preview": "# Website\n\nThis website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator.\n\n##"
},
{
"path": "dug-docs/babel.config.js",
"chars": 89,
"preview": "module.exports = {\n presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
},
{
"path": "dug-docs/dockerfile",
"chars": 1223,
"preview": "# syntax=docker/dockerfile:1\n\n# Stage 1: Base image.\n## Start with a base image containing NodeJS so we can build Docusa"
},
{
"path": "dug-docs/docs/install.md",
"chars": 2251,
"preview": "---\nid: install\ntitle: Install\n---\n\n### Linux Deb (Debian, Ubuntu, Mint, Pop!_os)\n\n1. Go to the [latest release](https:/"
},
{
"path": "dug-docs/docs/introduction.md",
"chars": 3514,
"preview": "---\nid: introduction\ntitle: Introduction\nslug: /\n---\n\ndug is designed to be usable by humans (the default output is pret"
},
{
"path": "dug-docs/docs/mdx.md",
"chars": 521,
"preview": "---\nid: mdx\ntitle: Powered by MDX\n---\n\nYou can write JSX and use React components within your Markdown thanks to [MDX](h"
},
{
"path": "dug-docs/docs/run.md",
"chars": 13791,
"preview": "---\nid: run\ntitle: Run Verb\n---\n\n`run` provides the core functionality for dug and is used to query a large number of se"
},
{
"path": "dug-docs/docs/templated_input.md",
"chars": 6692,
"preview": "---\nid: templated_input\ntitle: Templated Input\n---\n\ndug allows users to specify the format of server data provided to it"
},
{
"path": "dug-docs/docs/templated_output.md",
"chars": 8603,
"preview": "---\nid: templated_output\ntitle: Templated Output\n---\n\nWhile the output of dug's `run` verb is human-readable pretty tabl"
},
{
"path": "dug-docs/docs/update.md",
"chars": 6523,
"preview": "---\nid: update\ntitle: Update Verb\n---\n\n`update` is designed to make it easy to manage the server list used by dug, and s"
},
{
"path": "dug-docs/docusaurus.config.js",
"chars": 2196,
"preview": "module.exports = {\n title: 'dug',\n tagline: 'A global DNS propagation checker on your CLI!',\n url: 'https://dug.unfrl"
},
{
"path": "dug-docs/package.json",
"chars": 944,
"preview": "{\n \"name\": \"dug-docs\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"scripts\": {\n \"docusaurus\": \"docusaurus\",\n \"sta"
},
{
"path": "dug-docs/sidebars.js",
"chars": 273,
"preview": "module.exports = {\n docs: [\n {\n type: 'category',\n label: 'Intro/Setup',\n items: ['introduction', 'in"
},
{
"path": "dug-docs/src/css/custom.css",
"chars": 1727,
"preview": "/* stylelint-disable docusaurus/copyright-header */\n/**\n * Any CSS included here will be global. The classic template\n *"
},
{
"path": "dug-docs/src/pages/index.js",
"chars": 2806,
"preview": "import React from 'react';\nimport clsx from 'clsx';\nimport Layout from '@theme/Layout';\nimport Link from '@docusaurus/Li"
},
{
"path": "dug-docs/src/pages/styles.module.css",
"chars": 559,
"preview": "/* stylelint-disable docusaurus/copyright-header */\n\n/**\n * CSS files with the .module.css suffix will be treated as CSS"
},
{
"path": "dug-docs/static/.nojekyll",
"chars": 0,
"preview": ""
}
]
About this extraction
This page contains the full source code of the unfrl/dug GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 82 files (1.2 MB), approximately 589.3k tokens, and a symbol index with 132 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.