使用JCIFS从IP获取主机名

3
我正在尝试使用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

如果我用toString()替换getHostAddress(),得到的结果是:
    IP: 10.1.2.115 - addr: 10.1.2.115 - test: 0.0.0.0<00>/10.1.2.115

我在这里错了吗?

我正在使用Mac上的IP 10.1.2.117测试该库,而目标设备是Android设备。


这可能是因为InetAddress的名称解析不执行NMB查找...而且您没有运行DNS服务器。 - fge
是的,但问题出在“test”上,它应该给我返回名称,但却返回了IP地址... - tiwiz
4个回答

2

JCIFS在1.3.14版本中停止支持Netbios名称解析。您可以查找停止此功能的发布说明。https://jcifs.samba.org/


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();

2
请修改您的回答并详细说明您的回答将如何帮助未来的某个人。 - Shashanth
1
请在答案正文中发布您的解释,而不是在评论中。(请仔细阅读我的评论。您会在那里获得编辑链接) - Shashanth
1
我已经在答案中添加了解释,谢谢你提醒我。@Shashanth - horst

0
有点晚了,但我也遇到了jcifs 1.3.17的同样问题。我回退到了1.2.25版本,现在它可以正常工作了。

-2

你能否使用标准的Java API呢?如果可以,请尝试以下方法

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

它返回了地址...不幸的是,我注意到它应该是这样的,因为(至少从我理解的)只有Windows有Netbios名称...但我不明白其他应用程序如何查看,例如我的手机名称... - tiwiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接