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_consulto 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.