https://github.com/s3rgeym/python-dns-client
Python DNS Client Library
https://github.com/s3rgeym/python-dns-client
dig dns internet python
Last synced: 10 months ago
JSON representation
Python DNS Client Library
- Host: GitHub
- URL: https://github.com/s3rgeym/python-dns-client
- Owner: s3rgeym
- License: other
- Created: 2024-03-01T05:56:42.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-04T09:07:14.000Z (over 2 years ago)
- Last Synced: 2025-02-15T03:24:14.929Z (over 1 year ago)
- Topics: dig, dns, internet, python
- Language: Python
- Homepage:
- Size: 62.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Python DNS Client Library
[  ]()
[  ]()
[  ]()
Python client library for sending DNS queries.
Featurtes:
* supports DNS over TLS (DOT)
* contains adapter for requests
* threadsafe
* null-dependency
Install:
```bash
# from pypi.org
pip install dns-client
# latest commit
pip install git+https://github.com/s3rgeym/python-dns-client.git
```
Examples:
```python
In [1]: from dns_client import DNSClient, RecordType
In [2]: c = DNSClient('1.1.1.1', over_tls=True)
In [3]: c.query('ya.ru', RecordType.AAAA)
Out[3]: [Record(name='ya.ru', qtype=, qclass=, ttl=76, value='2a02:6b8::2:242')]
In [4]: c.query('ya.ru', RecordType.MX)
Out[4]: [Record(name='ya.ru', qtype=, qclass=, ttl=2242, value=(10, 'mx.yandex.ru'))]
In [5]: c.get_query_response('ya.ru')
Out[5]: Packet(header=Header(id=47527, response=True, opcode=, authoritative=False, truncated=False, recursion_desired=True, recursion_available=True, reserved=False, authentic_data=False, check_disabled=False, rcode=, num_questions=1, num_records=2, num_authorities=0, num_additionals=0), questions=[Question(name='ya.ru', qtype=, qclass=)], records=[Record(name='ya.ru', qtype=, qclass=, ttl=266, value='77.88.55.242'), Record(name='ya.ru', qtype=, qclass=, ttl=266, value='5.255.255.242')])
In [6]: c.get_all_records('ya.ru')
Out[6]:
[('A', '5.255.255.242'),
('A', '77.88.55.242'),
('AAAA', '2a02:6b8::2:242'),
('MX', (10, 'mx.yandex.ru')),
('NS', 'ns1.yandex.ru'),
('NS', 'ns2.yandex.ru'),
('TXT',
'_globalsign-domain-verification=eLi0_-xATuNmRfuTIX8VQIvgfyi7Od7Hph4V0yNisF'),
('TXT',
'_globalsign-domain-verification=xUUDG4u7Zo56EmmFewz7Y4UK3MfAU7QSjAgBsy0w6q'),
('TXT',
'google-site-verification=SVTEeUiCU4KV-5qGw4o4JPok7mfsP8NtQTIdN6tt6Nw'),
('TXT', 'v=spf1 redirect=_spf.yandex.ru'),
('TXT',
'_globalsign-domain-verification=dHoe580bPQ-lfi_vh-BEIwB4NAtUwURIzrzsivByVL'),
('TXT', 'e1c8e4dd3d13fad0dd9e8ed54a1813ececd3d5412fb16c4ed2c0612332950fe')]
```
You can use `dns-client` with `requests`:
```python
from dns_client.adapters.requests import DNSClientSession
s = DNSClientSession('8.8.8.8')
r = s.get('https://google.com')
print(r.headers)
```
CLI Usage:
```bash
$ python -m dns_client ya.ru -t ns -H 8.8.8.8 --tls -pr
Response Flags = 0x8180
1... .... .... .... = Response (True)
.000 0... .... .... = Opcode ()
.... .0.. .... .... = Authoritative (False)
.... ..0. .... .... = Truncated (False)
.... ...1 .... .... = Recursion Desired (True)
.... .... 1... .... = Recursion Available (True)
.... .... .0.. .... = Reserved (False)
.... .... ..0. .... = Authentic Data (False)
.... .... ...0 .... = Check Disabled (False)
.... .... .... 0000 = Rcode ()
Number of Records : 2
Number of Questions : 1
Number of Authorities : 0
Number of Additionals : 0
ns1.yandex.ru
ns2.yandex.ru
```
| Arg | Desc |
| --- | --- |
| `-t` | record type |
| `-H` | dns address |
| `--tls` | dns over tls aka d.o.t. |
| `-pr` | print response |
See all arguments:
```bash
python -m dns_client -h
```