Я пытаюсь отобразить содержимое каталога на общем ресурсе от Linux до Windows, используя Go. Пока мне удалось создать / удалить новые файлы внутри общего ресурса с полными разрешениями на чтение / запись.
Go модуль: https://godoc.org/github.com/hirochachacha/go-smb2#Client
Функции:
func connect_client(host string, share string, session map[string]string) *smb2.Client {
//Checks for a connection on port
conn, err := net.Dial("tcp", host+":445")
if err != nil {
panic(err)
}
//smb auth
d := &smb2.Dialer{
Initiator: &smb2.NTLMInitiator{
User: session["Username"],
Password: session["Password"],
Domain: session["Domain"],
},
}
//Returns a client session
client, err := d.Dial(conn)
if err != nil {
fmt.Println("Connection failed")
client.Logoff()
} else {
fmt.Println("Connection Succeeded")
}
return client
}
func check_write(host string, client *smb2.Client) {
file := "asdasdas.txt"
fs, err := client.Mount(host)
if err != nil {
fmt.Println(err)
os.Exit(0)
}
defer fs.Umount()
share := strings.Split(host, `\\`)
f, err := fs.Create(file)
if err != nil {
fmt.Println("You do not have write permissions on directory:%s ! \n", strings.Split(share[1], `\`)[1])
os.Exit(0)
}
defer fs.Remove(file)
defer f.Close()
fmt.Printf("You have write permissions to directory: %s \n", strings.Split(share[1], `\`)[1]))
}
func list_all(client *smb2.Client, host string) {
fs, err := client.Mount(host)
if err != nil {
fmt.Println(err)
os.Exit(0)
}
defer fs.Umount()
_, err = fs.Open(`Test.txt`)
if err != nil {
fmt.Println(err)
os.Exit(0)
}
}
func main() {
host, share, action, session := get_flags()
client := connect_client(host, share, session)
full_host := `\\` + host + `\` + share
//File create
if action == "check_write" {
check_write(full_host, client)
}
if action == "list_files" {
list_all(client, full_host)
}
}
В функции list_all () все работает, но когда я пытаюсь получить доступ \\ 192.168.1.19 \ Sharing only .. Когда я ввожу только хост с именем каталога, он может не отображаться путь к каталогу, потому что он не может найти указанный объект. Я не могу понять, как я могу использовать указатель для * RemoteFile, чтобы использовать функции:
f.Readdir ()
f.Name () et c ... .
До сих пор мне удавалось использовать * RemoteFileSystem только для всех других действий, но я хочу перечислить все содержимое каталога ..
Справка будет принята с благодарностью!
Редактировать: Если это не было достаточно ясно, чтобы использовать такие функции, как: f.Readdir () f.Name () Мне нужно получить указатель на * RemoteFile, это моя основная проблема