package remote import ( "fmt" "github.com/kardianos/service" "net" ) // Info 远程控制信息汇总(主机、IP、MAC 与 RDP/VNC 状态端口) type Info struct { Hostname string `json:"hostname"` IpAddr []string `json:"ipAddr"` MacAddr []string `json:"macAddr"` RdpState int `json:"rdpState"` RdpPort int `json:"rdpPort"` VncState int `json:"vncState"` VncPort int `json:"vncPort"` VncPassword string `json:"vncPassword"` } // GetRadminServiceStatus 获取服务状态 0.无效 1.运行 2.停止 func GetRadminServiceStatus() (int, error) { svcConfig := &service.Config{ Name: "RServer3", } s, err := service.New(nil, svcConfig) if err != nil { return 0, err } var status service.Status status, err = s.Status() if err != nil { return 0, err } return int(status), nil } // GetVncServiceStatus 获取服务状态 0.无效 1.运行 2.停止 func GetVncServiceStatus() (service.Status, error) { svcConfig := &service.Config{ Name: "tvnserver", } s, err := service.New(nil, svcConfig) if err != nil { return 0, err } var status service.Status status, err = s.Status() if err != nil { return 0, err } return status, nil } // GetRdpServiceStatus 获取服务状态 0.无效 1.运行 2.停止 func GetRdpServiceStatus() (service.Status, error) { svcConfig := &service.Config{ Name: "TermService", } s, err := service.New(nil, svcConfig) if err != nil { return 0, err } var status service.Status status, err = s.Status() if err != nil { return 0, err } return status, nil } // getMacAddrs 获取本机所有非空 MAC 地址 func getMacAddrs() (macAddrs []string) { netInterfaces, err := net.Interfaces() if err != nil { fmt.Printf("fail to get net interfaces: %v", err) return macAddrs } for _, netInterface := range netInterfaces { macAddr := netInterface.HardwareAddr.String() if len(macAddr) == 0 { continue } macAddrs = append(macAddrs, macAddr) } return macAddrs } // getIPs 获取本机所有 IPv4 地址(不含回环) func getIPs() (ips []string) { interfaceAddr, err := net.InterfaceAddrs() if err != nil { fmt.Printf("fail to get net interface addrs: %v", err) return ips } for _, address := range interfaceAddr { ipNet, isValidIpNet := address.(*net.IPNet) if isValidIpNet && !ipNet.IP.IsLoopback() { if ipNet.IP.To4() != nil { ips = append(ips, ipNet.IP.String()) } } } return ips } // GetServiceStatus 获取服务状态 0.无效 1.运行 2.停止 func GetServiceStatus(name string) (int, error) { svcConfig := &service.Config{ Name: name, } s, err := service.New(nil, svcConfig) if err != nil { return 0, err } var status service.Status status, err = s.Status() if err != nil { return 0, err } return int(status), nil } // ServiceStart 启动服务 func ServiceStart(name string) error { svcConfig := &service.Config{ Name: name, } s, err := service.New(nil, svcConfig) if err != nil { return err } err = s.Start() if err != nil { return err } return nil } // ServiceStop 停止服务 func ServiceStop(name string) (i error) { svcConfig := &service.Config{ Name: name, } s, err := service.New(nil, svcConfig) if err != nil { return err } err = s.Stop() if err != nil { return err } return nil } // GetServiceReset 重启服务 func GetServiceReset(name string) (int, error) { svcConfig := &service.Config{ Name: name, } s, err := service.New(nil, svcConfig) if err != nil { return 0, err } var status service.Status status, err = s.Status() if err != nil { return 0, err } return int(status), nil } // RunVncService 启动 TightVNC 服务 func RunVncService() error { svcConfig := &service.Config{ Name: "tvnserver", } s, err := service.New(nil, svcConfig) if err != nil { return err } err = s.Start() if err != nil { return err } return nil }