【问题标题】:Programmatically resolve LAN computer name to fully qualified name?以编程方式将 LAN 计算机名称解析为完全限定名称?
【发布时间】:2014-08-28 06:15:04
【问题描述】:

我正在编写一个 C++ 应用程序,它接收 LAN 计算机名称作为来自外部世界的输入(例如 \\PCNAME123,我可以通过在 Windows 运行提示符或 IE 地址栏中键入来访问它)并且需要获取一些基于该名称的数据,例如通过调用 gethostbyname() 函数。

问题是我需要一个完全限定的名称(例如 PCNAME123.domainname.net),我认为是所谓的(我是 Winsock 和一般网络编程的新手,所以我可能没有正确的术语)。我已经测试过了,gethostbyname() 可以正常使用,但不能使用“PCNAME123”或“\\PCNAME123”。

我如何获得该网络计算机的完全限定名称(请注意,它不是针对本地主机,而是针对本地网络上的其他计算机)?

【问题讨论】:

  • 除非您有其他信息(例如“它是 AD 域的成员”或“它与我在同一个 DNS 域中”),否则在逻辑上不可能将非限定名称转换为一个合格的,原因很简单,两台(或更多)计算机可以有相同的不合格名称,那么您如何判断选择哪一台?
  • 与 Internet Explorer 或运行提示符一样吗?当给出“模棱两可”的非限定名称时,我可以接受运行提示或 IE 的相同行为。
  • 我的错误,我错过了机器在本地网络上的限定符。这使事情变得更容易,首先,如果有人试图设置重复名称,机器可能会抱怨。 :-)

标签: c++ winapi dns winsock


【解决方案1】:

您可以尝试使用 GetAddrInfoW 函数来获取名称信息吗?

【讨论】:

    【解决方案2】:

    要回答我自己的问题,看起来其中一种解决方案是使用getaddrinfo() 函数。

    【讨论】:

    • 只要目标计算机位于您计算机搜索路径上的 DNS 域之一中,这应该可以工作。如果搜索路径上有不止一台同名计算机,我不确定您是会得到所有计算机还是随机选择一台。
    • 想一想,它可能也适用于本地网络上的机器(无论是否配置了 DNS)只要两台机器(您的机器和目标机器)都配置为处理本地网络作为“私人”或“工作”网络而不是“公共”网络。 +1。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多