clq
浏览(526) -
2023-05-22 19:19:34 发表
编辑
关键字:
[2023-11-08 18:30:38 最后更新]
golang 的 samba 库 [zt未验证]
1.
libsmb2-go
不知道是否是这个
https://github.com/sahlberg/libsmb2/blob/master/CMakeLists.txt
从源码看是 c 的。
2.
https://github.com/hirochachacha/go-smb2
https://www.jb51.cc/faq/2855206.html
https://cloud.tencent.com/developer/ask/sof/1042911
https://stackoverflow.com/questions/61247492
这个似乎是可用的。
以下是另一个多协议的未验证示例
https://github.com/natanchagas/go-sftp-smb/blob/master/main.go
3.
https://github.com/i11us0ry/goon
goon,集合了fscan和kscan等优秀工具功能的扫描爆破工具。功能包含:ip探活、port扫描、web指纹扫描、title扫描、压缩文件扫描、fofa获取、ms17010、mssql、mysql、postgres、redis、ssh、smb、rdp、telnet、tomcat等爆破以及如netbios探测等功能。
代码可参考一下。
4.
https://github.com/wthorp/GoSMB
据说是服务器,可用度未知。
clq
2023-11-08 18:26:02 发表
编辑
golang samb 库访问 macos 共享目录实测。
确实是可以的。这里的 “未命名” 其实是我共享的整个 macos 硬盘,硬盘名就是 “未命名” 似乎在 macos 中不能修改这个名字。
奇怪的是 `\\127.0.0.1\未命名` 可以在代码中访问,在 macos 自己的文件夹 转到 连接服务器 功能中却是不行。
它自己访问不了 “smb://127.0.0.1/未命名” 这样的路径
--------------------------------------------------------
package main
import (
"fmt"
"net"
iofs "io/fs"
"github.com/hirochachacha/go-smb2"
)
//clq 这实际上是第三个示例 "Glob and WalkDir through FS interface"
func main_smb2() {
//conn, err := net.Dial("tcp", "SERVERNAME:445");
//conn, err := net.Dial("tcp", "192.168.0.1:445");
conn, err := net.Dial("tcp", "127.0.0.1:445");
if err != nil {
panic(err)
}
defer conn.Close()
d := &smb2.Dialer{
Initiator: &smb2.NTLMInitiator{
//User: "USERNAME",
//Password: "PASSWORD",
//User: "administrator",
//Password: "pass1",
User: "ccc",
Password: "pass2",
},
}
s, err := d.Dial(conn)
if err != nil {
panic(err)
}
defer s.Logoff()
//fs, err := s.Mount("SHARENAME");
//fs, err := s.Mount(`\\192.168.0.1\f$`); //确实是可以的
fs, err := s.Mount(`\\127.0.0.1\未命名`); //macos 下的本机可以是这个
//fs, err := s.Mount(`\\127.0.0.1\未命名\Users\ccc\Desktop\test1`); //这个不行s
if err != nil {
panic(err)
}
defer fs.Umount()
//--------------------------------------------------------
//下面似乎会递归,只显示当前目录的文件呢?
sl,err := fs.ReadDir(".");
fmt.Println(sl, err);
for i:=0;i
item := sl[i];
fmt.Println(item.Name());
}//
//--
// f, err := fs.Create("1.txt")
// if err != nil {
// panic(err)
// }
////f, err := fs.Open("1.txt"); //ok
//f, err := fs.Create("Users/ccc/Desktop/test1/1.txt"); //ok
f, err := fs.Open("Users/ccc/Desktop/test1/1.txt"); //ok
if err != nil {
panic(err)
}
//buf := new [1024]byte;
buf := make([]byte, 10240);
n,err := f.Read(buf);
//fmt.Println(n, err, buf);
fmt.Println(n, err, string(buf));
return;
//--------------------------------------------------------
matches, err := iofs.Glob(fs.DirFS("."), "*")
if err != nil {
panic(err)
}
for _, match := range matches {
fmt.Println(match)
}
err = iofs.WalkDir(fs.DirFS("."), ".", func(path string, d iofs.DirEntry, err error) error {
fmt.Println(path, d, err)
return nil
})
if err != nil {
panic(err)
}
}//
clq
2023-11-08 18:30:38 发表
编辑
macos 机器自带的共享文件帮助说明如下。可见路径写法是不一样的。
--------------------------------------------------------
Mac 上的网络地址格式和协议
如果您知道网络上共享电脑或服务器的地址,则可以使用它连接到电脑或服务器。您可以连接到已打开文件共享的 Mac 电脑和 Windows 电脑上,以及连接到使用 SMB/CIF、NFS 和 FTP 的服务器上。
网络地址由协议(如 smb://)加上域名系统 (DNS) 名称及电脑的任何附加路径名称组成。查看下表以获取要用于连接到各种服务器的正确地址格式。
共享协议
地址格式
SMB/CIFS (Windows) 服务器和共享文件夹
使用以下格式之一:
smb://DNSname/sharename
smb://IPaddress/sharename
您也可以使用电脑名称。如果您的地址中不包含共享文件夹路径,您可以在输入用户名称和密码后来选择它。
NFS 服务器
nfs://DNSname/pathname
WebDAV 服务器
http://DNSname/pathname
您可以使用电脑的互联网协议 (IP) 地址来代替它的 DNS 名称。
从“访达”连接到 FTP 服务器之后您仅有只读权限。若要将文件拷贝到 FTP 服务器,请使用 FTP App。
另请参阅
在 Mac 上设置文件共享
将 Mac 连接到共享的电脑和服务器
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.