gpt4 book ai didi

未启用 SMB 1.0/CIFS 兼容性的 Java SMB 文件共享

转载 作者:行者123 更新时间:2023-12-01 20:21:21 26 4
gpt4 key购买 nike

我必须更新使用适用于 Windows Server 2012 的 JCIFS 的旧文件共享软件。出于安全目的,我们必须禁用 SMB 1.0/CIFS 兼容性。有谁知道可以在 Java 中使用的 JCIFS 的解决方法、修复或替代方案吗?

最佳答案

我刚刚发布了类似问题的答案:

Accessing SMB2.1 or SMB3 share from java?

<...>我刚刚使用过hierynomus/smbj v0.2.0在 Android 上并添加了 SMB2 支持。<...>需要 BouncycaSTLe/SpongycaSTLe<...>

上传文件

确保在 DiskShare 上调用 openFile 时设置正确的标志(通过查看源代码):

// required imports
import com.hierynomus.msdtyp.AccessMask;
import com.hierynomus.msfscc.FileAttributes;
import com.hierynomus.mssmb2.SMB2CreateDisposition;
import com.hierynomus.mssmb2.SMB2CreateOptions;
import com.hierynomus.mssmb2.SMB2ShareAccess;
import com.hierynomus.smbj.SMBClient;
import com.hierynomus.smbj.SmbConfig;
import com.hierynomus.smbj.auth.AuthenticationContext;
import com.hierynomus.smbj.common.SMBApiException;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;
import com.hierynomus.smbj.share.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashSet;
...
// connection params
String sambaDomain = null; // can be null
String sambaUsername = "iamuploader";
String sambaPass = "mysecret";
String sambaIP = "192.168.1.236";
String sambaSharedPath = "sharedfolder";

...
// upload method
// usage: upload("file/whithin/folder.txt", fileBytes);
public void upload(String filename, byte[] bytes) throws IOException {

SmbConfig cfg = SmbConfig.builder().build();
SMBClient client = new SMBClient(cfg);
Connection connection = client.connect(sambaIP);
Session session = connection.authenticate(new AuthenticationContext(sambaUsername, sambaPass.toCharArray(), sambaDomain));
DiskShare share = (DiskShare) session.connectShare(sambaSharedPath);

// this is com.hierynomus.smbj.share.File !
File f = null;
int idx = filename.lastIndexOf("/");

// if file is in folder(s), create them first
if(idx > -1) {
String folder = filename.substring(0, idx);
try {
if(!share.folderExists(folder)) share.mkdir(folder);
} catch (SMBApiException ex) {
throw new IOException(ex);
}

}

// I am creating file with flag FILE_CREATE, which will throw if file exists already
if(!share.fileExists(filename)){
f = share.openFile(filename,
new HashSet<>(Arrays.asList(AccessMask.GENERIC_ALL)),
new HashSet<>(Arrays.asList(FileAttributes.FILE_ATTRIBUTE_NORMAL)),
SMB2ShareAccess.ALL,
SMB2CreateDisposition.FILE_CREATE,
new HashSet<>(Arrays.asList(SMB2CreateOptions.FILE_DIRECTORY_FILE))
);
}

if(f == null) return null;

OutputStream os = f.getOutputStream();
os.write(bytes);
os.close();
}

关于未启用 SMB 1.0/CIFS 兼容性的 Java SMB 文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44634892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com