Python3如何通过SMB协议匿名访问远程服务器共享文件?
Python3 访问匿名SMB共享的简便实现方法
嗨,我之前也碰到过类似的困扰,找了一圈终于发现Python3里其实有不少成熟的方案,完全能实现像Java那样简洁的操作!下面给你推荐两个最实用的库:
1. 使用 smbclient(最贴近你要的简便性)
这个库的设计思路和Python原生的文件操作API高度相似,支持直接通过SMB路径访问资源,在匿名访问的场景下甚至不需要额外配置认证信息,省心又高效。
首先安装库:
pip install smbclient
核心代码示例,完全能满足你获取共享文件操作权限的需求:
import smbclient # 直接通过SMB路径访问共享目录,匿名访问无需额外认证 # 列出共享目录下的所有条目 for item in smbclient.scandir('smb://ftpsrv/public/'): print(f"名称: {item.name}, 是否为文件: {item.is_file()}") # 读取共享内的文件内容 with smbclient.open_file('smb://ftpsrv/public/example.txt', 'r') as f: print(f.read())
这个库会自动处理匿名连接的逻辑,你只需要传入正确的SMB路径就行,便捷性和Java里那行代码几乎一致。
2. 使用 pysmb(功能更全面的老牌SMB库)
pysmb是一个成熟的SMB协议实现库,现在已经完全适配Python3,适合需要对SMB连接进行精细控制的场景。
安装库:
pip install pysmb
匿名访问的代码示例:
from smb.SMBConnection import SMBConnection # 匿名连接:用户名和密码留空,本地机器名可以随便填一个标识 conn = SMBConnection('', '', 'my_local_pc', 'ftpsrv', use_ntlm_v2=True) # 连接服务器,端口通常是139或445,根据服务器配置选择 conn.connect('ftpsrv', 139) # 列出共享目录下的文件 file_list = conn.listPath('public', '/') for file in file_list: print(file.filename) # 记得用完后关闭连接 conn.close()
总结
如果追求最简便的实现,优先选smbclient,它的API更贴近Python原生的文件操作习惯,代码量少;如果需要对SMB连接进行更多自定义设置(比如超时、加密等),pysmb会是更好的选择。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

