我有一个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")
但显然它对我不起作用
答案 0 :(得分: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()
答案 1 :(得分: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_pictures
是shared folder
,而path
就是/
,您需要知道是否在端口139
或445
(或自定义端口)上使用SMB。如果是后者,通常会希望传递is_direct_tcp=True
(尽管某些服务器仍会在445
上提供NetBIOS samba服务)
如果您期望不需要用户名或密码,则可能期望以username="guest"
的身份使用空密码进行连接。