Skip to content

Commit 3a3f6ae

Browse files
committed
sample for winrmntlm also
1 parent a46854f commit 3a3f6ae

File tree

5 files changed

+141
-54
lines changed

5 files changed

+141
-54
lines changed

bobwinrm.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
winrm "github.com/CalypsoSys/bobwinrm"
8+
)
9+
10+
func test_bobwinrm() {
11+
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
12+
// use to fails with ==> func() winrm.Transporter { return &winrm.ClientNTLM{} },
13+
// now works with ==> winrm.NewEncryption("ntlm")
14+
//
15+
// using https/5986
16+
runExec_bobwinrm("AllowUnencrypted_false_address", 5986, true, "username", "password")
17+
18+
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
19+
// should wortk with both
20+
//
21+
// using http/5985
22+
runExec_bobwinrm("AllowUnencrypted_true_address", 5985, false, "username", "password") // works
23+
}
24+
25+
func runExec_bobwinrm(address string, port int, https bool, userName string, password string) {
26+
endpoint := winrm.NewEndpoint(address, port, https, true, nil, nil, nil, 0)
27+
28+
params := winrm.DefaultParameters
29+
enc, _ := winrm.NewEncryption("ntlm")
30+
params.TransportDecorator = func() winrm.Transporter { return enc }
31+
32+
client, err := winrm.NewClientWithParameters(endpoint, userName, password, params)
33+
if err != nil {
34+
fmt.Println(err)
35+
}
36+
37+
stdOut, stdErr, exitCode, err := client.RunCmdWithContext(context.Background(), "ipconfig /all")
38+
fmt.Printf("%d\n%v\n%s\n%s\n", exitCode, err, stdOut, stdErr)
39+
if err != nil || (len(stdOut) == 0 && len(stdErr) > 0) {
40+
_ = exitCode
41+
fmt.Println(err)
42+
} else {
43+
fmt.Println("Command Test Ok")
44+
}
45+
46+
wmiQuery := `select * from Win32_ComputerSystem`
47+
psCommand := fmt.Sprintf(`$FormatEnumerationLimit=-1; Get-WmiObject -Query "%s" | Out-String -Width 4096`, wmiQuery)
48+
stdOut, stdErr, exitCode, err = client.RunPSWithContext(context.Background(), psCommand)
49+
fmt.Printf("%d\n%v\n%s\n%s\n", exitCode, err, stdOut, stdErr)
50+
if err != nil || (len(stdOut) == 0 && len(stdErr) > 0) {
51+
_ = exitCode
52+
fmt.Println(err)
53+
} else {
54+
fmt.Println("PowerShell Test Ok")
55+
}
56+
}

bobwinrmntlm.go

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,9 @@
11
package main
22

3-
import (
4-
"context"
5-
"fmt"
6-
7-
winrm "github.com/CalypsoSys/bobwinrm"
8-
)
9-
103
func main() {
11-
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
12-
// use to fails with ==> func() winrm.Transporter { return &winrm.ClientNTLM{} },
13-
// now works with ==> winrm.NewEncryption("ntlm")
14-
//
15-
// using https/5986
16-
runExec("AllowUnencrypted_false_address", 5986, true, "username", "password")
17-
18-
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
19-
// should wortk with both
20-
//
21-
// using http/5985
22-
runExec("AllowUnencrypted_true_address", 5985, false, "username", "password") // works
23-
}
24-
25-
func runExec(address string, port int, https bool, userName string, password string) {
26-
endpoint := winrm.NewEndpoint(address, port, https, true, nil, nil, nil, 0)
27-
28-
params := winrm.DefaultParameters
29-
enc, _ := winrm.NewEncryption("ntlm")
30-
params.TransportDecorator = func() winrm.Transporter { return enc }
31-
32-
client, err := winrm.NewClientWithParameters(endpoint, userName, password, params)
33-
if err != nil {
34-
fmt.Println(err)
35-
}
36-
37-
stdOut, stdErr, exitCode, err := client.RunCmdWithContext(context.Background(), "ipconfig /all")
38-
fmt.Printf("%d\n%v\n%s\n%s\n", exitCode, err, stdOut, stdErr)
39-
if err != nil || (len(stdOut) == 0 && len(stdErr) > 0) {
40-
_ = exitCode
41-
fmt.Println(err)
42-
} else {
43-
fmt.Println("Command Test Ok")
44-
}
4+
// test using "github.com/CalypsoSys/bobwinrm"
5+
test_bobwinrm()
456

46-
wmiQuery := `select * from Win32_ComputerSystem`
47-
psCommand := fmt.Sprintf(`$FormatEnumerationLimit=-1; Get-WmiObject -Query "%s" | Out-String -Width 4096`, wmiQuery)
48-
stdOut, stdErr, exitCode, err = client.RunPSWithContext(context.Background(), psCommand)
49-
fmt.Printf("%d\n%v\n%s\n%s\n", exitCode, err, stdOut, stdErr)
50-
if err != nil || (len(stdOut) == 0 && len(stdErr) > 0) {
51-
_ = exitCode
52-
fmt.Println(err)
53-
} else {
54-
fmt.Println("PowerShell Test Ok")
55-
}
7+
// test using "github.com/CalypsoSys/winrmntl and github.com/masterzen/winrm"
8+
test_winrmntlm()
569
}

go.mod

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ module main
22

33
go 1.18
44

5-
require github.com/CalypsoSys/bobwinrm v0.0.0-20231110185607-50e74da09f87
5+
require (
6+
github.com/CalypsoSys/bobwinrm v0.0.0-20231110185607-50e74da09f87
7+
github.com/CalypsoSys/winrmntlm v0.0.0-00010101000000-000000000000
8+
github.com/masterzen/winrm v0.0.0-20230926183142-a7fbe840deba
9+
)
610

711
require (
812
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
@@ -25,5 +29,3 @@ require (
2529
golang.org/x/net v0.10.0 // indirect
2630
golang.org/x/text v0.14.0 // indirect
2731
)
28-
29-
replace github.com/CalypsoSys/bobwinrm v0.0.0-20231110185607-50e74da09f87 => ../bobwinrm

go.sum

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
1212
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1313
github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
1414
github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
15+
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
1516
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
1617
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
1718
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
@@ -34,9 +35,14 @@ github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aW
3435
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
3536
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
3637
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
38+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
39+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
3740
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
41+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
3842
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 h1:2ZKn+w/BJeL43sCxI2jhPLRv73oVVOjEKZjKkflyqxg=
3943
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc=
44+
github.com/masterzen/winrm v0.0.0-20230926183142-a7fbe840deba h1:fUItF0MWsuwOs7w4HnJJmz9fV+8jAJT6MNlxFeikUNM=
45+
github.com/masterzen/winrm v0.0.0-20230926183142-a7fbe840deba/go.mod h1:Iju3u6NzoTAvjuhsGCZc+7fReNnr/Bd6DsWj3WTokIU=
4046
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4147
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
4248
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -47,19 +53,31 @@ github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde h1:AMNpJRc7P+GTw
4753
github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde/go.mod h1:MvrEmduDUz4ST5pGZ7CABCnOU5f3ZiOAZzT6b1A6nX8=
4854
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
4955
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
56+
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
5057
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
5158
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
5259
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
5360
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
61+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
62+
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
5463
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
5564
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
5665
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
5766
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
67+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
68+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
69+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
70+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
5871
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
72+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
73+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
5974
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
6075
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
76+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
77+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
6178
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
6279
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
80+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
6381
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
6482
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
6583
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

winrmntlm.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
8+
"github.com/CalypsoSys/winrmntlm"
9+
"github.com/masterzen/winrm"
10+
)
11+
12+
func test_winrmntlm() {
13+
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
14+
// use to fails with ==> func() winrm.Transporter { return &winrm.ClientNTLM{} },
15+
// now works with ==> winrm.NewEncryption("ntlm")
16+
//
17+
// using https/5986
18+
runExec_winrmntlm("AllowUnencrypted_false_address", 5986, true, "username", "password")
19+
20+
// winrm set winrm/config/service '@{AllowUnencrypted="true"}'
21+
// should wortk with both
22+
//
23+
// using http/5985
24+
runExec_winrmntlm("AllowUnencrypted_true_address", 5985, false, "username", "password") // works
25+
}
26+
27+
func runExec_winrmntlm(address string, port int, https bool, userName string, password string) {
28+
endpoint := winrm.NewEndpoint(address, port, https, true, nil, nil, nil, 0)
29+
30+
params := winrm.DefaultParameters
31+
enc, _ := winrmntlm.NewEncryption("ntlm", userName, password, endpoint)
32+
params.TransportDecorator = func() winrm.Transporter { return enc }
33+
34+
client, err := winrm.NewClientWithParameters(endpoint, userName, password, params)
35+
if err != nil {
36+
fmt.Println(err)
37+
}
38+
39+
exitCode, err := client.RunWithContext(context.Background(), "ipconfig /all", os.Stdout, os.Stderr)
40+
fmt.Printf("%d\n%v\nn", exitCode, err)
41+
if err != nil {
42+
_ = exitCode
43+
fmt.Println(err)
44+
} else {
45+
fmt.Println("Command Test Ok")
46+
}
47+
48+
wmiQuery := `select * from Win32_ComputerSystem`
49+
psCommand := fmt.Sprintf(`$FormatEnumerationLimit=-1; Get-WmiObject -Query "%s" | Out-String -Width 4096`, wmiQuery)
50+
stdOut, stdErr, exitCode, err := client.RunPSWithContextWithString(context.Background(), psCommand, "")
51+
fmt.Printf("%d\n%v\n%s\n%s\n", exitCode, err, stdOut, stdErr)
52+
if err != nil || (len(stdOut) == 0 && len(stdErr) > 0) {
53+
_ = exitCode
54+
fmt.Println(err)
55+
} else {
56+
fmt.Println("PowerShell Test Ok")
57+
}
58+
}

0 commit comments

Comments
 (0)