Skip to main content

An easy way to customize the dns resolution

Project description

Build Status Coverage Status PyPI version

hookdns

HookDNS is a library which allow you to modify a name resolution in your Python script without any modification in your hosts file or by using a fake DNS resolver.

import requests

from hookdns import hosts

with hosts({"example.org": "127.0.0.1"}):
    ...
    r = requests.get("http://example.org")  # the request is sent to your local server
    ...

Installation

pip install hookdns

Usage

Custom DNS resolutions are describe by a dictionnary where the keys are hostnames and the values the expected corresponding addresses.

{
    "hostname1": "addr1",
    "hostname2": "addr2"
}

hostname and addr could be a domain name or a string representation of an IPv4/IPV6.

Example using the patch as a decorator

import requests

from hookdns import hosts

@hosts({"example.org": "127.0.0.1"})
def myfunc():
    ...
    r = requests.get("http://example.org")  # the request is sent to your local server
    ...

Example using the patch as a context manager

import requests

from hookdns import hosts

with hosts({"example.org": "localhost"}):
    ...
    r = requests.get("http://example.org")  # the request is sent to your local server
    ...

Options

By default the following function calls are intercepted: socket.gethostbyname, socket.gethostbyname_ex and socket.getaddrinfo.

You can limit the interception to only a restricted list of function.

import socket

from hookdns import hosts

with hosts({"example.org": "localhost"}, only=["gethostbyname"]):
    ...
    addr = socket.gethostbyname("example.org")  # returns "127.0.0.1"
    print("gethostname returns: %s" % addr)

    _, _, addr = socket.gethostbyname_ex("example.org")  # returns the real ip address for example.org
    print("gethostname_ex returns: %s" % addr[0])
    ...    
gethostname returns: 127.0.0.1
gethostname_ex returns: 93.184.216.34

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

hookdns-1.1.1.tar.gz (10.1 kB view hashes)

Uploaded Source

Built Distribution

hookdns-1.1.1-py3-none-any.whl (9.5 kB view hashes)

Uploaded Python 3

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