2014-09-25 4 views
0

내 프로그램에서 루프백 인터페이스를 가져올 수 있어야합니다. 나는 DNS 리졸버를 쓰고 있지만, etc/hosts를 직접 만질 수는 없다. 예를 들어, 누군가 "localhost"를 던지면 "127.0.0.1"또는 ":: 1"로 해결해야합니다. 필수는 아니지만 사람들이 스스로 설정 한 사용자 정의 루프백 인터페이스를 감지 할 수 있다면 보너스가 될 것입니다. 루프백 주소가 "127.0.0.1"또는 ":: 1"인지 확인할 수있는 방법이 있습니까?루프백 인터페이스 프로그래밍 방식으로 C/C++

정말 구체적인 질문입니다. 미리 감사드립니다.

답변

1

두 가지 문제가 있습니다.

1) "localhost"라는 이름에 특별히 특별한 것은 없습니다. "localhost"가 작동하는 이유는 제대로 구성된 대부분의 DNS 영역에 "localhost"에 대한 명시 적 항목이 포함되어 있기 때문입니다. 정규화되지 않은 호스트 이름을 찾으면 DNS 확인 프로그램은 자동으로 /etc/resolv.conf의 "search"디렉토리에있는 도메인 추가를 시도합니다. 그 결과

search example.com 
nameserver 192.168.0.1 
nameserver 192.168.1.1 

, "로컬 호스트"에 대한 DNS 조회를 포함하는 것이 전형적인 호스트의 /etc/resolv.conf 파일은의 로컬 리졸버는 "localhost.example.com"해결하려고 있고, example.com 것 영역 파일에 명시 적 항목이 있습니다.

$ORIGIN example.com 
@   IN  SOA  ns1.example.com. ((the rest of the SOA record 

... 

localhost  A 127.0.0.1 

2) 이제 로컬 네트워크 인터페이스와 관련하여 지정하지 않은 플랫폼에 따라 달라집니다. 그것은 BSD와 리눅스에서 다르게 진행되었으므로 나는 MS-Windows에서 완전히 다른 방법을 기대할 것입니다. 당신을 가정하면

리눅스 참조하고, 로컬 네트워크 인터페이스의 목록은 getifaddrs(3)에 의해 반환 - 문서화가 SIOCGIFFLAGS IOCTL에서 오는 플래그를 포함로 netdevice에 설명 된대로, http://manpages.courier-mta.org/htmlman3/getifaddrs.3.html

flags 구조체의 멤버 (7) - http://manpages.courier-mta.org/htmlman7/netdevice.7.html

IFF_LOOPBACK 플래그는 루프백 인터페이스를 표시하며 동일한 구조에서 IP 주소를 가져올 수 있습니다.

그러나 제가 지적했듯이, 여러분이하는 일은 모두 해결자를 작성하는 것이고 루프백 인터페이스를 찾는 것은 완전히 범위에서 벗어납니다. 사이트 관리자는 영역 파일에서 루프백 인터페이스의 IP 주소를 지정하므로 걱정할 필요가 없습니다.

+0

플랫폼은 CentOS입니다. 그래, 리눅스. 첫 번째 요점에 관해서는, 이것은 테스트를위한 특별한 경우입니다. – kmdent