当前位置:   article > 正文

SAMBA总结_samba协议

samba协议

 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开发
 

  1. client = new SMBClient();
  2. connection = client.connect(remoteIp);
  3. // 创建连接会话.
  4. authenticationContext = new AuthenticationContext(username, password.toCharArray(), domain);
  5. session = connection.authenticate(authenticationContext);
  6. // 操作共享文件.
  7. diskShare = (DiskShare) session.connectShare(remoteUrl);

注意会话有域名参数,如果有域名需要填写。
上面这段代码,remoteUlr应该写什么?
1、我的用户名是smbuser,用户的目录权限是/home/smbuser/
      那么smb配置文件中,path路径必须要在/home/smbuser/下,否则会有权限问题。
2、共享路径:sharePath,我配置的都是写用户名字(没研究怎么设置成别的名字)

 所以我的 remoteUrl就是共享路径:smbuser,注意,必须是smbuser这几个字母,不可以加/,也不能为空。
上传文件:

  1. shareFile = diskShare.openFile(remotefilename,
  2. EnumSet.of(AccessMask.GENERIC_WRITE),
  3. EnumSet.of(FileAttributes.FILE_ATTRIBUTE_NORMAL),
  4. SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN_IF,
  5. EnumSet.noneOf(SMB2CreateOptions.class));

remotefilename应该写全路径:

例1:想上传file.txt到smbuser的跟目录下,直接写file.txt就行,实际存到/home/smbuser/file.txt中
例2:想上传test/file.txt中,那么写 test/file.txt,前面没有/

查看文件
 

  1. //当遍历跟路径时候,参数是null或者"".
  2. List<FileIdBothDirectoryInformation> list = diskShare.list("");
  3. //当遍历其他路径时候,参数是文件夹名字.
  4. List<FileIdBothDirectoryInformation> list1 = diskShare.list("test");
  5. //这样也可以
  6. List<FileIdBothDirectoryInformation> list2 = diskShare.list("test/");
  7. //错误,不能这么写,前面不能写/
  8. List<FileIdBothDirectoryInformation> list2 = diskShare.list("/test/");

  关闭问题,自己总结的,通过文件和连接状态

关闭文件是否占用连接是否在
shareFile×
DiskShare×
Session×
Connection××
SMBClient××
遇到问题1:关闭 DiskShare连接时候报错,我的原因是目录权限问题,给目录添加smb用户的权限即可,重启smb服务。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/184132
推荐阅读
相关标签
  

闽ICP备14008679号