fixes and start implemeting doq

This commit is contained in:
Robert Walter
2024-03-19 17:29:45 +01:00
parent 35ed90d23b
commit 7c32bed902
3 changed files with 25 additions and 4 deletions

8
README.md Normal file
View 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
```

View File

@@ -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):

View File

@@ -1,3 +1 @@
dnspython dnspython[doh,dnssec,idna,doq]
httpx
h2