当前位置: 首页 > news >正文

Spring Boot 使用 SMB 协议

2025/4/14

向全栈工程师迈进!

一、详述SMB协议

SMB(Server Message Block)协议是一个网络文件共享协议,它使得计算机可以在网络中共享文件、打印机以及其他资源。SMB 主要用于 Windows 操作系统,但也有其他平台(如 Linux 和 macOS)可以实现 SMB 协议的支持。

SMB 协议使用客户端-服务器模型,其中客户端向服务器请求共享文件、打印机等资源。SMB 提供了多种功能,如:

  1. 文件共享:客户端可以请求服务器共享的文件,进行读取、写入等操作。

  2. 打印机共享:客户端可以向服务器共享的打印机发送打印任务。

  3. 网络浏览:客户端可以浏览网络中可用的共享资源。

  4. 验证和权限控制:客户端在请求资源时,服务器会验证其身份,并根据权限控制访问。

SMB 协议基于请求和应答机制,客户端通过发送请求(例如文件打开、文件读取、文件写入等)与服务器进行通信,服务器根据请求进行相应的操作,然后返回结果。

1.1 SMB 协议的工作流程

  • 客户端发送请求:客户端通过网络发送 SMB 请求,请求某个资源(如共享文件夹、打印机等)。

  • 服务器验证身份:服务器通常会验证客户端的身份,如果验证成功,它会检查客户端对目标资源的访问权限。

  • 资源操作:客户端可以请求对共享资源执行各种操作,如读取文件、写入文件、删除文件等。

  • 服务器响应:服务器根据客户端的请求执行操作,并返回响应结果。

二、SMB协议的使用

2.1 实际应用示例----文件共享 

假设你在一个局域网内有两台计算机,分别是 A 和 B。计算机 B 共享了一个文件夹,计算机 A 需要访问这个文件夹中的文件。

  • 计算机 B:在共享设置中,选择将某个文件夹共享出来,配置访问权限(如只读或读写权限)。

  • 计算机 A:通过文件资源管理器,输入 B 计算机的 IP 地址或计算机名,访问共享文件夹。

    • 例如,在 Windows 上,A 计算机可以通过 \\192.168.1.100\shared_folder 访问 A 的共享文件夹

在这个过程中,SMB 协议会负责客户端(计算机 A)和服务器(计算机 B)之间的通信,确保文件传输的顺利进行

以下通过 Java 访问计算机 B 上的共享文件夹(比如在计算机 B 上共享了一个文件夹 shared_folder),现在使用 JCIFS,这是一个开源的 Java 库,允许通过 SMB 协议与共享资源交互。以下是使用 JCIFS 实现计算机 A 访问计算机 B 上的共享文件夹的示例。

2.2添加依赖

<dependency>
    <groupId>jcifs</groupId>
    <artifactId>jcifs</artifactId>
    <version>1.3.17</version>
</dependency>

2.3代码

最核心的代码 SmbFile sharedFolder = new SmbFile(sharedFolderPath, auth),通过传入计算机 B 上共享文件夹的地址(要以MSB协议能看懂的格式,例如:"smb://192.168.1.100/shared_folder/")以及一些用户信息创建了一个连接共享文件夹的对象sharedFolder。然后通过这个连接的共享文件夹对象就可以读取相应的要访问的内容了。

import jcifs.smb.*;

public class SMBExample {
    public static void main(String[] args) {
        String username = "yourUsername"; // 计算机 B 上的用户名
        String password = "yourPassword"; // 计算机 B 上的密码
        String sharedFolderPath = "smb://192.168.1.100/shared_folder/"; // 计算机 B 上共享文件夹的地址

        // 设置认证信息
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", username, password);
        
        try {
            // 连接到共享文件夹
            SmbFile sharedFolder = new SmbFile(sharedFolderPath, auth);
            
            // 检查共享文件夹是否存在
            if (sharedFolder.exists()) {
                System.out.println("Successfully connected to the shared folder!");
                
                // 读取共享文件夹中的文件列表
                SmbFile[] files = sharedFolder.listFiles();
                if (files != null) {
                    for (SmbFile file : files) {
                        System.out.println("Found file: " + file.getName());
                    }
                }
            } else {
                System.out.println("Shared folder does not exist.");
            }
        } catch (SmbException e) {
            System.out.println("SMB Exception: " + e.getMessage());
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
    }
}

2025/4/14

dream dream 

 

 

相关文章:

  • Sentinel源码—1.使用演示和简介二
  • 【算法学习笔记】37:扩展中国剩余定理(EXCRT)求解任意线性同余方程组
  • 【微服务管理】注册中心:分布式系统的基石
  • python每日一练
  • 【模块化拆解与多视角信息3】教育背景:学历通胀时代的生存法则
  • JMeter使用
  • css解决边框四个角有颜色
  • 关于数据清洗和数据处理实践学习笔记
  • 任意文件读取 + java逆向 -- File_download sqctf WP
  • 【中级软件设计师】前趋图 (附软考真题)
  • HJ16 购物单
  • 【Linux生成SSH秘钥实现远程连接】Linux生成SSH秘钥对与修改服务配置文件实现无密码远程连接
  • PyCharm 开发工具 修改背景颜色
  • VMware vCenter Server 安全漏洞升级方案一则
  • 基于 SSM 高校二手交易平台
  • 如何在 Java 中对 PDF 文件进行数字签名(教程)
  • 打造现代数据基础架构:MinIO对象存储完全指南
  • 如何快速部署基于Docker 的 OBDIAG 开发环境
  • 初识大模型
  • OpenAI 焕新力作:ChatGPT 开启“记忆长廊”,对话皆成专属印记
  • 吉祥航空去年净利增超17%,海航实控人方威退出前十大股东
  • 大理杨徐邱上诉案开庭:当事人称曾接受过两次测谎测试
  • 致敬劳动者!今年拟表彰2426名全国劳动模范和先进工作者
  • 深一度|上海半马,展示“体育+”无限可能的路跑狂欢
  • 泽连斯基:俄军违反停火承诺,20日10时起前线俄炮击增加
  • 魔都眼|上海半马鸣枪:白金标运动员、“箱根之子”齐参赛