netclientutils_windows.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package ncutils
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "os/exec"
  7. "strconv"
  8. "strings"
  9. "syscall"
  10. "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
  11. )
  12. // RunCmd - runs a local command
  13. func RunCmd(command string, printerr bool) (string, error) {
  14. args := strings.Fields(command)
  15. cmd := exec.Command(args[0], args[1:]...)
  16. cmd.Wait()
  17. //cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}
  18. out, err := cmd.CombinedOutput()
  19. if err != nil && printerr {
  20. log.Println("error running command:", command)
  21. log.Println(strings.TrimSuffix(string(out), "\n"))
  22. }
  23. return string(out), err
  24. }
  25. // RunCmd - runs a local command
  26. func RunCmdFormatted(command string, printerr bool) (string, error) {
  27. var comSpec = os.Getenv("COMSPEC")
  28. if comSpec == "" {
  29. comSpec = os.Getenv("SystemRoot") + "\\System32\\cmd.exe"
  30. }
  31. cmd := exec.Command(comSpec)
  32. cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}
  33. cmd.Wait()
  34. out, err := cmd.CombinedOutput()
  35. if err != nil && printerr {
  36. log.Println("error running command:", command)
  37. log.Println(strings.TrimSuffix(string(out), "\n"))
  38. }
  39. return string(out), err
  40. }
  41. // CreateUserSpaceConf - creates a user space WireGuard conf
  42. func CreateUserSpaceConf(address string, privatekey string, listenPort string, mtu int32, fwmark int32, perskeepalive int32, peers []wgtypes.PeerConfig) (string, error) {
  43. peersString, err := parsePeers(perskeepalive, peers)
  44. var listenPortString string
  45. if mtu <= 0 {
  46. mtu = 1280
  47. }
  48. if listenPort != "" {
  49. listenPortString += "ListenPort = " + listenPort
  50. }
  51. if err != nil {
  52. return "", err
  53. }
  54. config := fmt.Sprintf(`[Interface]
  55. Address = %s
  56. PrivateKey = %s
  57. MTU = %s
  58. %s
  59. %s
  60. `,
  61. address+"/32",
  62. privatekey,
  63. strconv.Itoa(int(mtu)),
  64. listenPortString,
  65. peersString)
  66. return config, nil
  67. }