Files
remote-core/remote/remote.go
T
4566704 9c2a57b576 feat(remote): 自 go-hua/remote 并入远程控制服务管理
- RDP/VNC(TightVNC)/Radmin 服务状态查询与启停重置、VNC 安装/配置读写/密码
  加解密、GetRemoteInfo 汇总、CAD/SAS 注册表开关
- 与本库 file/shell/process 同属被控端远程运维能力; 新增依赖
  kardianos/service、KarpelesLab/vncpasswd
- 附 remote_test.go 与包 README(含平台支持矩阵与权限注意)
2026-09-20 12:39:30 +08:00

192 lines
3.8 KiB
Go

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
}