gethostbyaddr()应该在NAT环境中工作吗?

时间:2013-04-24 03:37:14

标签: nat gethostbyaddr

如果我要求gethostbyaddr()查找NAT生成的IP地址,例如192.168.0.4,我应该期望它能够正常工作吗?

背景:我正在家中运行一些针对网络环境的控制代码。有时,此代码执行gethostbyaddr()调用以获取向其发送消息的计算机的详细信息。地址通常是本地机器的地址,有时甚至是当前机器本身的地址。通常,这不会导致任何问题。但是,我已经用Netgear路由器替换了我的旧Netcomm ADSL路由器,并发现在本地NAT环境中对一台机器的gethostbyaddr()调用现在a)在30秒后超时,b)返回NULL以指示错误。通过实验回到我的旧路由器,我发现同一个调用也失败了,返回NULL,但立即这样做。代码可以处理错误返回(这就是为什么我以前从未注意到这一点),但新的30秒超时是一个巨大的麻烦。显然,有很多方法可以解决这个问题,但大多数方法都涉及捕获地址为192.168地址并避免gethostbyaddr()调用的情况。我的问题是,gethostbyaddr()调用是否总是在NAT环境中失败,或者是否存在可以工作的情况? (在这种情况下,我不想最终避开它们。)或者仅仅是因为我没有正确设置路由器?顺便说一句,我在OS X上运行它,并在Snow Leopard和Lion上看到相同的行为。

1 个答案:

答案 0 :(得分:1)

除非您设置私有dns或将其添加到hosts文件,否则它们将无法工作。 Sendmail提供了一些很好的文档:

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

最终到达根名称服务器的呼叫会被黑洞化。

某些路由器可能已经提供了反向DNS。您不需要拥有每个主机,只需对地址空间具有权威性,这样就不会转发请求。