簡體   English   中英

從 IP 中查找主機名 - 反向 DNS - android

[英]find hostname from IP - reverse DNS - android

我正在嘗試從我的 android 應用程序的子網(反向 DNS)中的 IP 地址中查找主機名。 我一直無法找到一種適用於大量路由器的方法。

迄今為止嘗試過的方法

  1. 獲取規范主機名

    適用於某些路由器。 其余部分不起作用,僅返回 IP。

  2. DNSJava 庫。

    我嘗試了下面的代碼,它也適用於某些情況,而不適用於其他路由器。

     String getHostNameUsingDNSJavaLibrary( String ipAddress ) { try { Name reverseipAddress = ReverseMap.fromAddress( ipAddress ); Log.e( TAG ,"reverseipAddress="+ reverseipAddress ); Record[] records; Lookup lookup = new Lookup( reverseipAddress, Type.PTR ); SimpleResolver resolver = new SimpleResolver(); resolver.setAddress( InetAddress.getByName( ModemIPAddress ) ); lookup.setResolver( resolver ); records = lookup.run(); if ( lookup.getResult() == Lookup.SUCCESSFUL ) { for (int i = 0; i < records.length; i++) { if( records[i] instanceof PTRRecord ) { PTRRecord ptr = (PTRRecord) records[i]; return records[0].rdataToString(); } } } else { Log.e( TAG ,"Failed lookup"+ lookup.getResult() ); } } catch(Exception e) { Log.e( TAG ,"Exception: " + e); } return ipAddress;

    }

  3. Linux 命令

    我曾嘗試在 android linux 終端上運行 nslookup、host、dig 等命令,但這些命令不起作用。 例如:OnePlus5T:/ $ dig -x

    /system/bin/sh: dig: 無法訪問或未找到

像 fing 這樣的應用程序在這方面做得更好。 即使 fing 也無法找到網絡中設備的所有主機名,但它比我能夠完成的要好得多。 有類似這樣的問題Can't do reverse DNS lookup on Android但沒有令人信服的答案。

任何幫助使它變得更好的幫助表示贊賞。

請嘗試以下操作:

inetAddr = InetAddress.getByName(ipAddress);
inetAddr.getHostName();

由於 .getHostName() 觸發網絡操作,因此您必須確保該方法不在主 / UI 線程中調用。 另請注意,可能存在沒有任何指定主機名的 IP 地址(尤其是在本地網絡中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM