IP-адрес от имени хоста в Windows сокет программирования - PullRequest
2 голосов
/ 22 февраля 2012

Я хочу преобразовать имя хоста (имя компьютера Мой компьютер -> свойство -> Расширенные настройки системы -> Имя компьютера) в IP-адрес.

Можно ли преобразовать имя хоста в IP-адрес? Я попытался следовать, но pHostInfo приходит как NULL. а hostname - это имя моего компьютера.

struct hostent* pHostInfo;
pHostInfo = gethostbyname(hostname);

В приведенном выше коде это NULL. Можете ли вы дать мне код, который преобразует имя хоста в IP-адрес?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

Проверка getaddrinfo функция!Если вы ищете IPv6-адрес в Windows XP SP2 (или лучше), вам следует использовать функцию GetAddrInfoW.Обе функции имеют пример в документации.Если вы работаете с IPv4 и / или MS Vista и выше, вам следует выбрать getaddrinfo, поскольку он не зависит от платформы (POSIX.1-2001).

2 голосов
/ 03 июня 2015
#include <string>

#include <netdb.h>
#include <arpa/inet.h>

std::string HostToIp(const std::string& host) {
    hostent* hostname = gethostbyname(host.c_str());
    if(hostname)
        return std::string(inet_ntoa(**(in_addr**)hostname->h_addr_list));
    return {};
}
2 голосов
/ 23 февраля 2012

Используйте gethostname(), чтобы получить локальное имя хоста. Затем вы можете передать это gethostbyname().

Обратите внимание, однако, что gethostbyname() выполняет поиск DNS EVEN FOR LOCAL HOSTNAMES, поэтому можно получить IP-адреса, которые на самом деле не принадлежат локальному компьютеру, или недействительные IP-адреса, если DNS настроен неправильно.

Если все, что вам действительно нужно, это получить IP-адреса локального компьютера, вместо этого используйте GetAdaptersInfo() или GetAdaptersAddresses().

...