赞
踩
SMB协议和SMB2协议区别:
SMB(Server Message Block)是一种用于在计算机间共享文件、打印机等资源的协议。其第一个版本(SMB1)最初由IBM开发,在1990年代早期被微软引入到Windows操作系统中。
SMB2是在SMB1的基础上开发的一种全新的协议版本。其主要目的是提高性能和安全性。SMB2相较于SMB1有以下几个不同之处:
1. 性能优化:SMB2使用更高效的数据结构和协议通信方式,从而提供更快的传输速度和更低的延迟。
2. 安全性增强:SMB2支持数字签名和加密来保护通信内容。
3. 更好的可靠性:SMB2能够通过更好的错误处理和恢复机制来提高协议的可靠性和稳定性。
4. 支持更多的命令和功能:SMB2支持更多的操作命令和功能,从而提高了它的灵活性和可扩展性。
总体而言,SMB2是SMB1的升级版本,提供更好的性能和安全性,并且支持更多的功能。
java通过哪些jar包连接SMB协议:
在Java里连接SMB协议的话,常用的库包括:
1. jcifs:这是一个Java实现的SMB客户端和服务器库,它可以连接到SMB共享文件夹,支持SMB1和SMB2协议。您可以在Maven仓库中找到jcifs的依赖。
2. smbj:这是一个轻量级的Java库,用于访问SMB文件共享。它支持SMB2和SMB3协议,并且提供一组易于使用的API。smbj同样可以通过Maven仓库获取。
3. j-interop:这是一个Java平台上的WS-Management和DCOM协议库。除了SMB协议外,它还支持连接Windows系统的其他操作方式。j-interop同样可以在Maven仓库中获取。
根据您的具体使用场景和需求,选择一个适合您的库即可。
SMB协议的版本:
SMB协议的版本主要有以下几个:
1. SMB1(也称作CIFS):这是SMB协议最早的版本,最初由IBM开发,并在1990年代早期被微软引入到Windows操作系统中。与后续版本相比,SMB1的性能和安全性较低,在现代环境中已经不再被推荐使用。
2. SMB2:SMB2是在SMB1的基础上开发的一种全新的协议版本。其主要目的是提高性能和安全性。SMB2相较于SMB1有以下几个不同之处:性能优化、安全性增强、更好的可靠性以及支持更多的命令和功能。
3. SMB3:SMB3是SMB协议最新的版本。它主要是为了支持Windows 8和Windows Server 2012的新功能而开发的。与SMB2相比,SMB3在性能、安全性和功能方面都有了进一步的提升。SMB3支持SMB2的所有功能,并新增加了更多的功能,如支持RDMA(远程直接内存访问)和SMB加密等。
总体而言,SMB协议的更新版本不仅提高了性能、安全性和功能,还在一定程度上解决了SMB1版本中存在的一些问题。因此,建议使用较新的SMB版本并逐步停用SMB1。
samba服务端版本有哪些:
Samba是一个开放源代码的服务端软件,用于在Linux、Unix和其他类Unix系统上分享文件和打印机。截至目前,Samba已经发布了很多版本。以下是一些主要版本的简介:
1. Samba 1.x:这是Samba最早的版本,最初在1992年开发。Samba 1.x是SMB协议(版本1.0)的最早实现之一。
2. Samba 2.x:这个版本引入了多个新的功能,如Unicode支持、新的命令和解决了一些问题。
3. Samba 3.x:Samba 3.x是一个重要的版本,它引入了对SMB协议2.x(即SMB2)的支持,提高了Samba在网络中的性能,并引入了更多的功能,如DCE/RPC支持、LDAP支持和ACL支持等。
4. Samba 4.x:这个版本引入了对Active Directory的支持,可以在Windows域中作为域控制器或成员服务器使用。Samba 4.x还提供了更高的性能和可扩展性,并引入了更多的功能,如DFS支持、VSS(卷影副本)支持和加密支持。
5. Samba 5.x:该版本是目前最新的版本,它继续增强了性能和功能,加强了安全性和可靠性,提供了更好的互操作性和集成,并引入了一些新的功能,如文件级WORM支持、更好的GPO支持和更好的DFS支持等。
需要注意的是,不同版本的Samba在功能和性能上都有所不同,因此在选择使用时需要根据实际需求认真考虑。
Samba和SMB区别 :
Samba和SMB(Server Message Block)是两个相关但不同的概念。
Samba是一款可以在 Linux、Unix 和类 Unix 的系统上实现 SMB 并与 Windows 交互的开放源码软件。简单来说,它是一种实现 SMB 协议的软件,它允许 Linux 等系统与 Windows 系统之间实现文件和打印机共享。
SMB是一种应用层协议,是微软公司开发的一种用于在计算机之间共享文件、打印机和其他资源的网络协议。SMB 最初开发是为了在本地区域网(LAN)内实现文件和打印机共享,后来的版本可以通过 Internet 连接进行远程文件访问。
因此,Samba是一种实现 SMB 协议的软件,用于在 Linux 等系统上与 Windows 系统交互,而 SMB 是一种协议,用于在计算机之间实现文件和打印机共享。SMB 协议是微软公司开发的,Samba 则是由社区的开发人员根据 SMB 协议实现的。
java使用jcifs.jar开发,
具体怎么实现网上很多,记录一下遇到的问题。
1、我的用户名是smbuser,用户的目录权限是/home/smbuser/
那么smb配置文件中,path路径必须要在/home/smbuser/下,否则会有权限问题。
2、共享路径:sharePath,我配置的都是写用户名字(没研究怎么设置成别的名字)
那么ULR中的sharePath的实际路径最终指向的就是/home/smbuser/。
url:smb://192.168.1.1:/smbuser/file.txt实际存到系统的文件路径为 /home/smbuser/file.txt
url:smb://192.168.1.1:/smbuser /test1/file.txt
实际存到系统的文件路径为 /home/smbuser/test1/file.txt
url:smb://192.168.1.1:/smbuser/test1/test2/file.txt实际存到系统的文件路径为 /home/smbuser/test1/test2/file.txt
用户名可能有域名,java中,注意NtlmPasswordAuthentication有三种构造方法,跟域有关
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user+ ":" + passwd);
此时,不需要管是否有域名,也可以这么写:
java使用smbj.jar开发
client = new SMBClient(); connection = client.connect(remoteIp); // 创建连接会话. authenticationContext = new AuthenticationContext(username, password.toCharArray(), domain); session = connection.authenticate(authenticationContext); // 操作共享文件. diskShare = (DiskShare) session.connectShare(remoteUrl);注意会话有域名参数,如果有域名需要填写。
上面这段代码,remoteUlr应该写什么?
1、我的用户名是smbuser,用户的目录权限是/home/smbuser/
那么smb配置文件中,path路径必须要在/home/smbuser/下,否则会有权限问题。
2、共享路径:sharePath,我配置的都是写用户名字(没研究怎么设置成别的名字)所以我的 remoteUrl就是共享路径:smbuser,注意,必须是smbuser这几个字母,不可以加/,也不能为空。
上传文件:
shareFile = diskShare.openFile(remotefilename, EnumSet.of(AccessMask.GENERIC_WRITE), EnumSet.of(FileAttributes.FILE_ATTRIBUTE_NORMAL), SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN_IF, EnumSet.noneOf(SMB2CreateOptions.class));remotefilename应该写全路径:
例1:想上传file.txt到smbuser的跟目录下,直接写file.txt就行,实际存到/home/smbuser/file.txt中
例2:想上传test/file.txt中,那么写 test/file.txt,前面没有/
查看文件
//当遍历跟路径时候,参数是null或者"". List<FileIdBothDirectoryInformation> list = diskShare.list(""); //当遍历其他路径时候,参数是文件夹名字. List<FileIdBothDirectoryInformation> list1 = diskShare.list("test"); //这样也可以 List<FileIdBothDirectoryInformation> list2 = diskShare.list("test/"); //错误,不能这么写,前面不能写/ List<FileIdBothDirectoryInformation> list2 = diskShare.list("/test/");关闭问题,自己总结的,通过文件和连接状态
关闭 文件是否占用 连接是否在 shareFile × √ DiskShare × √ Session × √ Connection × × SMBClient × ×
遇到问题1:关闭 DiskShare连接时候报错,我的原因是目录权限问题,给目录添加smb用户的权限即可,重启smb服务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。