сеть — C ++ обратный просмотр 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, это было бы здорово …

0

Решение

Да ладно … Похоже, я напортачил несколько вещей в стиле почти «обезьяна хочу банан» …

№ 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);
...

№ 2:

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

НО ОКОНЧАТЕЛЬНО: ДА! Оно работает…

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]