gethostbyname()
Помогите начинающему.
В программе необходимо отрезолвить IP-адрес хоста по его имени.
hostent* host;
hostname="codenet.ru";
host=gethostbyname(hostname);
if (host!=NULL) //вот это условие почему-то пролетает, т.е. host == NULL :(
{
int nAdapter = 0;
while ( host->h_addr_list[nAdapter] )
{
struct sockaddr_in adr;
memcpy(&adr.sin_addr,host->h_addr_list[nAdapter],host->h_length);
printf("\nIP: %s\n",inet_ntoa(adr.sin_addr));
nAdapter++;
}
}
Функция gethostbyname() вроде бы должна возвращать указатель на начало массива указателей IP-адресов...
Но этого почему-то не происходит...
Помогите, плз :)
или, может быть, можно узнать IP узла как-то иначе ?
Hi again, dear ppl :)
Помогите начинающему.
В программе необходимо отрезолвить IP-адрес хоста по его имени.
hostent* host;
hostname="codenet.ru";
host=gethostbyname(hostname);
Функция gethostbyname() вроде бы должна возвращать указатель на начало массива указателей IP-адресов...
Но этого почему-то не происходит...
Помогите, плз :)
или, может быть, можно узнать IP узла как-то иначе ?
во-первых, присвоение hostname="codenet.ru" некорректно.
во вторых gethostbyname возвращает указатель на структуру hostent:
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list;/* list of addresses from name server
*/
};
список ip адресов хоста помещается в массив **h_addr_list.
во-первых, присвоение hostname="codenet.ru"
некорректно.
А если так:
hostname=(char*)malloc(255);
hostname="codenet.ru";
...или как тогда корректно ?
во вторых gethostbyname возвращает указатель на структуру hostent.
список ip адресов хоста помещается в массив **h_addr_list.
Да, это в теории.
Но у меня почему-то указатель вообще ==NULL.
А если так:
hostname=(char*)malloc(255);
hostname="codenet.ru";
...или как тогда корректно ?
лучше всего писать на С++ и юзать класс string. или - юзай strcpy;
лучше всего писать на С++ и юзать класс string. или - юзай strcpy;
MFC отпадает. К слову, С++ это не только MFC, имхо.
Мне почему-то кажется, что в приведенном примере я поступаю вполне правильно. Объявляю укзатель на массив символов, затем выделяю для него память, а потом заношу туда значение. По крайней мере, ничто не ругается вроде.
Но как быть получением IP адреса по имени машины ??
MFC отпадает. К слову, С++ это не только MFC, имхо.
зачОт! аффтар пеши ишшо! можешь ИМХО, заменить на ИМО, поскольку ты абсолютно прав. С++ это не только MFC :D . только вот string тут не причем. это класс из STL ;)
а насчет адреса - для начала проверь, что адрес у тебя разрешается корректно. например: nslookup codenet.ru. может у тебя просто DNS не прописан, поэтому и gethostbyname отработать не может