A python module that patches
socket
to query a certain DNS
server for SRV records when creating connections.
pip install srv-hijacker
This module exposes exactly one function:
import srv_hijacker
srv_hijacker.hijack(
host_regex=r'service.consul$',
srv_dns_host='127.0.0.1',
srv_dns_port=8600,
libraries_to_patch=['psycopg2']
)
Note: Only connections that match the host_regex
are patched. All other
connections are the same as before.
srv_dns_host
and srv_dns_port
are optional, if not provided the default
nameservers and ports configured.
Additionally, A list of supported third party libraries can be given with libraries_to_patch
argument. The libraries are patched according to their specific DNS resolution method,
or PatchError
is raised if the library is not supported.
See srv_hijacker.PATCHABLE_LIBS
for a list of all supported libraries.
- Run
make run_consul
to boot up a DNS server to test against - Run
make test
Only confirmed to work with Python 3.7. Tests use requests
, which uses
socket
internally.
The use case this was designed for is to transparently patch requests
so that
calls to endpoints like your_service.service.consul
hit consul's DNS server
and use the host + port given in the SRV query.