从计算机名称中查找计算机 IP 地址

Find machine IP adress from machine name

本文关键字:计算机 IP 地址 查找 计算机名      更新时间:2023-10-16

我知道远程机器名称,这台机器在同一网络上。

如果我从命令提示符 ping 那台机器,我也会得到 IP 信息。

C:Usersanikumar>ping neemqx01g
Pinging neemqx01g.efi.internal [10.210.98.194] with 32 bytes of data:
Reply from 10.210.98.194: bytes=32 time=2ms TTL=128
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128
Ping statistics for 10.210.98.194:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 2ms, Average = 0ms

如何在 wxWidgets 中以编程方式实现或提升以获取 IP 地址?

答:

C函数:

const wxString GetIPbyName(const wxString& name)
{
    struct hostent* pHostInfo;
    pHostInfo = gethostbyname(name.c_str());
    in_addr * address = (in_addr *)pHostInfo->h_addr;
    std::string ip_address = inet_ntoa(*address);
    return ip_address;
}

wxWidgets:

   wxIPV4address ipv4;
   ipv4.Hostname(m_currentServer);
   wxString m_currentServer = ipv4.IPAddress();

我不是在多个活动网卡的情况下上述行为。

我已经为您浏览了文档,但您不能

对于可移植网络名称查找,您可以考虑使用通用的跨平台网络库,例如 Boost.ASIO。

C 套接字库(几乎)是可移植的。您将有旧的gethostbyaddr呼叫或较新的getaddrinfo呼叫。

但是您需要一些#ifdef才能使它们真正便携,因为:

  • 标头与 Posix 系统上的标头netdb.h(以及可选的 sys/types.h 和 sys/socket.h)不同,在 Windows 上Ws2tcpip.hwinsock2.h
  • 在 Windows 上,您需要调用 WSAStartup 来初始化 Winsock。