SMB共享服务python脚本操作文件上传下载
Published in:2023-12-29 |
Words: 1.1k | Reading time: 4min | reading:

简介

NAS(Network Attached Storage:网络附属存储),连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。
NAS设备一般支持多计算机平台,用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合Unix/Windows NT局域网内。
NAS本身能够支持多种协议(如 NFS、 CIFS、 FTP、 HTTP等),而且能够支持各种操作系统。通过任何一台工作站,采用 IE或 Netscape浏览器就可以对NAS设备进行直观方便的管理。
SMB是一个协议名,全称是Server Message Block(服务器消息快协议),用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居由它实现。端口445

  • windows

    文件共享是指主动地在网络上共享自己的计算机文件。一般文件共享使用P2P模式,文件本身存在用户本人的个人电脑上。大多数参加文件共享的人也同时下载其他用户提供的共享文件。有时这两个行动是连在一起的。在很早期的windows中(windows2000以下),文件共享服务是利用TCP的139端口实现的,服务名是SMB。后来,微软又把SMB改名为CIFS协议,并且使用的是TCP的445端口

py第三方库

  • pysmb包下载
    1
    2
    3
    pip install pysmb
    # 或
    pip3 install pysmb

共享文件挂载

1
net use k:  \\10.96.10.59\c$ 
  • 常用命令
    1
    2
    3
    4
    net share ipc$    /delete               关闭ipc默认共享
    •net share admin$ /delete 关闭admin账户目录共享
    •net share c$ /delete 关闭c盘默认共享
    •net share d$ /delete 关闭d盘默认共享

案例

smb服务配置

1
2
3
4
5
6
7
from smb.SMBConnection import SMBConnection
host="xxx.xxx.xxx.xxx" #ip或域名,改成你自己的
username="xxxxxx" #用户名,改成你自己的
password="xxxxxx" #密码,改成你自己的
conn=SMBConnection(username,password,"","",use_ntlm_v2 = True)
result = conn.connect(host, 445) #smb协议默认端口445
print("登录成功")

smb服务连接与文件上传下载

  • 上传
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    localFile=open("本地文件路径","rb")
    #rb代表read+binary模式,即“读二进制文件”
    #打开本地文件,注意如果是二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。
    #示例:localFile=open("/Users/devnn/Desktop/test.zip","rb")

    conn.storeFile("共享文件夹名称","存放路径",localFile)
    #“共享文件夹名称”是一个文件夹,即你使用smb共享的那个文件夹。“存放路径”是相对共享文件夹下的文件。
    #上传文件到smb服务器,默认超时30秒,可以添加参数修改:timeout=xx。
    #示例:conn.storeFile("test","test1/test2/test3.zip",localFile)

    localFile.close()
    #关闭
    print("上传成功")
  • 下载
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    localFile=open("下载后的文件路径","wb") 
    #创建本地文件,注意是下载二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。
    #示例:localFile=open("/Users/devnn/Desktop/test.zip","wb")

    conn.retrieveFile("共享文件夹名称","文件所在路径",localFile)
    #从smb服务器下载文件到本地,默认超时30秒,可以修改:timeout=xx。“文件所在路径”是相对共享文件夹的路径,不需要加"/".
    #示例:conn.retrieveFile("test","test1/test2/test3.zip",localFile)

    localFile.close()
    #关闭
    print("下载成功")

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
host = "2.2.2.2"  # ip或域名,改成你自己的
username = "root" # 用户名,改成你自己的
password = "123134" # 密码,改成你自己的
my_name = "" # 这个随便,可以为空字符串
remote_name = "" # 这个是共享主机的主机名,listShares会用到,不用listShares的话可以为空字符串

@logger.catch
def download_file_smb_server(tad4_mf4_path):
"""

:param tad4_mf4_path:
:return:
"""
# path_list = []
# comment_list = []
# file_name_list = []
root_path = r"C:\Users\Administrator\Desktop\t\demo\test\mdf"
# for share in conn.listShares():
# logger.info(share.name)
(file_path, file_name) = os.path.split(tad4_mf4_path)
if os.path.exists(root_path + "\\" + file_name):
logger.warning("file exists , skip download file")
return root_path + "\\" + file_name
else:
conn = SMBConnection(username, password, my_name, remote_name, is_direct_tcp=True)
result = conn.connect(host, 445) # smb协议默认端口445
logger.success("login ntfs smb server success !", result)
logger.info(" download file .")
with open(root_path + "\\" + file_name, 'wb') as fw:
conn.retrieveFile("shared", tad4_mf4_path, fw)
return root_path + "\\" + file_name
Prev:
Python多脚本的集成化管理(微服务,Nginx)
Next:
基于CLion IDE的CPP项目构建与运行