2012-10-26 3 views
3

내 응용 프로그램에서 일부 호스트 이름을 해결해야합니다. 어떤 방법으로 gethostbyname을 대체 할 수 있습니까? 예를 들어 resolver로 사용할 DNS 서버를 매개 변수로 지정할 수 있습니까?gethostbyname 대신 DNS 서버를 선택할 수 있습니까?

나는 이미 내 자신의 기능을 코딩했지만, 내가 모르는 사람이있을 것이라고 생각했다.

저는 Linux/C 언어를 사용하고 있습니다. 내 libc는 uclibc입니다. 그러나 GNU LibC에 대해서도 궁금합니다.

감사합니다.

답변

4

고유 한 쿼리를 수행해야하지만 어렵지 않습니다.

이 작업을 수행하려면, 당신은 당신이 환경 변수를 통해 해결 프로그램을 지정할 수있는 기능의 res_query() 가족 사용할 것 :

res_init() 함수는 구성 파일을 읽습니다 (알아낼 수를 참조하십시오. conf (5))를 사용하여 기본 도메인 이름, 검색 순서 및 이름 서버 주소를 가져옵니다. 서버를 지정하지 않으면 로컬 호스트가 시도됩니다. 도메인을 지정하지 않으면 로컬 호스트와 연관된 도메인이 사용됩니다. 그것은 환경 변수 LOCALDOMAIN로 대체 할 수 있습니다

IBM의 docs가 변수 설정하는 방법을 와 깊이에서 조금 더 이동 :

구성된 검색 목록 (구조체 state.defdname 및 구조체의 상태를 .dnsrch)는 환경 변수 LOCALDOMAIN을 공백으로 구분하여 최대 256 자 (공백 포함) 인 검색 도메인 최대 6 개 목록으로 설정하면 무시할 수 있습니다. 검색 목록이 지정되면 기본 로컬 도메인은 쿼리에 사용되지 않습니다.

노트 -

  • 당신은 res_init()를 호출하기 전에 setenv()를 호출해야합니다, 또는 설정이 포착되지 않습니다. 적용 가능한 경우 한 번 설정을 해제하지 마십시오.

  • 검색 도메인에 호스트 이름을 사용하는 경우 /etc/hosts이 여전히 우선합니다.

  • res_init()made properly reentrant in uclibc in 2007 이었으므로 어떤 용도로든 사용할 수 있습니다.

이러한 기능은 MX (기타) 데이터를보다 상세하게 검색 할 수 있다는 이점이 있습니다. 아직도 똑같이 잘 작동하는 더 작은 것이 있다면, 그것을 사용하지 않는 것은 의미가 없습니다.

1

응용 프로그램에서 DNS 서비스를 완료하면 기본 DNS를 변경하고 고유 한 DNS 서버를 사용하고 원래의 DNS로 다시 설정할 수 있습니다.

  1. 먼저 DNS에 쿼리하고 이전 DNS를 저장하십시오.

  2. 설정 새로운 DNS

  3. 다시 기본적으로 위의 모든 단계

가에 http://linux.die.net/man/3/resolver 명령을 수행 할 수 /etc/resolv.conf을 편집하여 이루어집니다 원래 설정하여 DNS 서비스 수행 리눅스.

관련 문제