LINUX.ORG.RU

gethostbyname и несколько записей в hosts


0

0

В файле /etc/hosts есть две записи:

127.0.0.2 host.blablabla.com hostname

45.35.94.11 hostname hostname

Честно вообще слабо представляю смысл такой ситуации, но так есть у заказчика. На этой машине с помощью функции gethostbyname хочу получить Ip аддрес. Мне возвращается первая строчка т.е. адрес 127.0.0.2 а хочу чтобы второй. Как это сделать? Может кто знает простой способ(простой это без ручного парсинга этого файла)?



Последнее исправление: Daeloce (всего исправлений: 1)

поменять местами
127.0.0.2
45.35.94.11

dimon555 ★★★★★
()

вроде ж не так давно анонимус постил похожий код:

#define _POSIX_C_SOURCE 1
#include <stdio.h>
#include <memory.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argc, char **argv) {
    for (--argc, ++argv; argc; --argc, ++argv) {
        struct addrinfo hints;
        struct addrinfo *result, *rp;
        int sfd, s, j, err;
        size_t len;
        ssize_t nread;
        char buf[128];
        memset(&hints, 0, sizeof(struct addrinfo));
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_DGRAM;
        hints.ai_flags = 0;
        hints.ai_protocol = 0;
        if ((err = getaddrinfo(*argv, NULL, &hints, &result)) != 0) {
            fprintf(stderr, "%s: %s\n", *argv, gai_strerror(err));
            continue;
        }
        for (rp = result; rp; rp = rp->ai_next)
            if (inet_ntop(rp->ai_family,
                rp->ai_family == AF_INET  ?
                    (void *)&((struct sockaddr_in *)rp->ai_addr)->sin_addr.s_addr :
                rp->ai_family == AF_INET6 ?
                    (void *)&((struct sockaddr_in6 *)rp->ai_addr)->sin6_addr.s6_addr :
                NULL,
                buf, sizeof(buf)))
            puts(buf);
        freeaddrinfo(result);
    }
    return 0;
}
// BSDL

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.