2013-04-24 4 views
3

gethostbyaddr()에 NAT 생성 IP 주소 (예 : 192.168.0.4)를 조회하도록 요청하면 작동해야합니까?gethostbyaddr()은 NAT 환경에서 작동해야합니까?

배경 : 네트워크 환경을위한 일부 제어 코드로 집에서 테스트를 실행하고 있습니다. 때때로,이 코드는 gethostbyaddr() 호출을 사용하여 메시지를 보낸 기계의 세부 사항을 가져옵니다. 주소는 종종 로컬 시스템의 주소가되며, 때때로 현재 시스템 자체의 주소가됩니다. 일반적으로 이는 아무 문제가 없습니다. 그러나 Netgear 라우터로 기존의 Netcomm ADSL 라우터를 교체했으며 로컬 NAT 환경의 시스템에 대한 gethostbyaddr() 호출이 30 초 후에 시간 초과 됨) b) NULL을 반환하여 오류를 나타냅니다. 실험적으로 내 오래된 라우터로 돌아가서, 나는 같은 호출이 또한 NULL을 리턴하지 못하는 것을 알았지 만 즉시 그렇게한다. 이 코드는 에러 리턴을 처리 할 수 ​​있습니다 (이것이 제가 전에는 알아 차리지 못했던 이유입니다). 그러나 새로운 30 초 타임 아웃은 엄청난 번거 로움입니다. 분명히이 문제를 해결하기위한 여러 가지 방법이 있지만 대부분은 주소가 192.168 주소 인 경우를 포착하고 gethostbyaddr() 호출을 피하는 방법이 포함됩니다. 제 질문은 gethostbyaddr() 호출이 NAT 환경에서 항상 실패하거나 작동 할 수있는 경우입니까? (그런 경우에 나는 그들을 피하는 것을 끝내기를 원하지 않습니다.) 아니면 라우터를 올바르게 설정하지 않았습니까? 그건 그렇고, 나는 OS X에서 이것을 실행하고 스노우 레오파드와 라이온 모두 동일한 행동을 보았다.

답변

1

개인 DNS를 설정하거나 호스트 파일에 추가하지 않으면 작동하지 않습니다. Sendmail은이에 대한 몇 가지 좋은 문서를 제공합니다 : 서버가 블랙홀 얻을 루트 이름에 도달 결국

http://www.sendmail.com/sm/open_source/tips/private_dns/

호출을.

일부 라우터는 이미 역방향 DNS를 제공 할 수 있습니다. 모든 호스트를 가질 필요는 없으며 주소 공간에 대한 권한이 있어야 요청이 전달되지 않습니다.

+0

감사합니다. 센드 메일 링크가 매우 유용하다는 것을 알았습니다. 본질적으로, 내 질문에 대한 대답은 _normally_gethostbyaddr() NAT 주소에서 작동하지 않을 것입니다 (그리고 시간이 소요될 수 있습니다) 그래서 피해야한다, _might_ 경우 작동하도록 구성되어있을 수 있습니다 그리고 난해야합니다 그 가능성을 고려하십시오. 나는 보통 192.168 주소에 대한 호출을 우회하는 코드를 얻을 것이지만 호출을 할 수있게 해주는 오버라이드 설정을 제공 할 것이라고 생각한다. 그게 합리적이라고 생각하니? – KeithS

+0

다른 개인 주소는 http://tools.ietf.org/html/rfc1918에 정의되어 있습니다 : 10.0.0.0/8, 172.16.0.0/12 및 192.168.0.0/16. 표준은 gethostbyaddr를 전역 적으로 비활성화하고 시간 만료 옵션을 제공하는 것입니다. 때로는 공용 주소 조회도 중단되고 30 초가 지나기까지 기다리는 시간이 길어집니다. –

+0

잠시 동안 나는 192.168 개의 주소가 아마도 역 DNS를 사용하지 않는다고 가정 할 것이지만 더 큰 주소 공간 옵션이 아마 그렇게 할 것이라고 가정 할 것입니다. 그리고 나는 약간의 재정의 옵션을 제공 할 것이다. 우리의 목적을 위해 나는 그것이 충분하다고 생각한다. 우리 조직의 10 개의 네트워크가이 벌금을 처리하며 가정용 모뎀에서도 작동하는 경우이를 해결할 것입니다. 어쨌든이 모든 네트워킹 코드는 IPV6에 비추어 곧 검토 될 예정입니다. 도움을 주셔서 감사 드리며 답변을 드리겠습니다. – KeithS