【问题标题】:getaddrinfo() returns 127.0.0.1 for remote hostgetaddrinfo() 为远程主机返回 127.0.0.1
【发布时间】:2012-03-21 15:24:08
【问题描述】:

我有一个应用程序,它使用 getaddrinfo() 将 Windows 工作组中 PC 的主机名转换为 LAN 上该 PC 的 IPV4 地址。 (注意,我不是指获取运行代码的 PC 的地址,我是指 LAN 上另一台 PC 的地址!)这已经在现场和实验室中工作了很长一段时间,但是现在我有一台运行异常的 Windows 7(32 位)PC。这台电脑的主机名是“elbow”。

我在http://msdn.microsoft.com/en-us/library/windows/desktop/ms738520%28v=vs.85%29.aspx编译了微软为getaddrinfo()提供的示例代码

当我在 LAN 上的任何 PC 上运行此示例代码并将“elbow”指定为主机名时,getaddrinfo() 返回环回地址 127.0.0.1 而不是正确的地址 (192.168.1.110)。但是,如果我指定任何其他主机名 getaddrinfo() 将返回正确的地址!

在过去的某个时间点,“肘部”没有表现出这种行为,因此很明显,关于该 PC 的某些东西发生了变化,导致了这种行为。我已尝试将 PC 磁盘映像恢复到我认为不会导致此行为的程度,但这并没有改变。 PC 是有线连接还是无线连接到 LAN 也没有区别。为 LAN 上的所有 PC 启用 DHCP。即使所有 PC、路由器和交换机完全断电,这种行为也会持续存在。

【问题讨论】:

  • 我的错误答案不见了。我看到你在这个问题上没有任何其他活动;这真的是一个谜。祝你好运!
  • 太奇怪了!而且它是单向的——奇怪的 PC 可以毫无问题地为所有其他 PC 获取正确的 IP。好像有一些安全设置使 IP “不可见”。我之前搜索过这样的设置,但你知道,我想我会再看看......

标签: windows loopback getaddrinfo


【解决方案1】:

遇到了类似的问题,想发帖以防万一其他人发现了这个帖子。

在我们这边,客户安装的计算机也发生了同样的事情。我们发现客户更改了他们的主机文件以将 127.0.0.1 与电脑的名称相关联...使用 getaddrinfo 查找某个子网的单独程序一直失败...他们最终临时重命名计算机以使用此功能,但他们也可以修复他们的主机文件。

在 /windows/system32/drivers/etc 中找到该 Win 7 计算机上的主机文件。

【讨论】:

    【解决方案2】:

    我想用答案更新这个。房间里的大象是 ISP 的 DNS。我误以为我的子网与 ISP DNS 隔离,但事实并非如此。无论出于何种原因,他们的 DNS 为主机名“elbow”返回 127.0.0.1,但一旦我将其重命名为其他名称,我的问题就解决了!我还发现了另一台有同样问题的电脑,并且重命名它也修复了它。两台 PC 的共同点是都经历了操作系统重新加载,但直到这些操作系统重新加载一段时间后问题才变得明显。

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多