Не могу разобраться с получением IP по DNS имени! :(

Рейтинг: 0Ответов: 1Опубликовано: 04.05.2011

Вот код:

#include <iostream>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

using namespace std;

int main(int argc, char* argv[])
{
    int sock;
    struct sockaddr_in addr;

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0)
    {
        cout << "Socket ERROR!" << endl;
        return 1;
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(7771);
    char host1[] = "example.com"; //здесь коректное имя хоста
    struct hostent* hostA = gethostbyname(host1);
    addr.sin_addr.s_addr = inet_addr(hostA->h_addr);

    cout << hostA->h_addr << endl; //выводит 2 символа на 2 строки(какая-то кракозябра)
    cout << addr.sin_addr.s_addr << endl; //число (для google.com вышло 4294967295)

    if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
    {
        cout << "Connect ERROR!" << endl; //тут все заканчивается.
        return 1;
    }

    ...

    return 0;
}

Ответы

▲ 3Принят
HOSTENT *hosten; 
hosten = gethostbyname( name ); 
sa.sin_addr.s_addr = ((in_addr*)hosten->h_addr_list[0])->s_addr;

вот таким образом можна