2012-10-07 67 views
1

给定我的Android设备在同一网络上的计算机的IP地址,我必须找到它的NetBIOS/FQDN名称......有没有任何“干净”的解决方案用Android SDK完成这个工作,一般来说在java中完成?IP地址NetBIOS/FQDN名称在Java/Android

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

回答

4

您可以使用JCIFS开源库。

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

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

0

尝试......

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(); 
     } 
    } 
} 
+0

我应该用什么来代替my.domain.com? –

+2

真是无稽之谈...... – RumburaK

3

事实上,由汤姆所提供的代码不能正常工作,此代码对我的作品(含JCIFS库。)

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

回报的NetBios设备名字符串,如果成功,或者抛出的UnknownHostException如果目标不存在或没有NetBios名称。

+0

工作的很棒。谢谢Marek – Bill