【问题标题】:Ip address to NetBIOS/FQDN name in Java/AndroidJava/Android 中 NetBIOS/FQDN 名称的 IP 地址
【发布时间】:2012-10-07 10:13:48
【问题描述】:

鉴于我的 Android 设备在同一网络上的计算机的 IP 地址,我必须找到它的 NetBIOS/FQDN 名称......有没有任何“干净”的解决方案可以使用 Android SDK 完成此任务,一般来说在 java ?

显然 InetAddress.get*HostName 不返回 NetBIOS 名称 :)

【问题讨论】:

    标签: java android hostname fqdn netbios


    【解决方案1】:

    你可以使用JCIFS开源库。

     InetAddress addr = NbtAddress.getByName( "hostname" ).getInetAddress();
    

    双向工作,IP 地址到主机名,反之亦然。

    【讨论】:

      【解决方案2】:

      实际上,Tom提供的代码不起作用,这段代码对我有用(使用JCIFS lib。)

      NbtAddress[] nbts = NbtAddress.getAllByAddress("IP ADDRESS AS STRING");
      String netbiosname = nbts[0].getHostName();
      

      如果成功,则将 NetBios 设备名称作为字符串返回,如果目标不存在或没有 NetBios 名称,则抛出 UnknownHostException。

      【讨论】:

        【解决方案3】:

        试试这个...

        import java.util.Hashtable;
        import javax.naming.Context;
        import javax.naming.NamingEnumeration;
        import javax.naming.directory.SearchControls;
        import javax.naming.directory.SearchResult;
        import javax.naming.ldap.InitialLdapContext;
        import javax.naming.ldap.LdapContext;
        
        public class SearchNetBIOSName {
        
            public static void main(String[] args) {
                try {
                    Hashtable<String, String> env = new Hashtable<String, String>();
                    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
                    env.put(Context.PROVIDER_URL, "ldap://my.domain.com:389");
                    env.put(Context.SECURITY_AUTHENTICATION, "simple");
                    env.put(Context.SECURITY_PRINCIPAL, "cn=administrator,cn=users,dc=my,dc=domain,dc=com");
                    env.put(Context.SECURITY_CREDENTIALS, "********");
                    LdapContext context = new InitialLdapContext(env, null);
                    String searchBase = "cn=Partitions,cn=Configuration,dc=my,dc=domain,dc=com";
                    String searchFilter = "(&(objectcategory=Crossref)(netbiosname=*))";
                    SearchControls controls = new SearchControls();
                    controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
                    NamingEnumeration answers = context.search(searchBase, searchFilter, controls);
                    while (answers.hasMore()) {
                        SearchResult rs = (SearchResult) answers.next();
                        String netBiosName = rs.getAttributes().get("NetBIOSName").get(0).toString();
                        System.out.println(netBiosName);
                    }
                    context.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        

        【讨论】:

        • 我应该用什么代替 my.domain.com ?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        相关资源
        最近更新 更多