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

 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服务。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Samba是一种在Linux和Unix系统中实现Windows文件共享协议的软件。在公司内部,我们使用Samba来实现文件共享和打印服务。在使用Samba过程中,我学到了很多有关于Samba的知识和经验,现在来总结一下。 一、安装SambaLinux系统中,安装Samba非常简单。只需要在终端中使用命令sudo apt-get install samba进行安装。安装完成后,还需要对Samba进行配置,主要是配置Samba的配置文件smb.conf。配置文件的位置在/etc/samba/目录下。 二、创建Samba用户 在Samba中,需要为每个用户创建一个Samba账户。这个账户与Linux系统的用户账户不同。需要使用专门的命令smbpasswd -a 用户名来为用户创建Samba账户。创建完账户之后,需要在smb.conf文件中进行相关配置,将用户信息加入到Samba的用户列表中。 三、配置Samba共享 在Samba中,可以共享整个目录或者单个文件。共享的目录或文件需要在smb.conf文件中进行配置。我们可以配置共享的名称,访问权限等等。在共享中,还可以使用Samba的其他功能,比如配置文件的访问权限、打印服务等等。 四、测试Samba共享 在Samba配置完成之后,需要进行测试。可以使用Windows系统或Linux系统中的Samba客户端进行测试。在测试时,需要输入Samba共享的名称和对应的Samba账户信息。如果测试成功,就可以访问Samba共享中的文件和目录了。 总结 Samba是一种非常实用的软件,能够在Linux和Unix系统中实现Windows文件共享协议。在使用Samba过程中,需要注意安装和配置,还需要为每个用户创建Samba账户。在共享中,需要进行访问权限的配置。最后,需要进行测试,确保Samba共享能够成功访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. You……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值