2012-05-01 2 views
0

В программе C в UNIX gethostbyname() может использоваться для получения адреса домена, такого как «localhost». Как преобразовать результат из gethostbyname() в десятичное обозначение с точками.Unix - как получить IP-адрес доменного имени?

struct hostent* pHostInfo; 
long nHostAddress; 

/* get IP address from name */ 
pHostInfo=gethostbyname("localhost"); 

if(!pHostInfo){ 
    printf("Could not resolve host name\n"); 
    return 0; 
} 

/* copy address into long */ 
memset(&nHostAddress, 0, sizeof(nHostAddress)); 
memcpy(&nHostAddress,pHostInfo->h_addr,pHostInfo->h_length); 

nHostAddress содержит следующее:

16777243 

Как конвертировать результат, так что я могу получить выход как:

127.0.0.1 
+2

http://stackoverflow.com/questions/1680365/integer-to-ip-address-c – birryree

+0

Вам просто нужно отформатировать его правильно; каждый байт соответствует одному IP-полю (например, первый байт равен «127» и т. д.) –

ответ

1

Вы можете конвертировать из struct in_addr непосредственно к строка с использованием inet_ntoa():

char *address = inet_ntoa(pHostInfo->h_addr); 

Значения, которые у вас есть (16777243), выглядят неправильно, хотя - это получается до 1.0.0.27!

+0

Возможно, это связано с контентом его компьютера или чем-то еще. –

+0

Я мог понять 1.0.0.127, но 27 необъяснимо. – duskwuff

+0

На самом деле это 1.0.0.127, @duskwuff, пожалуйста, проверьте его снова. – Jake

0

Очень просто Скомпилировать этот код

#include<stdio.h> 
#include<netdb.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
int main() 
{ 
    struct hostent *ghbn=gethostbyname("www.kamonesium.in");//change the domain name 
    printf("Host Name->%s\n", ghbn->h_name); 
    printf("IP ADDRESS->%s\n",inet_ntoa(*(struct in_addr *)ghbn->h_name)); 
}