win10下建立了SAMBA共享空间,想通过pysmb连接,总是连接失败(windows防火墙已关闭),无法找到原因,求解
问题相关代码,请勿粘贴截图
运行结果及报错内容
import io
import os
import smbclient
from smb.SMBConnection import *
from smb.SMBConnection import SMBConnection
class SMBClient(object):
status = False
samba = None
def __init__(self, user_name, passwd, ip, port=445):
self.user_name = user_name
self.passwd = passwd
self.ip = ip
self.port = port
def connect(self):
try:
self.samba = SMBConnection(self.user_name, self.passwd, '', '', use_ntlm_v2=True)
self.samba.connect(self.ip, self.port)
self.status = self.samba.auth_result
print("连接成功")
except:
self.samba.close()
print("连接失败")
def disconnect(self):
if self.status:
self.samba.close()
def download(self, filenames, local_dir, service_name, smb_dir=''):
"""
下载文件
:param filenames: 文件路径(列表)
:param local_dir: 本地目录
:param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
:param smb_dir: samba服务目录下的文件目录,如果目录下文件路径和filenames完全一致则保留默认值即可
:return:
"""
if type(filenames) is not list:
filenames = [filenames]
for filename in filenames:
with open(os.path.join(local_dir, filename), 'w') as f:
self.samba.retrieveFile(service_name, os.path.join(smb_dir, filename), f)
def upload(self, filenames, local_dir, service_name, smb_dir=''):
"""
下载文件
:param filenames: 文件路径(列表)
:param local_dir: 本地目录
:param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
:param smb_dir: samba服务目录下的文件目录,如果目录下文件路径和filenames完全一致则保留默认值即可
"""
if type(filenames) is not list:
filenames = [filenames]
for filename in filenames:
with open(os.path.join(local_dir, filename), 'r') as f:
self.samba.storeFile(service_name, os.path.join(smb_dir, filename), f)
def createDir(self, service_name, path):
"""
创建文件夹
:param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
:param path: 目录路径
"""
try:
self.samba.createDirectory(service_name, path)
except OperationFailure:
pass
def listPath(self, service_name, path):
"""
列举目录下的文件和目录
:param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
:param path: 目录路径
:return: path目录下的文件和目录
"""
filenames = []
for shareFile in self.samba.listPath(service_name, path):
filename = shareFile.filename
if filename == '.' or filename == '..':
continue # 过滤下
filenames.append(shareFile.filename)
return filenames
主程序.
if name == 'main':
"""
smb = smbclient.SambaClient(server='10.2.48.119', share='yuhy1_samba', username='MECH', password=r'shafushu892721') #密码貌似有问题
smb.listdir("/")
print(smb.path)
"""
local_dir = 'D:/test/'
smb_client = SMBClient('HOME_PC', '1234567890', '192.168.1.102', 445)
smb_client.connect()