【问题标题】:Can't connect to samba server with jcifs无法使用 jcifs 连接到 samba 服务器
【发布时间】:2015-08-04 08:58:00
【问题描述】:

我正在尝试将一些文件从我的本地计算机复制到与我的计算机使用 Java 连接在同一网络中的 samba 服务器。

如果我尝试通过浏览器登录或在 Ubuntu 网络设备文件夹中打开它没有问题,但是通过 Java 我似乎无法成功登录。

这是我的代码:

public static void function() throws MalformedURLException, SmbException {
    String urlToBackUpFile = "smb://dlink-5e6490//Volume_1/newfolder/file.zip";
    NtlmPasswordAuthentication auth = new **NtlmPasswordAuthentication("192.168.1.8", "admin", null);**
    SmbFile dir = new SmbFile(urlToBackUpFile, auth);
    SmbFile dest = new SmbFile("file:///home/username/file.zip");
    dir.copyTo(dest);
}

我总是遇到两个错误之一。

如果我只在用户名和密码字段中插入域和 null,我会收到以下错误:

线程“主”jcifs.smb.SmbException 中的异常:网络名称 找不到。在 jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563) 在 jcifs.smb.SmbTransport.send(SmbTransport.java:663) 在 jcifs.smb.SmbSession.send(SmbSession.java:238) 在 jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 在 jcifs.smb.SmbFile.doConnect(SmbFile.java:911) 在 jcifs.smb.SmbFile.connect(SmbFile.java:957) 在 jcifs.smb.SmbFile.connect0(SmbFile.java:880) 在 jcifs.smb.SmbFile.copyTo(SmbFile.java:2304) 在 javaapplication2.JavaApplication2.function(JavaApplication2.java:40) 在 javaapplication2.JavaApplication2.main(JavaApplication2.java:48) Java 结果:1

但是,如果我尝试将值 "admin" 插入用户名并将 null"" 插入密码(有管理员帐户没有密码)它给了我这个错误:

线程“主”jcifs.smb.SmbAuthException 中的异常:登录失败: 未知的用户名或错误的密码。 在 jcifs.smb.SmbSession.sessionSetup(SmbSession.java:406) 在 jcifs.smb.SmbSession.send(SmbSession.java:218) 在 jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 在 jcifs.smb.SmbFile.doConnect(SmbFile.java:911) 在 jcifs.smb.SmbFile.connect(SmbFile.java:957) 在 jcifs.smb.SmbFile.connect0(SmbFile.java:880) 在 jcifs.smb.SmbFile.copyTo(SmbFile.java:2303) 在 javaapplication2.JavaApplication2.function(JavaApplication2.java:40) 在 javaapplication2.JavaApplication2.main(JavaApplication2.java:48) Java 结果:1

我尝试了 NtlmPasswordAuthentication 这一行的各种组合,比如...

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", null, null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", "admin", null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.1.8", "admin", "");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", null, null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", "admin", null);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("smb://dlink-5e6490/", "admin", "");

...但似乎没有任何效果。

有谁知道问题出在哪里?

【问题讨论】:

  • 你试过设置域吗?
  • 我按照this 教程创建了一个共享文件夹,但我仍然无法登录。我不知道这是否“设置域”。如果没有,你能告诉我怎么做吗?

标签: java samba jcifs cifs


【解决方案1】:

我最终使用 Linux 命令来完成这项任务:

String command = "mount -o password=\"" + serverPassword + "\" -t cifs //192.168.1.8/Volume_1 /mnt/files/";

String[] cmd = {"/bin/bash", "-c", ("echo " + sudoPassword + "| sudo -S " + command)};

Runtime.getRuntime().exec(cmd);

不建议以这种方式使用 sudo,但这是我设法使其工作的唯一方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2015-03-14
    • 2018-10-27
    相关资源
    最近更新 更多