fixes and start implemeting doq
This commit is contained in:
8
README.md
Normal file
8
README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
## How to build
|
||||||
|
```
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate
|
||||||
|
pip install -U pip
|
||||||
|
pip install -r requirements
|
||||||
|
pyinstaller --onefile check_dns_advanced.py --collect-all importlib --collect-all h2 --collect-all httpx --collect-all httpcore
|
||||||
|
```
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#!/bin/env python
|
||||||
import argparse
|
import argparse
|
||||||
import dns.message
|
import dns.message
|
||||||
import dns.name
|
import dns.name
|
||||||
@@ -6,13 +7,14 @@ import dns.rdatatype
|
|||||||
import dns.resolver
|
import dns.resolver
|
||||||
import httpx
|
import httpx
|
||||||
import ipaddress
|
import ipaddress
|
||||||
|
import asyncio
|
||||||
from sys import exit
|
from sys import exit
|
||||||
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
epilog="Nagios/Icinga compatible check for DNS, DOT (DNS over TLS), DOH (DNS over HTTPS)",
|
epilog="Nagios/Icinga compatible check for DNS, DOT (DNS over TLS), DOH (DNS over HTTPS)",
|
||||||
formatter_class=argparse.RawTextHelpFormatter)
|
formatter_class=argparse.RawTextHelpFormatter)
|
||||||
parser.add_argument("-m", "--mode", choices=["dns", "dot", "doh"], \
|
parser.add_argument("-m", "--mode", choices=["dns", "dot", "doh","doq"], \
|
||||||
default="dns", help="Check Mode: dns = normal DNS query\n dot = DNS over TLS\n doh = DNS over HTTPs\ndefault: %(default)s")
|
default="dns", help="Check Mode: dns = normal DNS query\n dot = DNS over TLS\n doh = DNS over HTTPs\ndefault: %(default)s")
|
||||||
parser.add_argument("-t", "--type", choices=["A", "AAAA", "TXT"], \
|
parser.add_argument("-t", "--type", choices=["A", "AAAA", "TXT"], \
|
||||||
default="A", help="Type to check\ndefault: %(default)s")
|
default="A", help="Type to check\ndefault: %(default)s")
|
||||||
@@ -43,6 +45,18 @@ def doh(query,server):
|
|||||||
except httpx.ConnectError as e:
|
except httpx.ConnectError as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
|
def doq(query,server):
|
||||||
|
async def amulti(query):
|
||||||
|
global response
|
||||||
|
async with dns.quic.AsyncioQuicManager() as manager:
|
||||||
|
connection = manager.connect(get_ip(server), 853)
|
||||||
|
r = await dns.asyncquery.quic(query, get_ip(server), port=443, connection=connection)
|
||||||
|
print(r)
|
||||||
|
response = r
|
||||||
|
|
||||||
|
asyncio.run(amulti(query))
|
||||||
|
return response
|
||||||
|
|
||||||
def dot(query,server):
|
def dot(query,server):
|
||||||
server = get_ip(server)
|
server = get_ip(server)
|
||||||
r = dns.query.tls(q=query, where=server)
|
r = dns.query.tls(q=query, where=server)
|
||||||
@@ -61,6 +75,7 @@ def query(mode,address,type,server):
|
|||||||
if(mode == "dns"): response = dns53(query,server)
|
if(mode == "dns"): response = dns53(query,server)
|
||||||
if(mode == "dot"): response = dot(query,server)
|
if(mode == "dot"): response = dot(query,server)
|
||||||
if(mode == "doh"): response = doh(query,server)
|
if(mode == "doh"): response = doh(query,server)
|
||||||
|
if(mode == "doq"): response = doq(query,server)
|
||||||
analyze(address,type,server,response)
|
analyze(address,type,server,response)
|
||||||
|
|
||||||
def analyze(address,type,server,response):
|
def analyze(address,type,server,response):
|
||||||
|
|||||||
@@ -1,3 +1 @@
|
|||||||
dnspython
|
dnspython[doh,dnssec,idna,doq]
|
||||||
httpx
|
|
||||||
h2
|
|
||||||
Reference in New Issue
Block a user