From e6163c06ccb5704e89bd3a9317527b65f37c0cab Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 13 Apr 2026 15:05:13 +0800 Subject: [PATCH] fix dns --- src/dns_proxy/dns_resolver.erl | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/dns_proxy/dns_resolver.erl b/src/dns_proxy/dns_resolver.erl index 97e58c1..068c6cd 100644 --- a/src/dns_proxy/dns_resolver.erl +++ b/src/dns_proxy/dns_resolver.erl @@ -53,7 +53,7 @@ resolve(IpPacket) when is_binary(IpPacket) -> resolve0(QueryMsg = #dns_message{qc = 1, questions = [#dns_query{name = QName, type = QType, class = QClass}|_]}) -> %% 查找是否是内置的域名 case sdlan_hostname_regedit:lookup(QName) of - {ok, Ip} -> + {ok, Ip} when QType =:= ?DNS_TYPE_A, QClass =:= ?DNS_CLASS_IN -> Answer = #dns_rr { name = QName, type = QType, @@ -75,6 +75,8 @@ resolve0(QueryMsg = #dns_message{qc = 1, questions = [#dns_query{name = QName, t }, logger:debug("[dns_resolver] punchnet inbuilt qnanme: ~p, ip: ~p", [QName, Ip]), {ok, dns:encode_message(RespMsg)}; + {ok, _Ip} -> + {ok, dns:encode_message(build_empty_response(QueryMsg))}; error -> case sdlan_domain_regedit:maybe_domain(QName) of true -> @@ -87,6 +89,21 @@ resolve0(QueryMsg = #dns_message{qc = 1, questions = [#dns_query{name = QName, t resolve0(Error) -> {error, Error}. +-spec build_empty_response(QueryMsg :: #dns_message{}) -> EmptyResp :: #dns_message{}. +build_empty_response(QueryMsg) -> + QueryMsg#dns_message{ + qr = true, + aa = true, + ra = true, + rc = ?DNS_RCODE_NOERROR, + anc = 0, + auc = 0, + adc = 0, + answers = [], + authority = [], + additional = [] + }. + -spec build_nxdomain_response(QueryMsg :: #dns_message{}) -> EmptyResp :: #dns_message{}. build_nxdomain_response(QueryMsg) -> QueryMsg#dns_message{ @@ -127,4 +144,4 @@ build_ip_packet(SAddr, DAddr, SPort, DPort, UdpPayload) when is_integer(SPort), IpCheckSum = dns_utils:ip_checksum(IpPacket0), IpHeader = pkt:ipv4(IpPacket0#ipv4{sum = IpCheckSum}), - <>. \ No newline at end of file + <>.