2016-02-19 3 views
0

В настоящее время я работаю над «списком, что происходит в локальной сети», и теперь я застрял в «gimme hostname для этого IP».C++ обратный поиск dns (в локальной сети)

Я уже пытался 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

Можете ли вы показать, как вы устанавливаете адрес, используемый в качестве аргумента, для 'gethostbyaddr()'? Вы понимаете, что этот «ANantes-651-1-49-net.w2-0.abo.wanadoo.fr» разрешает 2.0.0.0 и наоборот, не так ли? Таким образом, есть вероятность, что ваши аргументы могут быть ошибочными. – Paulo1205

+0

'... sockaddr_in адрес; memset (& address, 0, sizeof (адрес)); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr ("192.168.178.1"); struct hostent * h = gethostbyaddr ((const void *) & address, sizeof (адрес), AF_INET); ... ' – user3128045

+0

Dang ... Как использовать перерывы в комментариях? И yep, я проверил «имя хоста» с помощью «dig» и увидел этот странный «2.0.0.0» ... – user3128045

ответ

0

Oookay ... Кажется, как будто я прищурился несколько t Hings в почти "обезьяны хотят банана" -Style ...

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

Нет .2:

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

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

Смежные вопросы