Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

gethostbyname()

8.5K
30 мая 2005 года
Lesnix
14 / / 03.03.2005
Hi again, dear ppl :)
Помогите начинающему.
В программе необходимо отрезолвить IP-адрес хоста по его имени.
Код:
char* hostname;
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 узла как-то иначе ?
2
30 мая 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Lesnix
Hi again, dear ppl :)
Помогите начинающему.
В программе необходимо отрезолвить IP-адрес хоста по его имени.
 
Код:
char* hostname;
hostent* host;
   
hostname="codenet.ru";
host=gethostbyname(hostname);

Функция gethostbyname() вроде бы должна возвращать указатель на начало массива указателей IP-адресов...
Но этого почему-то не происходит...
Помогите, плз :)

или, может быть, можно узнать IP узла как-то иначе ?


во-первых, присвоение hostname="codenet.ru" некорректно.
во вторых gethostbyname возвращает указатель на структуру hostent:

 
Код:
struct  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.
8.5K
30 мая 2005 года
Lesnix
14 / / 03.03.2005
Цитата:
Originally posted by squirL
во-первых, присвоение hostname="codenet.ru"
некорректно.


А если так:

 
Код:
char* hostname;
hostname=(char*)malloc(255);
hostname="codenet.ru";

...или как тогда корректно ?
Цитата:

во вторых gethostbyname возвращает указатель на структуру hostent.
список ip адресов хоста помещается в массив **h_addr_list.


Да, это в теории.
Но у меня почему-то указатель вообще ==NULL.

2
30 мая 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Lesnix
А если так:
 
Код:
char* hostname;
hostname=(char*)malloc(255);
hostname="codenet.ru";

...или как тогда корректно ?


лучше всего писать на С++ и юзать класс string. или - юзай strcpy;

8.5K
30 мая 2005 года
Lesnix
14 / / 03.03.2005
Цитата:
Originally posted by squirL
лучше всего писать на С++ и юзать класс string. или - юзай strcpy;


MFC отпадает. К слову, С++ это не только MFC, имхо.
Мне почему-то кажется, что в приведенном примере я поступаю вполне правильно. Объявляю укзатель на массив символов, затем выделяю для него память, а потом заношу туда значение. По крайней мере, ничто не ругается вроде.

Но как быть получением IP адреса по имени машины ??

2
31 мая 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Lesnix
MFC отпадает. К слову, С++ это не только MFC, имхо.


зачОт! аффтар пеши ишшо! можешь ИМХО, заменить на ИМО, поскольку ты абсолютно прав. С++ это не только MFC :D . только вот string тут не причем. это класс из STL ;)
а насчет адреса - для начала проверь, что адрес у тебя разрешается корректно. например: nslookup codenet.ru. может у тебя просто DNS не прописан, поэтому и gethostbyname отработать не может

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог