diff options
| author | 韩丁康 <[email protected]> | 2024-03-29 10:59:45 +0800 |
|---|---|---|
| committer | 韩丁康 <[email protected]> | 2024-03-29 10:59:45 +0800 |
| commit | 27be271931e19252661ca94c5f3c790ff67ccf44 (patch) | |
| tree | f6fbe6a5d98771c563db01fa1ca638a60745f817 /agent | |
| parent | 337ba84f78c09f593ee6e34c27a2d45f2b3d698e (diff) | |
agent端增加域名记录验证功能
Diffstat (limited to 'agent')
| -rw-r--r-- | agent/apps/datacheck.py | 54 |
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]("/") [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} + + + + + |
