- RDP/VNC(TightVNC)/Radmin 服务状态查询与启停重置、VNC 安装/配置读写/密码 加解密、GetRemoteInfo 汇总、CAD/SAS 注册表开关 - 与本库 file/shell/process 同属被控端远程运维能力; 新增依赖 kardianos/service、KarpelesLab/vncpasswd - 附 remote_test.go 与包 README(含平台支持矩阵与权限注意)
192 lines
3.8 KiB
Go
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
|
|
}
|