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 dns.message
|
||||
import dns.name
|
||||
@@ -6,13 +7,14 @@ import dns.rdatatype
|
||||
import dns.resolver
|
||||
import httpx
|
||||
import ipaddress
|
||||
import asyncio
|
||||
from sys import exit
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
epilog="Nagios/Icinga compatible check for DNS, DOT (DNS over TLS), DOH (DNS over HTTPS)",
|
||||
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")
|
||||
parser.add_argument("-t", "--type", choices=["A", "AAAA", "TXT"], \
|
||||
default="A", help="Type to check\ndefault: %(default)s")
|
||||
@@ -43,6 +45,18 @@ def doh(query,server):
|
||||
except httpx.ConnectError as 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):
|
||||
server = get_ip(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 == "dot"): response = dot(query,server)
|
||||
if(mode == "doh"): response = doh(query,server)
|
||||
if(mode == "doq"): response = doq(query,server)
|
||||
analyze(address,type,server,response)
|
||||
|
||||
def analyze(address,type,server,response):
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
dnspython
|
||||
httpx
|
||||
h2
|
||||
dnspython[doh,dnssec,idna,doq]
|
||||
Reference in New Issue
Block a user