2012-02-22 2 views
1

Я хочу преобразовать имя хоста (имя компьютера My Computer -> свойство -> Advance System Setting -> имя компьютера) в IP-адрес.IP-адрес от имени хоста при программировании сокетов Windows

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

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

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

+0

Что говорит 'WSAGetLastError()'? –

ответ

0

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

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

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

2

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

0
#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 {}; 
} 
Смежные вопросы