懒得说啥了,直接上干货
你需要修改连接ip地址,如果有用户名密码填进去,如果端口不是445改了
依赖 pip3 install pysmb pyasn1 需要先安装了
我只是遍历目录,排序显示,要上传下载文件的方法自己去百度一大堆
如果有可能以后考虑做成个客户端界面。。。pyqt5 + pyinstaller
生成单个可执行文件 exe 使用 pyinstaller -F xx.py (需要安装 pip3 install pyinstaller)
# -*- coding: utf-8 -*-
# 依赖安装
# pip3 install pysmb pyasn1
# 特殊提醒目录或文件名不要用smb、smb.py,否则会和引用包冲突
import traceback
from smb.SMBConnection import SMBConnection
from smb.base import SharedDevice
# 全部共享文件夹目录,缓存用
shared_dirs = []
# 遍历
def walk_path(dir,path):
dirs = []
files = []
print ('Walking path:', path)
for p in conn.listPath(dir, path):
# 排除.和..
if p.filename!='.' and p.filename!='..':
parentPath = path
if not parentPath.endswith('/'):
parentPath += '/'
if p.isDirectory:
# print('{}{}'.format(path,p.filename))
# dirs.append('{}{}'.format(path,p.filename))
dirs.append(p.filename)
# 递归,如果单层显示,可以不用!!!
walk_path(dir,parentPath+p.filename)
else:
# print('{}'.format(p.filename))
files.append(p.filename)
else:
# print("特殊目录:",p.filename)
pass
#排序文件夹和文件
dirs.sort()
files.sort()
print('----[文件夹]----')
for dir in dirs:
print(dir)
print('----[文件]----')
for file in files:
print(file)
if __name__ == "__main__":
# ip或域名
host = '192.168.1.2'
username = ""
password = ""
try:
# with方式,使用后自动close连接
with SMBConnection(username, password, "", "", use_ntlm_v2=True) as conn:
result = conn.connect(host, 445) # smb协议默认端口445
if result:
print("登录成功")
shares = conn.listShares()
for share in shares:
# 只记录共享文件夹
if share.type==SharedDevice.DISK_TREE:
shared_dirs.append({'name':share.name,'comments':share.comments})
# print(share.name)
# print(share.comments)
# 其他共享 如打印机 IPC$ 等
else:
# print(share.name)
# print(share.comments )
pass
# 有共享文件夹时候才遍历
if len(shared_dirs)>0:
print("共享文件夹:")
for dir in shared_dirs:
print(dir)
shared_folder = dir['name']
# 调用遍历方法
walk_path(dir['name'],'/')
else:
print("没有发现共享文件夹")
else:
print("登录失败")
except Exception as e:
print("连接异常:")
traceback.print_exc()
print(e)
输出dict格式目录结构
# -*- coding: utf-8 -*-
# 依赖安装
# pip3 install pysmb pyasn1
import traceback
from smb.SMBConnection import SMBConnection
from smb.base import SharedDevice
# 全部共享文件夹目录
shared_dirs = []
# 遍历
def walk_path(dir,path,path_info):
print ('Walking path:', path)
for p in conn.listPath(dir, path):
# 排除.和..
if p.filename!='.' and p.filename!='..':
parentPath = path
if not parentPath.endswith('/'):
parentPath += '/'
if p.isDirectory:
# print('{}{}'.format(path,p.filename))
path_info_ = {
'path':p.filename,
'dirs':[],
'files':[]
}
path_info['dirs'].append(path_info_)
# 递归,如果单层显示,可以不用!!!
walk_path(dir,parentPath+p.filename,path_info_)
else:
# print('{}'.format(p.filename))
path_info['files'].append(p.filename)
else:
# print("特殊目录:",p.filename)
pass
if __name__ == "__main__":
# ip或域名
host = "127.0.0.1"
# smb协议默认端口445
port = 445
username = ""
password = ""
try:
# with方式,使用后自动close连接
with SMBConnection(username, password, "", "", use_ntlm_v2=True) as conn:
result = conn.connect(host, port)
if result:
print("登录成功")
shares = conn.listShares()
for share in shares:
# 跳过打印机
if share.type==SharedDevice.DISK_TREE and share.name != 'print$':
shared_dirs.append({'name':share.name,'comments':share.comments})
# 其他共享 如打印机 IPC$ 等
else:
pass
if len(shared_dirs)>0:
print("共享文件夹:")
for dir in shared_dirs:
path_file = {
'path':"",
'dirs':[],
'files':[]}
print(dir)
shared_folder = dir['name']
walk_path(dir['name'],'/',path_file)
# 输出文件目录结构
print(path_file)
else:
print("没有发现共享文件夹")
else:
print("登录失败")
except Exception as e:
print("连接异常:")
traceback.print_exc()
print(e)