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.
Программное получение Ip из Dns
Я пишу сетевое приложение и недавно столкнулся со следующей проблемой. У меня есть следующий 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 именем.
Заранее спасибо за любой ответ или ссылку на интересующий меня материал.
Цитата:
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 именем.
Заранее спасибо за любой ответ или ссылку на интересующий меня материал.
Всем привет,
Я пишу сетевое приложение и недавно столкнулся со следующей проблемой. У меня есть следующий 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 именем.
Заранее спасибо за любой ответ или ссылку на интересующий меня материал.
Код:
Код:
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);
}
{
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);
}