Skip to main content

Berserker Resolver is fast mass dns resolver which can bypass loadbalancers

Project description

Berserker Resolver is fast mass dns resolver which can bypass loadbalancers.

Tested with Python 2.7.8 and Python 3.4.2. But hope it works with many other versions.

Goal

For example, YouTube is using loadbalancers and nameservers returns set of ip addresses with small TTL. When TTL expired nameservers returns another set of ip addresses. How we can get ALL ip addresses? Of course, we know Google networks, but what about others sites?

We can query set of nameservers many times in the hope of getting all addresses. And so Berserker Resolver emerged.

Backend of Berserker Resolver is dnspython.

Concuerrence

Resolving in one thread is very boring. Berkserer Resolver using threads and it’s really fast approach.

But maybe add some asynchronous code (asyncio/coroutine) in the future. See TODO on GitHub.

Features

Sometimes we need resolve domains with www prefix. Berserker Resolver can add this prefix to the list of domains automatically. See more info below.

Explanatory example

Install package.

pip install berserker_resolver

Initialize resolver.

from berserker_resolver import ThreadResolver

resolver = ThreadResolver()

to_resolve = [‘ya.ru’,]

resolved = resolver(to_resolve)

print(resolved) # [(‘ya.ru’, {‘213.180.204.3’, ‘93.158.134.3’, ‘213.180.193.3’})]

Params

Params are keyword arguments to the constructor.

  • threads is in how many threads resolve domains. Default is 8.

  • tries is how many times each nameserver will be quered. Default is 2.

  • lifetime is timeout for each query. Default is 2.

  • nameservers is nameservers list. Default is [‘8.8.8.8’, ‘4.2.2.1’].

If www_resolve is True resolver will duplicate domains with www prefix. _Make sure that your domains list must NOT contain domains with www prefix for this case!_ Sometime this will be fixed. :)

from berserker_resolver import ThreadResolver

resolver = ThreadResolver(www_resolve=True)

to_resolve = [‘ya.ru’,]

resolved = resolver(to_resolve)

print(resolved) # [(‘ya.ru’, {‘213.180.204.3’, ‘93.158.134.3’, ‘213.180.193.3’}), (‘www.ya.ru’, {‘213.180.204.3’, ‘93.158.134.3’, ‘213.180.193.3’})]

If www_resolve_combine is True resolver will combine domain with www prefix to his no-www version.

from berserker_resolver import ThreadResolver

resolver = ThreadResolver()

to_resolve = [‘test.example’,]

resolved = resolver(to_resolve)

print(resolved) # [(‘test.example’, {‘1.1.1.1’})]

to_resolve = [‘www.test.example’,]

resolved = resolver(to_resolve)

print(resolved) # [(‘www.test.example’, {‘2.2.2.2’})]

resolver = ThreadResolver(www_resolve=True, www_resolve_combine=True)

to_resolve = [‘test.example’,]

resolved = resolver(to_resolve)

print(resolved) # [(‘test.example’, {‘1.1.1.1’, ‘2.2.2.2’})]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

berserker_resolver-0.0.3.tar.gz (4.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page