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

Ваш аккаунт

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

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

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

Программное получение Ip из Dns

589
03 июля 2004 года
rarelang
55 / / 08.05.2004
Всем привет,

Я пишу сетевое приложение и недавно столкнулся со следующей проблемой. У меня есть следующий WinSock/BSD совместимый код:

//
signed int result;

#ifndef UNIX
WSADATA WSAData;

result = WSAStartup(MAKEWORD(1, 1), &WSAData);
if(result != 0)
{
ERRORLOG("Ошибка при инициализации системы WinSock");
throw (signed int) 1;
}
#endif

SMTPServer=socket(AF_INET, SOCK_STREAM, 0);

if(SMTPServer==INVALID_SOCKET)
{
ERRORLOG("Ошибка при создании socket объекта");
throw 2;
}

struct sockaddr_in SERVERAddress;

SERVERAddress.sin_family = AF_INET;
SERVERAddress.sin_addr.s_addr = inet_addr(SMTPIServerIP.c_str());
SERVERAddress.sin_port = htons(SMTPServerPort);

result=connect(SMTPServer,(struct sockaddr*)&SERVERAddress, sizeof(SERVERAddress));
if(result)
{
throw 3;
}

...
//

В данном фрагменте вызов inet_addr(SMTPIServerIP.c_str()) используется для превращения строки с IP адресом (объекта string с содержимым типа “127.0.0.1”) в in_addr.

Подскажите мне пожалуйста какие функции (не специфичные для Microsoft) я могу использовать для получения IP адреса из DNS имени.

Или же, подскажите мне пожалуйста как я могу настроить и создать SOCKET объект не имея IP адреса и располагая только DNS именем.

Заранее спасибо за любой ответ или ссылку на интересующий меня материал.
1.8K
05 июля 2004 года
MishaSt
170 / / 11.08.2003
Цитата:
Originally posted by rarelang
Всем привет,

Я пишу сетевое приложение и недавно столкнулся со следующей проблемой. У меня есть следующий WinSock/BSD совместимый код:

//
signed int result;

#ifndef UNIX
WSADATA WSAData;

result = WSAStartup(MAKEWORD(1, 1), &WSAData);
if(result != 0)
{
ERRORLOG("Ошибка при инициализации системы WinSock");
throw (signed int) 1;
}
#endif

SMTPServer=socket(AF_INET, SOCK_STREAM, 0);

if(SMTPServer==INVALID_SOCKET)
{
ERRORLOG("Ошибка при создании socket объекта");
throw 2;
}

struct sockaddr_in SERVERAddress;

SERVERAddress.sin_family = AF_INET;
SERVERAddress.sin_addr.s_addr = inet_addr(SMTPIServerIP.c_str());
SERVERAddress.sin_port = htons(SMTPServerPort);

result=connect(SMTPServer,(struct sockaddr*)&SERVERAddress, sizeof(SERVERAddress));
if(result)
{
throw 3;
}

...
//

В данном фрагменте вызов inet_addr(SMTPIServerIP.c_str()) используется для превращения строки с IP адресом (объекта string с содержимым типа “127.0.0.1”) в in_addr.

Подскажите мне пожалуйста какие функции (не специфичные для Microsoft) я могу использовать для получения IP адреса из DNS имени.

Или же, подскажите мне пожалуйста как я могу настроить и создать SOCKET объект не имея IP адреса и располагая только DNS именем.

Заранее спасибо за любой ответ или ссылку на интересующий меня материал.


Код:
struct hostent *gethostbyname(const char *name);
       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 */
              }
              #define h_addr  h_addr_list[0]  /* for backward compatibility */

       The members of the hostent structure are:

       h_name The official name of the host.

       h_aliases
              A zero-terminated array of alternative names for the host.

       h_addrtype
              The type of address; always AF_INET at present.

       h_length
              The length of the address in bytes.

       h_addr_list
              A zero-terminated array of network addresses for the host in network byte order.

       h_addr The first address in h_addr_list for backward compatibility.

Код:
unsigned long                    getip(char * hostname)
{
    struct hostent * p_hostent;
    long ipaddr;

    ipaddr = inet_addr( hostname );
    if (ipaddr  < 0)
        {
            p_hostent = gethostbyname(hostname);
            if (p_hostent == NULL)
                QUIT(ERR_GETIP);
            memcpy( &ipaddr, p_hostent->h_addr, p_hostent->h_length );
        }
    return(ipaddr);
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

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