2016-11-09 2 views
1

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 리졸버에 요청을 만들고있어 방법이다.

+0

@Alnitak 예 그래서 관리자에게 libresolv 어떻게 작동하는지 물어 봐야합니까? Stackoverflow는 질문하기 매우 우스운 곳이되었습니다. – Yaroslav

+0

나는 질문을 잘못 읽었을지도 모른다. (시차로 인해 9 시간의 시차를두고 3 시간 만 자면된다.) 그러나 서면으로 나는 당신이 무엇을 묻고 있는지 정말로 말할 수 없다. libresolv가 보내고있는 것과 보내고있는 것 사이의 차이 (있는 경우)를 보려면 tcpdump를 살펴보십시오. 아마도 libresolv를 사용하고있는 _how_를 보여주는 몇 가지 코드를 보여줄 수도 있습니다. – Alnitak

+0

@Alnitak 나는 내 질문에 몇 가지 코드를 넣었다. tcpdump로 조언을 얻으려면 Tnx. 벌써 해봤 어. res_nquery는 여전히 dns를 확인하는 패킷을 보내고 dig는 아무 것도 보내지 않고 dns 캐시 만 확인합니다. res_nquery는 DNS에 대한 해협 요청에만 사용할 수 있습니다. – Yaroslav

답변

1

dig와 res_nquery()은 모두 사용자의 /etc/resolv.conf 파일에있는 검색어 (즉, dnsmasq 인스턴스)에 대한 검색어 만 전송합니다. 둘 다 기본값으로 RD 비트를 재귀를 요청하도록 설정합니다.

dnsmasq는 캐시의 응답을 제공하거나 TTL이 만료되면 가져옵니다. 그러나 내 지식 DNS 프로토콜 자체에 아무 것도 (따라서 res_nquery 설정에 아무것도) 그 행동에 영향을 미칠 클라이언트를 설정할 수 있습니다

관련 문제