从JCIFS获取ip的主机名

时间:2013-01-11 11:22:55

标签: java jcifs

我试图了解如何在我的局域网上获得一个computr的名称给定JCIFS的IP地址,但除了IP之外我什么都得不到。

我正在使用的代码是

    InetAddress addr = NbtAddress.getByName( ip ).getInetAddress();
    String test = UniAddress.getByName(ip).getHostName();
    System.out.println("IP: " + ip + " - addr: " + addr.getHostName() + " - test: " + test);

我得到的结果是

    IP: 10.1.2.115 - addr: 10.1.2.115 - test: 10.1.2.115

相反,如果我将getHostAddress()替换为toString()我得到的是

    IP: 10.1.2.115 - addr: 10.1.2.115 - test: 0.0.0.0<00>/10.1.2.115

我在哪里错了?

我正在使用IP 10.1.2.117从Mac测试lib,而目标是Android设备。

4 个答案:

答案 0 :(得分:1)

JCIFS stop支持1.3.14版本的Netbios名称解析。 您可以找到用于停止此操作的发行说明。 https://jcifs.samba.org/

答案 1 :(得分:0)

有点晚了,但我和jcifs 1.3.17有同样的问题。我恢复到1.2.25,它现在有效。

答案 2 :(得分:0)

    /*
      Jcifs 1.3 no longer calls NbtAddress#checkData() in 
      NbtAddress#getHostName, so you need to actively call 
      NbtAddress#getNodeType() or NbtAddress#isGroupAddress() before acquiring hostName.
    */
    UniAddress address= UniAddress.getByName(currentIp,
                    true);
    Object o = address.getAddress();
    if (o instanceof NbtAddress) {
        NbtAddress nbtAddress = (NbtAddress) o;
        // jcifs 1.3 need call this method for request netbios name.
        nbtAddress.getNodeType();
    }
    ipScan.domain = address.getHostName();

答案 3 :(得分:-1)

您可以使用标准的java api吗?如果是这样,请尝试以下

InetAddress addr = InetAddress.getByName("127.0.0.1");
String host = addr.getHostName();