feat(remote): 自 go-hua/remote 并入远程控制服务管理
- RDP/VNC(TightVNC)/Radmin 服务状态查询与启停重置、VNC 安装/配置读写/密码 加解密、GetRemoteInfo 汇总、CAD/SAS 注册表开关 - 与本库 file/shell/process 同属被控端远程运维能力; 新增依赖 kardianos/service、KarpelesLab/vncpasswd - 附 remote_test.go 与包 README(含平台支持矩阵与权限注意)
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user