go - 使用 smb2 在 golang 中打开 Micrsoft DFS 共享
问题描述
我在 Windows Server 2012 上有一个 dfs 共享。我可以在 Windows 文件资源管理器中打开共享并从另一个系统读取文件,路径如下:\\dfsserver\usernamepace\Tom\go.png。但是,使用 https://github.com/hirochachacha/go-smb2 的 golang 的 smb2 包时出现错误
响应错误:联系的服务器不支持 DFS 命名空间的指定部分
但是,如果我尝试使用它的实际共享路径\\dfsserver\public share\Tom\go.png打开文件,则代码可以正常工作。所以问题是我不知道运行时的实际路径,我希望能够使用 DFS 提供的路径打开文件。
会不会是 DFS 不能与 smb2 一起正常工作?或其他一些问题。提前感谢您的评论。
func main(){
// actualPath := `\\dfsserver\public share\Tom\go.png`
// dfsPath := `\\dfsserver\usernamespace\Tom\go.png`
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%s", "dfsserver", "445"))
if err != nil {
fmt.Println(err)
}
defer conn.Close()
dial := &smb2.Dialer{
Initiator: &smb2.NTLMInitiator{
User: "user",
Password: "password",
Domain: "dfsserver",
},
}
session, err := dial.Dial(conn)
if err != nil {
fmt.Println(err)
}
defer session.Logoff()
mountPoint, err := session.Mount("usernamespace")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// error occures here, if the mountPoint was "public share" instead of "usernamespace" then no error
remoteFile, err := mountPoint.Open(`Tom\go.png`)
defer remoteFile.Close()
if err != nil {
fmt.Println(err)
}
}
解决方案
推荐阅读
- c# - 这个依赖注入 (DI) 服务在注册为瞬态时如何维护数据?
- python - 如何避免 div 在使用 Python/Selenium 抓取动态生成的网站时清空自己?
- flutter - Visual Studio Code Flutter 无法更新 Dart SDK
- html - 当页面在文档片段处重新加载时,Bootstrap 5 Scrollspy 设置了不正确的活动部分
- google-sheets - 添加基于年份的动态下拉列表以更改 Google 表格查询的结果
- c# - 多少内存使用字节枚举,这是否优化了 C# 中的内存/速度?
- python - 使用 Python 将 pdf 数据转换为 JSON 格式?
- javascript - 使用 Axios 和 Pipe Function 执行 POST 方法
- python - 试图找出为什么相同的输出但不同的结果
- android - Android Kotlin:如何从 recyclerview 中成功删除项目、调用 notifyItemRangeChanged() 和动画