С++ обратный поиск DNS (в локальной сети)

В настоящее время я работаю над инструментом «список того, что происходит в локальной сети», и теперь я застрял на части «дайте мне имя хоста для этого IP».

Я уже пробовал getnameinfo и gethostbyaddr, но первый возвращает (почти) всегда заданный IP-адрес вместо имени хоста, второй возвращает какие-то странные вещи, такие как ANantes-651-1-49-net.w2-0.abo.wanadoo.fr...

Мой вопрос: как я могу заставить это работать?

Примечание. Это не значит, что имя хоста не связано хотя бы с одним из IP-адресов, например, dig +short -x 192.168.178.1 возвращает fritz.box. как следует, а также host 192.168.178.1 дает правильный ответ 1.178.168.192.in-addr.arpa domain name pointer fritz.box.

Дополнительное примечание: во время своего исследования я наткнулся на библиотеку под названием «adns», но под «наткнулся» я имею в виду «почти буквально наткнулся», так как нет ни малейшего следа документации, примеров или чего-то подобного... Итак, если у кого-то есть пример использования "adns", это было бы здорово...


person user3128045    schedule 19.02.2016    source источник
comment
Можете ли вы показать, как вы устанавливаете адрес, используемый в качестве аргумента, на gethostbyaddr()? Вы понимаете, что этот ANantes-651-1-49-net.w2-0.abo.wanadoo.fr разрешается в 2.0.0.0 и наоборот, не так ли? Так что есть шанс, что ваши аргументы могут быть ошибочными.   -  person Paulo1205    schedule 20.02.2016
comment
Черт... Как мне использовать разрывы строк в комментариях? И да, я проверил имя хоста с помощью dig и увидел это странное 2.0.0.0...   -  person user3128045    schedule 20.02.2016


Ответы (1)


Ооооо... Кажется, я напортачил несколько вещей почти в стиле "обезьяна хочет банана"...

No.1:

Я использовал это:

...
sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("192.168.178.1");
struct hostent *h =gethostbyaddr((const void *)&address, sizeof(address), AF_INET);
...

Вместо правильного:

...
in_addr address;
inet_aton("192.168.178.1",&address);
struct hostent *h = gethostbyaddr((const void *)&address, sizeof(address), AF_INET);
...

No.2:

У меня была строка, в которой я проверял, было ли возвращенное имя хоста пустым, чтобы заменить его заполнителем, в зависимости от выбранного «формата отчета» (обычный текст/xml/csv). Но по какой-то причине я написал это так, что оно ВСЕГДА заменяло имя хоста указанным заполнителем (черт возьми! это было довольно очевидно, но я не видел этого все время...).

НО НАКОНЕЦ: УРА! Оно работает...

person user3128045    schedule 20.02.2016