3

我试图了解如何在给定 IP 地址的情况下使用 JCIFS 获取 LAN 上计算机的名称,但除了它的 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 的 Mac 测试 lib 10.1.2.117,而目标是 Android 设备。

4

4 回答 4

1

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

于 2016-07-08T00:27:11.150 回答
1
    /*
      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();
于 2018-03-17T03:45:19.633 回答
0

有点晚了,但我在 jcifs 1.3.17 上遇到了同样的问题。我恢复到 1.2.25,它现在可以工作了。

于 2013-05-27T23:48:15.847 回答
-2

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

InetAddress addr = InetAddress.getByName("127.0.0.1");
String host = addr.getHostName();
于 2013-01-11T11:25:55.073 回答