win10下建立了SAMBA共享空间,想通过pysmb连接,总是连接失败

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()
个人不觉的是windows配置问题,其他电脑输入IP,账户及密码,可访问,应该是python pysmb库设置问题,可参考上述问题代码是否有错误

1、密码貌似有问题,到底有没有问题,不行就删掉share用户,重新设置。
2、先自己看看是不是专用和公用网络设置的问题,
3、参考一下链接的内容排查排查一下。
https://os.51cto.com/article/658846.html

img

估计还是你的samba没配置好,我用你的代码,直接就可以用

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_client = SMBClient('root', 'wangnanjie', '172.16.1.24', 445)
    smb_client.connect()
    filenames = smb_client.listPath('wnj-docker', '/')
    print(filenames)

img

samba里的配置

img

https://blog.csdn.net/weixin_42297665/article/details/116818627?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-116818627-ask-7760252.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-116818627-ask-7760252.pc_feed_download_top3ask

问题应该不是这个,pysmb库只要是在管理员cmd运行pip install安装就行了
可能是samba没配置好,应该如下
[wnj - docker]
comment = wnj - docker
path = /home/wangnanjie docker workwritable = yes
browsable = yes
valid users= root

代码编辑错误或位置放错

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_client = SMBClient('root', 'wangnanjie', '172.16.1.24', 445)
smb_client.connect()
filenames = smb_client.listPath('wnj-docker', '/')
print(filenames)