检查python3中是否存在samba目录

问题描述 投票:1回答:2

我有一个samba目录smb://172.16.0.10/public_pictures/,我想知道它是否可访问。

尝试类似以下内容:

import urllib

if open("smb://172.16.0.10/public_pictures/"):
    print("accessible")
else:
    print("no accessible")

但显然这对我不起作用

python python-3.x samba smb pysmb
2个回答
0
投票

使用pysmb(docs):

from smb.SMBConnection import SMBConnection

remote_address = "172.16.0.10"
share_name = "public_pictures"

conn = SMBConnection(username, password, name, remote_name)
conn.connect(remote_address)

accessible = share_name in conn.listShares()

0
投票

处理samba的一种方法是使用pysmb。如果是这样,那么它会像下面这样:

# we need to provide localhost name to samba
hostname = socket.gethostname()
local_host = (hostname.split('.')[0] if hostname 
              else "SMB{:d}".format(os.getpid()))

# make a connection
cn = SMBConnection(
    <username>, <password>, local_host, <netbios_server_name>,
    domain=<domain>, use_ntlm_v2=<use_ntlm_v2>, 
    is_direct_tcp=<self.is_direct_tcp>)

# connect
if not cn.connect(<remote_host>, <remote_port>):
    raise IOError

# working connection ... to check if a directory exists, ask for its attrs
attrs = cn.getAttributes(<shared_folder_name>, <path>, timeout=30)

一些说明:

  • 在上面的例子中,public_picturesshared folder,而path将只是/
  • 您需要知道您是否在端口139445(或自定义端口)上使用SMB。如果是后者你通常想要通过is_direct_tcp=True(虽然有些服务器仍然会在445上提供NetBIOS samba)
  • 如果您不希望使用用户名或密码,那么您可能希望以username="guest"连接空密码。
© www.soinside.com 2019 - 2024. All rights reserved.