gpt4 book ai didi

python - DNS 服务器客户端通信协议(protocol)

转载 作者:行者123 更新时间:2023-12-03 11:53:16 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




我需要写一篇关于 DNS 如何工作的论文,并在 python 中构建一个小型但功能强大的 DNS 服务器。

我有一个简单的 UDP 套接字服务器,它在收到这样的数据包时打开一个线程:

while 1:
try:
stream, addr = serversocket.recvfrom(buffr)
threading.Thread(target=handler, args=(stream, addr, threading.activeCount(),)).start()
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
except_catch(exc_type.__name__, exc_value, exc_traceback, threading.current_thread().name)

处理函数只是尝试在内存中查找请求的记录,如果没有,它将执行另一个函数,在另一台服务器上运行 dns 查询以获取记录(如果他没有记录)。这有点像故障保险,也是我的问题所在。
def dnsrn(ip, type):
try:
mkr = dns.resolver.Resolver()
mkr.nameservers = ['192.168.0.1']
res = mkr.query(ip, type)

for rdata in res:
return rdata.address # this works for A records
# to do for other types of records

except:
exc_type, exc_value, exc_traceback = sys.exc_info()
except_catch(exc_type.__name__, exc_value, exc_traceback, threading.current_thread().name)

如您所见,我还没有完成它,但我已经遇到了问题。
有时,这个函数会处理,如果没有在错误日志中给出任何错误,线程将永远不会完成。
我已经测试过,错误日志应该会记录 child 抛出的所有错误。
我有一个简单的客户端,它被编程为在每个设定的时间发送一个随机请求出一堆预设,而且 child 挂起时似乎没有模式。
经过大约 24 小时的测试,我剩下大约 1-3 个僵尸线程。


如果您想知道这是异常函数的样子:
def except_catch(type, value, track, thread=None):
if type != "SystemExit":
import traceback

rawreport = traceback.format_exception(type, value, track)
report = "\n" . join(rawreport)

errorlog = open(error_log_path + "/errors.log", "a")

if thread != None:
errorlog.write("Exception in thread: " + thread + "\n\n")

errorlog.write(("%s\n" + "-" * 30 + "\n\n") % report)

errorlog.close()
sys.excepthook = except_catch

最佳答案

我会检查 RFC,因为这是协议(protocol)的确切规范。 DNS 的问题在于,存在不止一个 RFC。作为一个简单的开始,我会检查 RFC 1035其中包含基础知识。如果您需要高级功能,请查看其他相关 RFC。

关于python - DNS 服务器客户端通信协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com