2023-11-15 03:44:41 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2023-11-15 04:26:47 +00:00
|
|
|
"encoding/json"
|
2023-11-15 03:44:41 +00:00
|
|
|
"fmt"
|
2023-11-15 04:26:47 +00:00
|
|
|
"golang.org/x/sys/windows"
|
2023-11-15 03:44:41 +00:00
|
|
|
"os"
|
2023-11-15 04:26:47 +00:00
|
|
|
"os/exec"
|
2023-11-15 03:44:41 +00:00
|
|
|
|
|
|
|
"github.com/r3labs/sse/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
println("Hello, World!")
|
|
|
|
|
2023-11-15 04:26:47 +00:00
|
|
|
deviceId := os.Getenv("DEVICE_ID")
|
|
|
|
if deviceId == "" {
|
2023-11-15 03:44:41 +00:00
|
|
|
println("DEVICE_ID env is not set")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
for {
|
2023-11-15 04:26:47 +00:00
|
|
|
fmt.Println("开始连接。")
|
|
|
|
client := sse.NewClient("https://ivampiresp.com/wp-content/rCMD/sse.php?device=" + deviceId)
|
2023-11-15 03:44:41 +00:00
|
|
|
|
2023-11-15 04:26:47 +00:00
|
|
|
err := client.Subscribe("message", func(msg *sse.Event) {
|
|
|
|
//fmt.Println(msg.Data)
|
2023-11-15 03:44:41 +00:00
|
|
|
|
2023-11-15 04:26:47 +00:00
|
|
|
// byte to json
|
|
|
|
var data map[string]interface{}
|
|
|
|
err := json.Unmarshal(msg.Data, &data)
|
|
|
|
|
|
|
|
//fmt.Println(data)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd := data["cmd"]
|
|
|
|
param := data["param"]
|
|
|
|
|
|
|
|
if cmd == nil {
|
|
|
|
fmt.Println("cmd or params is nil")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// interface to string
|
|
|
|
cmdStr := fmt.Sprintf("%v", cmd)
|
|
|
|
paramStr := fmt.Sprintf("%v", param)
|
|
|
|
|
|
|
|
fmt.Println(cmdStr)
|
|
|
|
fmt.Println(paramStr)
|
|
|
|
|
|
|
|
fmt.Println("参数是: " + paramStr)
|
|
|
|
|
|
|
|
// 获取当前用户目录
|
|
|
|
home, err := os.UserHomeDir()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// 切换到用户目录
|
|
|
|
err = os.Chdir(home)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// 快捷命令,比如 lock
|
|
|
|
canExec := quickCommand(cmdStr)
|
|
|
|
if canExec {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println("命令: " + cmdStr + " " + paramStr)
|
|
|
|
cmdExec := exec.Command(cmdStr, paramStr)
|
|
|
|
err = cmdExec.Run()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
fmt.Println(cmdExec.Output())
|
|
|
|
//fmt.Println(cmdExec.Stdout)
|
|
|
|
//fmt.Println(cmdExec.Stderr)
|
|
|
|
//fmt.Println(cmdExec.ProcessState)
|
|
|
|
fmt.Println("执行完成。")
|
2023-11-15 03:44:41 +00:00
|
|
|
|
|
|
|
})
|
2023-11-15 04:26:47 +00:00
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
// 下个循环重新连接
|
|
|
|
continue
|
|
|
|
}
|
2023-11-15 03:44:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2023-11-15 04:26:47 +00:00
|
|
|
|
|
|
|
func lockWorkStation() error {
|
|
|
|
user32 := windows.NewLazySystemDLL("user32.dll")
|
|
|
|
lockWorkStation := user32.NewProc("LockWorkStation")
|
|
|
|
|
|
|
|
ret, _, err := lockWorkStation.Call()
|
|
|
|
if ret == 0 {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func quickCommand(command string) bool {
|
|
|
|
if command == "lock" {
|
|
|
|
err := lockWorkStation()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|