cifs 文件服务器,使用SMB/CIFS做文件服务器

article/2025/8/19 23:09:57

SMB/CIFS组件是一种Java访问共享文件夹的实现,使用它也是可以很方便的管理上传下载的文件,先闲话一些别的吧。很久以前有遇到文件的上传下载时,很“单纯”的将文件写至servletContext.getRealPath("/files");目录下,然后就没有然后了,后来慢慢的将某个服务器的共享文件夹以磁盘映射的方式作为本地的磁盘进行访问,也就是说访问时以Z:\\shares......去访问共享文件......在之前的项目中新做的文件上传下载有要求写入一个服务器上,而使用的技术实现则是从一个老系统中迁移出来的,我还一直以为用到的实现时上传的文档服务器提供的接口,并未多想,如果不是前段时间又遇到此种问题了,或许也就没有下文了。最近我找了找它还真的是一个开源组件,基于smb协议的文件访问。一般项目当中的文档管理,基本的功能是对文档目录的列表读取、文件(夹)的增删改查以及文件的上传下载等,其最核心的包括:

1、根据目录获取目录下的所有文件(夹);

根据目录读取所有文件(夹),有了它就相当于有了文件结构的树,进一步说可以对目录及文件的增删改查了。

2、根据文件的标识获取文件的输入输出流;

输入输出流对应了文件的上传下载,如果说文件结构管理是管理员做的事情,那么上传下载就是与普通用户交互的了,有了输出流可以下载一个文件(直接输出至浏览器);输入流可将上传的附件写入共享目录中了。

简单的实现其实就是这么点儿了,将之前使用时的一些经验做了个简单的例子,包括文件的结构读取、文件的写入和写出,参考如下代码:

org.samba.jcifs

jcifs

1.3.14-kohsuke-1

/**

*

*/

packagecn.chendd.smb;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjcifs.smb.SmbFile;

/**

*@authorchendd

*

*/

public classTest {

/**

* smb允许的URL为文件夹时必须以/结束,获取到的文件夹的名称仍然以/结束

*/

private static finalStringSMB_SHARE_FOLDER="smb://chendd:admincdd@127.0.0.1/smbShareTest/";

/**

* smb允许的URL为文件夹时必须以/结束

*@throwsException

*/

public static voidlistFiles()throwsException{

SmbFile smbFile =newSmbFile(SMB_SHARE_FOLDER);

SmbFile files[] = smbFile.listFiles();

for(SmbFile file : files){

System.out.println("名称:"+ file.getName() +",类型:"+ (file.isDirectory() ?"文件夹":"文件"));

}

}

public static voidmain(String[] args)throwsException {

//打印共享目录下所有的文件

System.out.println("*****打印共享文件夹下的所有一级目录*****");

listFiles();

System.out.println("================================");

//将某个文件写入共享目录

System.out.println("*****上传一个文件至共享目录*****");

uploadFile();

System.out.println("================================");

System.out.println("*****从共享目录中下载一个文件*****");

downloadFile();

}

private static voiddownloadFile()throwsException{

SmbFile smbFile =newSmbFile(SMB_SHARE_FOLDER+"jdfw.gif");

File outputFile =newFile("C:\\Users\\chendd\\Desktop\\jdfw_new.gif");

InputStream is = smbFile.getInputStream();

OutputStream os =newFileOutputStream(outputFile);

byteb[] =new byte[1024];

intlen = 0;

while((len = is.read(b)) != -1){

os.write(b, 0, len);

}

os.flush();

os.close();

System.out.println("文件下载成功...");

}

private static voiduploadFile()throwsException {

File file =newFile("C:\\Users\\chendd\\Desktop\\jdfw.gif");

String fileName= file.getName();

SmbFile smbFile =newSmbFile(SMB_SHARE_FOLDER+ fileName);

InputStream is =newFileInputStream(file);

byteb[] =new byte[1024];

intlen = 0;

OutputStream out = smbFile.getOutputStream();

while((len = is.read(b)) != -1){

out.write(b, 0, len);

}

out.flush();

out.close();

System.out.println("文件上传成功...");

}

}

运行结果如下:

1469149187896024453.png.image

当访问一个everyone的共享目录时,且不需要密码时的smb协议路径为:smb://127.0.0.1/smbShareTest/,一般情况下常常是会有账户密码的,就给出例子中的写法,本示例中的共享目录是本机的,在示例中遇到了一个smb Logon failure错误,解决方式如下:

1469149187927053821.png.image

1469149188055052074.png.image

总结:在读取Windows的共享目录时,可能会由于网络问题、权限问题而出现一些问题。

@补充一下,

1、密码含有特殊字符的问题

一般在使用smb访问共享文件的时候,除了上述方式外还有另外一种方式,即请求的地址为:smb://ip/路径,避免账号和密码在这个地址中存在,因为密码可以是含有特殊字符的,一旦含有一些其它特殊字符直接请求是会有问题的,所以通常还会有另外一种写法:String shareFolder = "smb://127.0.0.1/test/";

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("127.0.0.1", "admin", "passwor$@f/\@F");

SmbFile smbFileFolder = new SmbFile(shareFolder , auth);

String lists[] = smbFileFolder.list();

for (String list : lists) {

System.out.println(list);

}

2、有时候访问的共享文件特别慢

出现这个情况是通过SmbFile获取到了一个数组对象,循环它里面的一个个具体文件的时候,导致特别慢,进程假死等情况,后来换成了在循环的时候再重新根据地址去构造一个新文件的

方式来解决,参考代码为:BufferedInputStream bis = new BufferedInputStream(new SmbFileInputStream(....));


http://chatgpt.dhexx.cn/article/BecOdioS.shtml

相关文章

rhel7使用cifs进行文件共享和挂载

1、环境说明 服务端:windows server 2012 客户端:redhat7.5 2、服务端window server2012开启目录共享 左下角“开始”,找到“管理工具” 找到“计算机管理”,双击 找到“计算机管理(本地)”-->“共享…

文件共享服务器(CIFS协议)

文章目录 1、共享服务器概述2、创建共享2.1、权限设置 3、访问共享4、创建隐藏的共享5、访问隐藏的共享6、共享相关的命令7、屏蔽系统隐藏共享自动产生8、查看本地网络连接状态9、关闭文件共享服务 实验环境:Win2003当作服务器(IP:192.168.0.…

CIFS

一、CIFS 1.CIFS系统:Internet文件共享系统,也称服务器信;适用于MicrosoftWindows服务器和客户端的标准文件和打印机的共享系统息块(SMB) 2.Samba服务:用于将linux文件系统作为CIFS/SMB网络文件进行共享&am…

cifs网络文件系统

搭建实验环境:创建两台虚拟机,确保两台虚拟机的网络互通,给虚拟机1添加大小为10G的硬盘,在虚拟机2中安装samba-client, 1.samba服务简介 smb Server Message Block(Sum公司研发) cifs …

CIFS文件共享

一.基本概念 CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用…

cifs协议(基于samba服务)

一、基本概念: CIFS是实现文件共享服务的一种文件系统,主要用于实现windows系统中的文件共享,linux系统中用的比较少linux系统中利用CIFS文件系统实现文件共享,需要安装samba服务。它使程序可以访问远程Internet计算机上的文件并要…

hdoj 1570 A C

A C(链接) Problem Description Are you excited when you see the title "AC" ? If the answer is YES , AC it ; You must learn these two combination formulas in the school . If you have forgotten it , see the picture. Now I will…

HDOJ 2005

第几天? Problem Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的…

杭电OJ,已重新开放!HDOJ

前几天我们介绍了网络上有很多可以练习上机考试刷题的网站,叫做OJ(Online Judge)。还提到了一些学校已经公布了复试上机的说明,可以提前练习。 已经有211大学发布计算机专业,研究生复试上机考试说明 在其中我们提到&am…

HDOJ学习笔记(一)

原创文章,版权归www.encalyk.com所有,转载请注明。 第一阶段,做了如下训练。 任务一、了解HDOJ系统(acm.hdu.edu.cn),看完F.A.Q,注册Forum账号,熟悉各栏目代表的意思。 任务二、学会…

HDOJ初体验

HDOJ的使用 1.0 什么是HDOJ HDOJ 是“杭州电子科技大学程序在线评测系统”(Hangzhou Dianzi University Online Judge)的缩写,是一个提供编程题目以及在线测评的网站,其兼容Pascal、C、C、Java、GCC、G等多种语言,并拥…

CTFhub—弱密码(web)

CTFhub—弱密码(web) 进入环境—后台登陆界面 浏览其设置代理,burpsuite开启拦截 拦截成功,右键发送给intruder(测试器) add 添加账号密码两个参数,并更改攻击方式为Cluster bomb(第四种) 给账号,密码这两个参数添加需要使用…

使用burp对Tomcat 弱密码爆破

1、环境搭建 使用 Vulhub 在服务器上搭建: cd /vulhub/tomcat/tomcat8 docker-compose up -d12 访问127.0.0.1:8080,进入到 Tomcat 默认界面: 2、漏洞复现 使用弱密码用户名:tomcat,密码:tomcat 进入到…

使用John the ripper破解弱密码

实验目的: 熟练使用John the ripper 破解弱密码 实验环境: 系统:kali CentOs7 kali用户名:kali 密码:kali CentOs7用户名1:root 密码:123456 实验步骤: 第一步&#xff1…

Nignx的修改弱密码套件

目录 1. 各协议对应的密码套件名称: 2. Nmap &Sslscan查询密码套件 3. Nignx修改弱密码套件 1. MD5、DES和CBC_SHA类型修改 2. 限制很多的特定类型密码套件 4. Windows Server系统的协议修改 1. 各协议对应的密码套件名称: 以下列表给出了相关规…

PostgresSQL弱密码导致命令执行

点击"仙网攻城狮”关注我们哦~ 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 PostgreSQL( 读作 Post-Gres-Q-L)是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。 当该服务配置不当开放到外网时可以被暴力破…

MySQL弱密码和webshell

MySQL弱密码和webshell问题文档 一、了解漏洞 1、mysql是什么 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 关系数据库管理系统(…

通用数据库弱密码检测解决方案

通过加密解密算法检验数据库用户密码是否存在弱密码问题,可适用于主流的数据库产品(Oracle,MySQL,Postgres,SQLServer,达梦8,人大金仓8),解决传统通过碰库方式检测的效率…

使用Hydra破解弱密码

实验目的: 使用kali的Hydra工具破解CtenOs7的密码;. 实验环境: 系统: CentOs7 kali CentOs7用户名1:root 密码:123456 kali用户名:kali 密码&am…

Tomcat 弱密码爆破 漏洞复现

Tomcat 弱密码爆破 漏洞复现 一、漏洞描述二、漏洞影响三、漏洞复现1、环境搭建2、漏洞复现 四、漏洞POC五、参考链接 一、漏洞描述 Tomcat有一个管理后台,其用户名和密码在Tomcat安装目录下的conf\tomcat-users.xml文件中配置,不少管理员为了方便&…