libresolv를 사용하여 DNS 서버에 대한 요청을 수행하고 있습니다.dns 캐싱으로 res_query 작업을 수행하는 방법은 무엇입니까?
또한 로컬 DNS 캐시를 사용합니다. (dnsmasq/unbound)
예를 들어 dig google.com
과 같이 을 사용하면 요청이 캐시되고 다음 요청은 캐시 된 값을 사용합니다.
우리는하는 dnsmasq 로그에서 볼 수 있습니다
Nov 9 10:46:46 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov 9 10:46:46 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.165
Nov 9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.160
Nov 9 10:46:49 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov 9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.165
Nov 9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.168
을 그리고 내가 res_query
를 사용하고 내가 얻을이 :
Nov 9 10:50:29 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov 9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:51:13 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov 9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**
따라서는 DNS를 공격하지 않는 DNS 서버의 응답 모양을 캐시하고 캐시되지 않습니다.
res_query
에서 요청을 캐시 할 수있는 방법이 있습니까? 내가 그 res_nquery 로컬 DNS 캐시를 확인하지 않습니다 가정
struct __res_state dnsstate;
int rc = res_ninit(&dnsstate);
if (rc < 0) {
return result;
}
dnsstate.retrans = timeout;
int len = res_nquery(&dnsstate, domain.c_str(), ns_c_in, ns_t_mx, nsbuf, sizeof(nsbuf));
및 발굴을 수행합니다
이 내가 DNS 리졸버에 요청을 만들고있어 방법이다.
@Alnitak 예 그래서 관리자에게 libresolv 어떻게 작동하는지 물어 봐야합니까? Stackoverflow는 질문하기 매우 우스운 곳이되었습니다. – Yaroslav
나는 질문을 잘못 읽었을지도 모른다. (시차로 인해 9 시간의 시차를두고 3 시간 만 자면된다.) 그러나 서면으로 나는 당신이 무엇을 묻고 있는지 정말로 말할 수 없다. libresolv가 보내고있는 것과 보내고있는 것 사이의 차이 (있는 경우)를 보려면 tcpdump를 살펴보십시오. 아마도 libresolv를 사용하고있는 _how_를 보여주는 몇 가지 코드를 보여줄 수도 있습니다. – Alnitak
@Alnitak 나는 내 질문에 몇 가지 코드를 넣었다. tcpdump로 조언을 얻으려면 Tnx. 벌써 해봤 어. res_nquery는 여전히 dns를 확인하는 패킷을 보내고 dig는 아무 것도 보내지 않고 dns 캐시 만 확인합니다. res_nquery는 DNS에 대한 해협 요청에만 사용할 수 있습니다. – Yaroslav