summaryrefslogtreecommitdiff
path: root/agent
diff options
context:
space:
mode:
author韩丁康 <[email protected]>2024-03-29 10:59:45 +0800
committer韩丁康 <[email protected]>2024-03-29 10:59:45 +0800
commit27be271931e19252661ca94c5f3c790ff67ccf44 (patch)
treef6fbe6a5d98771c563db01fa1ca638a60745f817 /agent
parent337ba84f78c09f593ee6e34c27a2d45f2b3d698e (diff)
agent端增加域名记录验证功能
Diffstat (limited to 'agent')
-rw-r--r--agent/apps/datacheck.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/agent/apps/datacheck.py b/agent/apps/datacheck.py
new file mode 100644
index 0000000..3c066cf
--- /dev/null
+++ b/agent/apps/datacheck.py
@@ -0,0 +1,54 @@
+# DNS记录测试接口
+import dns.nameserver
+from apiflask import APIFlask,APIBlueprint
+from apiflask.fields import List,String,Nested
+from apiflask.validators import OneOf
+from dns import resolver
+
+bp=APIBlueprint("check",__name__,url_prefix="/check")
+
[email protected]("通过指定的解析器获取指定域名的A/AAAA记录")
+ 'rev':String(required=True),
+ 'domain':String(required=True),
+ 'qtype':String(required=True,validate=OneOf(['A','AAAA',"CNAME","NS"]))
+ },location='query')
+def record(query_data):
+ # 特殊协议头
+ protols=["https","tls"]
+ ans=[]
+ # 参数读取
+ rev=query_data['rev']
+ domain=query_data['domain']
+ qtype=query_data['qtype']
+
+ # 解析器配置
+ myResolver=resolver.Resolver()
+ # 根据rev参数配置解析器
+ is_Do53=any(proto if proto in rev else False for proto in protols)
+ if not is_Do53:
+ # 存在端口指定
+ if ":" in rev:
+ res=rev.split(":")
+ myResolver.nameservers=[dns.nameserver.Do53Nameserver(res[0],port=res[1])]
+ else:
+ myResolver.nameservers=[rev]
+ else:
+ # doh服务
+ if "https" in rev:
+ myResolver.nameservers=[dns.nameserver.DoHNameserver(url=rev)]
+ # dot服务
+ if "tls" in rev:
+ res=rev.split("//")
+ myResolver.nameservers=[dns.nameserver.DoTNameserver(address=res[1])]
+ myAnswers = myResolver.resolve(domain, qtype)
+ if myAnswers.rrset is not None:
+ for r in myAnswers.rrset:
+ ans.append({"rrset":str(r)})
+ return {'ans':ans}
+
+
+
+
+