3

如果我让 gethostbyaddr() 查找 NAT 生成的 IP 地址,例如 192.168.0.4,我应该期望它工作吗?

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

4

1 回答 1

1

除非您设置私有 dns 或将它们添加到主机文件中,否则它们将不起作用。Sendmail 提供了一些很好的文档:

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

最终到达根名称服务器的调用会成为黑洞。

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

于 2013-04-24T03:57:46.230 回答