Subdomains Tools Review: a full and detailed comparison of subdomain enumeration tools

Categories
HowTo YesWeRHackers

The enumeration of subdomains is part of an almost mandatory process when attacking a new target. However, there are dozens of tools to perform this task, using as many different sources and techniques. Bruteforce, DNS alteration, permutation, passive or active collection… To help you choose the best equipment for your daily hunt, we have compiled a detailed comparison of these tools.

This article is a guest blog post written by Six2dez.

Methodology

It has been almost a year since I did my first comparison of subdomain enumeration tools and since then new tools have appeared, well, to be honest, many new tools have appeared, some existing ones have improved and others have been displaced by new languages and technologies.

The following sections will describe the methodology followed to carry out the comparison and the aspects that have been kept in mind to assess the results.

Following the previous review, I have classified the tools according to the typology or technique used to collect data, for each type of technique measurements have been made in three different domains of one of the public programs on YesWeHack, specifically the program that has been chosen as a target is Lazada.

Techniques

  • Passive: these types of tools collect data from third-party services, both free and paid, which are based on API tokens and credits that you spend each time you request a data set from them in the case of paid model services. Others like GitHub, Wayback Machine, or Crt.sh might enforce some types of bans if you abuse them in a short amount of time, but most tools can handle this to avoid bans. In this topic, the more third-party sources you can request data from, the better. This data will be useful in the next steps of the reconnaissance process, even if the data for the subdomains is older or no longer available. To measure which tools are better than others, I have collected the sources used by the tools, the speed to return the data, and the amount of data returned.

  • DNS resolution: this topic will cover both DNS resolution and DNS brute force because in the end it is the same, just change the way the input is provided (list of subdomains vs target + list of words). The key points here are more complicated because we have to consider a combination of speed and precision, we don’t want as many results as we can because we need to determine which results are valid from a given input. To measure which tools are better than others in this field, I resolved a list of subdomains in the 3 target domains and checked the accuracy of the output and the speed to process the resolution with a list of subdomains with around 100K lines and another with more than 9 million subdomains.

  • Permutations: this is a special test because in this technique we only need to create a good quality dictionary to solve with any tool used for DNS resolution. The technique of alterations and permutations consists of creating a dictionary given a list of subdomains and a list of permutations, a good tool should iterate over the numbers up and down, and build as many combinations as possible. The key points here are the quantity of the dictionary and the quality of the results given. To measure which tools do this job successfully, I took the speed, the quantity, and manually checked the results to measure the quality.

Key values

  • Sources: number of sources integrated into the tool. 5 stars for the tool with the most tools implemented.

  • Speed: this is always an important point in any tool used, the faster it is, the faster you will be. The tool that takes the shortest time will score 5 stars.

  • Quantity: we usually want as many results as we can, so the tool that returns the most data will have 5 stars, except for the DNS resolution where I have measured this value and checked which tool has the most accurate results.

  • Quality: Only measured based on DNS resolution and permutations. I want to be clear, this is a completely subjective value based on my experience and how useful I find the results that the tools give me.

I have researched many (actually, MANY) tools on this topic and the first tool list for this review consisted of a list of over 50 tools, but during the analysis, I realized that most of the tools are making requests almost to the same sources, they process it and return the same data in the case of passive sources. So I decided to remove some tools from the comparison as they were not adding as much value as I would like from my point of view. Also, all the tools have been released with the best set of indicators I found to get the best results.

Technical data

All tools have been running on a new Ubuntu VPS with the following specs:

  • 2 CPU Cores.
  • 4 GB RAM.
  • No network limit.
  • 80 GB disk space.
  • Different locations (eu-central, us-central and ap-west).

As most of the bug hunters are running tasks on VPS, I chose a mid-tier host to avoid crashes due to low resource machines, anyway some tools crashed due to resource limitations, but I think these kinds of tools shouldn’t require a lot of CPU or RAM, in fact, it should be able to run on an RPi (not recommended though).

Targets

From Lazada public bug bounty program:

  • lazada.com
  • redmart.com
  • lazada.sg

Lists used

Results

All results have been compiled in a sheet to give you a global and synthetic review of each tool (time for execution, number of subdomains discovered, command used, wordlist used…).

Tools

TypeToolRepoStarsLatest releaseLatest commitProgramming Language
PassiveAmasshttps://github.com/OWASP/Amass6,1K3.15.012 nov 2021Go
PassiveSublist3rhttps://github.com/aboul3la/Sublist3r6,5K1.129 jul 2020Python
Passivecrobathttps://github.com/Cgboal/SonarSearch42817 sept 2021Go
Passivechaoshttps://github.com/projectdiscovery/chaos-client2700.1.920 oct 2021Go
Passivesubfinderhttps://github.com/projectdiscovery/subfinder4,4K2.4.920 oct 2021Go
Passiveassetfinderhttps://github.com/tomnomnom/assetfinder1,5K15 Apr 2020Go
Passivewaybackurlshttps://github.com/tomnomnom/waybackurls1,5K24 Apr 2020Go
Passivegauhttps://github.com/lc/gau1,6K2.0.615 nov 2021Go
Passivegithub-subdomainshttps://github.com/gwen001/github-subdomains27615 Apr 2021Go
Passivefindomainhttps://github.com/Findomain/Findomain2,1K5.0.09 nov 2021Rust
PassiveOneForAllhttps://github.com/shmilylty/OneForAll4,1K0.4.319 nov 2021Python
Resolution/BFshufflednshttps://github.com/projectdiscovery/shuffledns6921.0.420 oct 2021Go
Resolution/BFpurednshttps://github.com/d3mondev/puredns5802.0.125 jun 2021Go
Resolution/BFdnsxhttps://github.com/projectdiscovery/dnsx6291.0.719 nov 2021Go
Resolution/BFdnscanhttps://github.com/rbsec/dnscan64328 oct 2021Python
Resolution/BFgobusterhttps://github.com/OJ/gobuster5,3K3.1.021 jun 2021Go
Resolution/BFaiodnsbrutehttps://github.com/blark/aiodnsbrute4030.3.24 jun 2019Python
Resolution/BFmassdnshttps://github.com/blechschmidt/massdns2,1K1.0.011 nov 2021C
Resolution/BFAmasshttps://github.com/OWASP/Amass6,1K3.15.012 nov 2021Go
Resolution/BFrusolverhttps://github.com/Edu4rdSHL/rusolver1360.7.020 oct 2021Rust
Wordlistsaltdnshttps://github.com/infosec-au/altdns1,6K10 sep 2021Python
Wordlistsdnscewlhttps://github.com/codingo/DNSCewl2137 Jun 2021C++
Wordlistsgotatorhttps://github.com/Josue87/gotator1261.124 jul 2021Go
Wordlistsdmuthttps://github.com/bp0lr/dmut995 jun 2021Go
Wordlistsdnsgenhttps://github.com/ProjectAnte/dnsgen5111.0.424 mar 2020Python

Passive results

Tools with apisApis addedlazada.com Timelazada.com Resultsredmart.com Timeredmart.com Resultslazada.sg Timelazada.sg ResultsNotesCommand
Amass180:02:1252510:02:1552390:03:006610amass enum -passive -d domain.com
Sublist3r0:00:111430:00:11690:00:12102python3 sublist3r.py -d domain.com | tail -n +25
crobat0:00:01370:00:01100:00:0122crobat -s domain.com
chaos10:00:01810:00:01550:00:0170chaos -d domain.com -silent
subfinder150:00:4152650:00:2851100:00:305194subfinder -d domain.com -all -silent
assetfinder30:00:482410:00:051600:00:01229Inconsistente en tiempoassetfinder –subs-only domain.com
waybackurls0:00:011270:00:01600:00:2326waybackurls domain.com | unfurl -u domains
gau0:01:291340:01:32690:05:0143Inconsistente en tiempo y resultados (71m!)gau –subs domain.com | unfurl -u domains
github-subdomains10:00:101440:00:15720:00:1097github-subdomains -d domain.com -k -q -t .github_tokens -o result.txt
findomain40:00:062460:00:021810:00:08201findomain –quiet -t domain.com
OneForAll100:03:184250:02:206130:01:42155python3 oneforall.py –target domain.com –alive False –brute False –dns False –fmt json –path results/ run && cat results/domain.com.json | jq ‘.[] | .subdomain’
No APISCustom Apislazada.com Timelazada.com Resultsredmart.com Timeredmart.com Resultslazada.sg Timelazada.sg ResultsNotesCommand
Amass0:02:0242330:02:582530:03:143938amass enum -passive -d domain.com
Sublist3rpython3 sublist3r.py -d domain.com | tail -n +25
crobatcrobat -s domain.com
chaoschaos -d domain.com -silent
subfinder0:00:242490:00:061150:00:26160subfinder -d domain.com -all -silent
assetfinderInconsistente en tiempoassetfinder –subs-only domain.com
waybackurlswaybackurls domain.com | unfurl -u domains
gauInconsistente en tiempo y resultados (71m!)gau –subs domain.com | unfurl -u domains
github-subdomainsgithub-subdomains -d domain.com -k -q -t .github_tokens -o result.txt
findomainfindomain –quiet -t domain.com
OneForAllpython3 oneforall.py –target domain.com –alive False –brute False –dns False –fmt json –path results/ run && cat results/domain.com.json | jq ‘.[] | .subdomain’

DNS results

BF short
Toollazada.com Timelazada.com Resultsredmart.com Timeredmart.com Resultslazada.sg Timelazada.sg Results% failureNotesCommand
shuffledns0:00:291200:00:361020:00:3911957,89shuffledns -d domain.com -w ~/Tools/subdomains_big.txt -r ~/Tools/resolvers.txt
puredns0:00:09750:00:09160:00:1560-1,32puredns bruteforce ~/Tools/subdomains_big.txt domain.com -w puredns_domain.com_bf.txt -r ~/Tools/resolvers.txt
dnsx
dnscan0:21:56820:14:37430:19:36747,89python3 Tools/dnscan/dnscan.py -d domain.com -w ~/Tools/subdomains_big.txt -L ~/Tools/resolvers.txt
gobuster0:08:55690:05:51150:08:5259-9,21gobuster dns -d domain.com -w ~/Tools/subdomains_big.txt -q -t 100
aiodnsbrute0:13:281510:14:53850:18:4820298,68aiodnsbrute -w ~/Tools/subdomains_big.txt -r ~/Tools/resolvers.txt
massdns
amass0:29:35750:16:41200:28:171040-1,32amass enum -brute -d domain.com -rf ~/Tools/resolvers.txt -w ~/Tools/subdomains_big.txt
rusolver0:12:55590:12:19150:11:0449-22,37cat ~/Tools/subdomains_big.txt | rusolver -d domain.com -r ~/Tools/resolvers.txt
Baseline results761665
BF long
Toollazada.com Timelazada.com Resultsredmart.com Timeredmart.com Resultslazada.sg Timelazada.sg Results% failureNotesCommand
shuffledns3:39:00198341:00:3139111:28:331137912948,68shuffledns -d domain.com -w ~/Tools/subdomains.txt -r ~/Tools/resolvers.txt
puredns0:09:191520:08:15390:09:461080,00puredns bruteforce ~/Tools/subdomains.txt domain.com -w puredns_domain.com_bf.txt -r ~/Tools/resolvers.txt
dnsx
dnscan2:19:071452:25:052982:11:02112-4,61python3 Tools/dnscan/dnscan.py -d domain.com -w ~/Tools/subdomains.txt -L ~/Tools/resolvers.txt
gobuster21:00:002000013057,89More threads, less resultsgobuster dns -d domain.com -w ~/Tools/subdomains.txt -q -t 100
aiodnsbrute2:59:2534502169,74aiodnsbrute -w ~/Tools/subdomains.txt -r ~/Tools/resolvers.txt
massdns
amassCrashCrashCrashamass enum -brute -d domain.com -rf ~/Tools/resolvers.txt -w ~/Tools/subdomains.txt
rusolver9:54:029811:27:352110:09:2276-35,53More threads more time ¿?cat ~/Tools/subdomains.txt | rusolver -d domain.com -r ~/Tools/resolvers.txt
Baseline results15238109

AltPerm results

20 subs lazada.com
ToolsTimeSizeUnique linesNotesResolvedCommand
altdns0:00:012,5M104408485altdns -i subdomains.txt -w permutations.txt
dnscewl0:00:011,3M52261135DNScewl –tL subdomains.txt -p permutations.txt –level=0 –subs –no-color | tail -n +14
gotator0:00:023,6M143583642gotator -sub subdomains.txt -perm permutations.txt -depth 1 -numbers 10 -mindup -adv -md -silent
dmut0:00:012,5M104728415cat subdomains.txt | dmut -d permutations.txt –save-gen
dnsgen0:00:012,7M108302631dnsgen subdomains.txt –wordlist permutations_list.txt
150 subs lazada.com
ToolsTimeSizeUnique linesNotesResolvedCommand
altdns0:00:0221M8477741410altdns -i subdomains.txt -w permutations.txt
dnscewl0:00:029,5M397162296DNScewl –tL subdomains.txt -p permutations.txt –level=0 –subs –no-color | tail -n +14
gotator0:00:1832M12172981747gotator -sub subdomains.txt -perm permutations.txt -depth 1 -numbers 10 -mindup -adv -md -silent
dmut0:00:0121M850463805cat subdomains.txt | dmut -d permutations.txt –save-gen
dnsgen0:00:1125M9229301729dnsgen subdomains.txt –wordlist permutations_list.txt
500 subs lazada.com
ToolsTimeSizeUnique linesNotesResolvedCommand
altdns0:00:09116M3268905altdns -i subdomains.txt -w permutations.txt
dnscewl0:00:0337M1166233DNScewl –tL subdomains.txt -p permutations.txt –level=0 –subs –no-color | tail -n +14
gotator0:03:38645M14755896gotator -sub subdomains.txt -perm permutations.txt -depth 1 -numbers 10 -mindup -adv -md -silent
dmut0:00:03122M3280384cat subdomains.txt | dmut -d permutations.txt –save-gen
dnsgen0:01:08240M5625287dnsgen subdomains.txt –wordlist permutations_list.txt

💡 The full tables are available here

Tools

Passive tools

Amass

Supported by OWASP and constantly updated, Amass is the most popular tool when it comes to subdomains and reconnaissance things. It supports many features, options, and settings, but for this review, I will focus on passive and active techniques.

Pros

  • It has more sources supported than any other tool, it has more than 80 sources integrated, both paid and free.
  • Provides more subdomains than any other tool from passive sources, even when we compare them without API keys.
  • It has many functions to use as a recognition suite.

Cons

  • Slower than most tools in almost all its functions.
  • Crashes when bruteforcing with large word lists..
  • Lack of functions in DNS bruteforce, has no control over wildcards or trusted resolvers.

Results

SourcesSpeedQuantityDNS SpeedDNS Quality
★★★★★★★☆☆☆★★★★★★★★★★★★★☆☆

Sublist3r

Sublist3r was one of the first most used tools to search subdomains successfully, it also integrated subbrute to add a DNS brute force module, but lately it has been replaced by others like amass or subfinder due to lack of updates, sources and maintenance.

Pros

  • It’s faster than most.
  • It has interesting features like port scan or subbrute module.

Cons

  • Returns fewer results than expected.
  • The bruteforce module has very limited features.
  • Outdated.

Results

SourcesSpeedQuantity
★★☆☆☆★★★★☆★★☆☆☆

Crobat

Client for the SonarSearch database that retrieves data from Rapid7’s Project Sonar data set, one of the largest publicly available data sets.

Pros

  • It’s very fast.
  • Consistent amount of results on each execution.

Cons

  • Sometimes SonarSearch API is down, making it useless.

Results

SourcesSpeedQuantity
★☆☆☆☆★★★★★★★☆☆☆

Chaos

Like Crobat, it is a tool for a specific source, in this case it is the official client of Project Discovery’s Chaos database that retrieves data from its own dataset.

Pros

  • It’s really fast.
  • Returns a fairly large amount of data without the need for third-party sources.

Cons

  • Chaos API key is only provided to invited users.

Results

SourcesSpeedQuantity
★☆☆☆☆★★★★★★★☆☆☆

Subfinder

In recent years, this has been the most famous tool for obtaining subdomains of data sources, developed by Project Discovery.

Pros

  • Quite fast for the number of sources it scrapes.
  • One of the best in terms of sources and amount recovered.

Cons

  • It could support more sources to be the most complete tool.

Results

SourcesSpeedQuantity
★★★★☆★★★★☆★★☆☆☆

Assetfinder

Subdomain extraction tool developed by the well-known tomnomnom.

Pros

  • It doesn’t need any API key to get a decent amount of subdomains.

Cons

  • Inconsistent in the time required to show results.

Results

SourcesSpeedQuantity
★★★☆☆★★★☆☆★★☆☆☆

WaybackUrls

WaybackMachine URL scraping tool. In this case, it can be used to filter subdomains from the URL list with unfurl.

Pros

  • Really fast for the amount of data retrieved.

Cons

  • Just get data from WaybackMachine service.
  • It could have some features to filter the output or avoid certain extensions for example.

Results

SourcesSpeedQuantity
★★☆☆☆★★★★★★★☆☆☆

gau

Similar to WaybackUrls with different sources, but the functionality is the same and the output needs to be filtered as well.

Pros

  • Usually returns the same data as Waybackurls plus a few more results.

Cons

  • Very inconsistent in the amount of data recovered.
  • Slow for the amount of data returned.

Results

SourcesSpeedQuantity
★★★☆☆★★☆☆☆★★☆☆☆

github-subdomains

Tool to extract subdomains from the GitHub search function.

Pros

  • Fast
  • Most of the tools do not have GitHub as a source.

Cons

  • The API needs a good amount of GitHub tokens to work quickly.
  • Depending on the target it can take a long time.

Results

SourcesSpeedQuantity
★☆☆☆☆★★★☆☆★★★☆☆

findomain

Free and limited version of the paid version of Findomain. It has a decent amount of built-in fonts and a good balance between speed and data, it’s also the only tool written in Rust.

Pros

  • Fast
  • Frequent update
  • Good amount of features in the free plan

Cons

  • Few subdomains returned

Results

SourcesSpeedQuantity
★★★☆☆★★★★☆★★☆☆☆

OneForAll

This was an unknown tool to me a few months ago and I was amazed at the big number of sources you can get.

Pros

  • Lot of sources integrated
  • Frequently updated

Cons

  • Fewer subdomains than expected given the number of sources.

Results

SourcesSpeedQuantity
★★★★☆★☆☆☆☆★★★☆☆

DNS Resolving / Bruteforce

ShuffleDNS

It’s the DNS resolution tool developed by Project Discovery, I have been using it for a long time for brute force tasks.

Pros

  • Many options to tune the scan
  • Quite fast
  • Massdns wrapper

Cons

  • Trusted resolver not editable
  • Bad wildcard management
  • Sometimes crashes with large wordlists

Results

DNS SpeedDNS Quality
★★★★☆★★★☆☆

Puredns

My preferred tool for DNS resolution and brute force, version 2 was released this year with a ton of improvements.

Pros

  • Best wildcard filtering
  • Almost the fastest
  • The most accurate

Cons

  • Could have multiple domains as targets
  • No option to filter different DNS responses

Results

DNS SpeedDNS Quality
★★★★☆★★★★★

dnsx

Again, another Project Discovery tool, but this time it’s focused on DNS responses, it’s like a modern dig replacement that can be used to resolve a large number of domains.

Pros

  • Different DNS response filtering
  • Raw output
  • Multiple features about DNS requests

Cons

  • Can’t run bruteforce
  • Bad wildcard filtering

Results

DNS SpeedDNS Quality
★★★☆☆★★☆☆☆

dnscan

A complete DNS toolkit written in Python with all the basic features and some extra features.

Pros

  • Recursive brute force allowed
  • Fairly accurate
  • Failback to TXT and MX records

Cons

  • No trusted resolvers
  • No wildcard filtering
  • No resolving, just bruteforce

Results

DNS SpeedDNS Quality
★★★★☆★★★★☆

gobuster

Originally intended to be a web fuzzer, a new feature was added over a year ago to allow DNS bruteforce.

Pros

  • Wildcard filtering
  • Quality results

Cons

  • List of custom resolvers not allowed
  • Loss control with a large list of subdomains
  • No resolving, just BF

Results

DNS SpeedDNS Quality
★★★☆☆★★★★☆

aiodnsbrute

Non-maintained asynchronous DNS bruteforce tool written in Python, focused on speed according to the repository documentation.

Pros

  • List of custom resolvers allowed.
  • Different DNS records.

Cons

  • Last commit 2019
  • No wildcard checks.

Results

DNS SpeedDNS Quality
★★☆☆☆★★★☆☆

massdns

This tool is the core of many other tools as it offers the fastest DNS resolution in an incredibly short amount of time, some people use it instead of its wrappers.

Pros

  • The fastest.
  • Serves as a base and core for multiple tools.
  • Trillions of options.

Cons

  • Running independently needs heavy output processing
  • No wildcard checks.
  • No BF, just resolver.

Results

DNS SpeedDNS Quality
★★★★★★★★☆☆

Rusolver

The Findomain developer released this DNS resolver as part of their main tool and it is also written in Rust.

Pros

  • Wildcard checks.
  • Allows resolving and BF.

Cons

  • Useless with big wordlists

Results

DNS SpeedDNS Quality
★★★☆☆★★★★☆

Alterations / Permutations

Altdns

Another tool from a famous hacker, infosec-au is one of the most used tools for permutations developed in Python and regularly maintained.

Pros

  • Thread control.
  • It allows solving the generated list.

Cons

  • No iteration of numbers
  • Do not combine existing data

Results

Perm SpeedPerm QuantityPerm Quality
★★★★☆★★★☆☆★★★★☆

dnscewl

Again, another well-known guy from the bug bounty scene, a tool developed by codingo and developed in C++.

Pros

  • Really fast
  • Built-in word list
  • Iterate numbers
  • Append and prepend alterations

Cons

  • Lose some combinations
  • Crashes when the file is larger than 3GB

Results

Perm SpeedPerm QuantityPerm Quality
★★★★☆★☆☆☆☆★★★★☆

gotator

Tool developed by a good friend and colleague keeping in mind all the needs that a permutations tool should have.

Pros

  • More complete options
  • Thread control
  • Built-in word list
  • Depth control
  • Avoid dupes and silly combinations.

Cons

  • Slow

Results

Perm SpeedPerm QuantityPerm Quality
★☆☆☆☆★★★★★★★★★★

dmut

Golang tool with an impressive effort in speed and a good balance in quality.

Pros

  • The fastest
  • Allows you to solve generated lists
  • Thread control

Cons

  • Lack of built-in wordlist
  • Don’t iterate over numbers

Results

Perm SpeedPerm QuantityPerm Quality
★★★★★★★★☆☆★★★☆☆

dnsgen

Probably one of the first tools of this type to become famous, it has a lot of different permutations which adds good quality results.

Pros

  • Append and prepend words
  • Iterate numbers
  • Combine existing subdomains

Cons

  • No threads control
  • Creates dumb combinations

Results

Perm SpeedPerm QuantityPerm Quality
★★☆☆☆★★★★☆★☆☆☆☆

Conclusion

After all these hours spent reviewing tools, subdomains, DNS requests, number of responses and other data, I have come to different conclusions that I will leave in the form of key points:

  • It looks like Golang is finally starting to assert itself as an offensive development language against Python.

  • The subdomain enumeration tools are doing their job better day by day, making the recognition process easier, which should be infinitely appreciated.

  • It’s fine to develop your own tools, but if you plan to release them as open source to the community, think about whether you can improve on a tool that already exists before creating another one that is very similar to what already exists.

  • Anyway, please keep contributing to the foss world.

Finally, I would like to remind that there are other subdomain enumeration techniques, some more manual, some more complicated or only applied to certain targets that deserve to be investigated and understood, such as Google Analytics ID, AzureAD tenant domains, code scraping, TLS protocol certificate analysis.

Now comes the winners:

Passive

🥇 Amass
🥈 Subfinder
🥉 Findomain

Amass continues having a huge advantage in terms of the number of integrated third parties and that is a key point in these tools, so from my point of view it is unbeatable. The rest of the winners obtain the position by the number of integrated sources which is directly related to the number of results.

DNS resolution / DNS Bruteforcing

🥇 Puredns
🥈 Dnscan
🥉 Shuffledns

The amount of options Puredns has to fine-tune DNS resolution, how fast it does it (at the cost of consuming bandwidth) and how focused it is on resolving subdomains effectively make it without a doubt the best DNS resolution tool for pentesters and bug hunters without a doubt. Dnscan has been a pleasant surprise for me as it has achieved a stability and quality of results that I did not expect, while shuffledns I think needs to be revised and improved in the filtering of wildcards and the accuracy of the results returned.

Alterations / Permutations

🥇 Gotator
🥈 Altdns
🥉 Dmut

In this case, all the tools in the top 3 have obtained the same number of stars, so I had to review the results in more detail. I have put Gotator in first place because the quality and quantity of results is far superior to the rest and although it is slower, it is not a value that seems to me as important as the quality of the result. As for altdns, I have put it in second place for the same reason, leaving dmut in third place.

End

I hope you enjoyed the review as much as I did writing it, do not hesitate to contact me through the channel you prefer, you will find me as six2dez and I will be happy to talk about any topic 🙂