2016-02-19 84 views
0

我目前正在研究「列出本地網絡中出現的問題」工具,現在我被困在「爲此IP提供主機名」這一部分。C++反向dns查找(在本地網絡上)

我已經嘗試過,則getnameinfo和gethostbyaddr,但第一個返回(幾乎)總是給定的IP,而不是主機名,第二個返回一些奇怪的東西像ANantes-651-1-49-net.w2-0.abo.wanadoo.fr ...

我的問題是:怎麼可能我做這個工作?

注:它不象是沒有用的IP地址中的至少一個相關聯的主機名,例如dig +short -x 192.168.178.1fritz.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 address; memset(&address,0,sizeof(address)); memset 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); ...' – user3128045

+0

當...如何在評論中使用換行符?而且,是的,我用'dig'查看了「hostname」,並看到了這個奇怪的'2.0.0.0' ... – user3128045

回答

0

Oookay ...似乎,就像我搞砸了幾個噸hings在一個幾乎 「猴子想香蕉」 式...

一:

我用這個:

... 
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:

我有一行我檢查,如果返回的主機名是空的,用佔位符替換它,de等待選定的「報告格式」(純文本/ xml/csv)。但無論出於何種原因,我以某種方式寫它,它總是用上述佔位符代替主機名(當然,這有點明顯,但我一直沒有看到它)。

但最後:YAY!它的工作原理...