[ Agent ] [ Executor ] - 增加windows executor部分的代码

This commit is contained in:
zeaslity
2023-08-14 17:36:17 +08:00
parent 497677d727
commit 9197031e81
5 changed files with 78 additions and 4 deletions

View File

@@ -97,7 +97,7 @@ func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) []strin
// exec the command here
for _, singleLineCommand := range multiLineCommand {
singleCommandResult := AllOutputCommandExecutor(singleLineCommand)
singleCommandResult, _ := AllOutputCommandExecutor(singleLineCommand)
result = append(result, "")
result = append(result, singleCommandResult...)

View File

@@ -76,9 +76,18 @@ func Execute(em *ExecutionMessage) ([]string, error) {
func PipeLineCommandExecutor(pipeLineCommand [][]string) ([]string, error) {
var resultSlice []string
var output []byte
var err error
tmp := make([]string, len(pipeLineCommand))
for index, pipe := range pipeLineCommand {
tmp[index] = strings.Join(pipe, " ")
}
pipelineCommandString := strings.Join(tmp, " | ")
resultSlice = append(resultSlice, fmt.Sprintf(" ========= 命令为 ====> %s", pipelineCommandString))
for _, pipeCommand := range pipeLineCommand {
if len(pipeCommand) == 0 {
continue
@@ -89,14 +98,19 @@ func PipeLineCommandExecutor(pipeLineCommand [][]string) ([]string, error) {
command.Stdin = bytes.NewBuffer(output)
}
output, err = command.Output()
output, err = command.CombinedOutput()
if err != nil {
log.ErrorF("Pipeline Command Exec Error => %v", err.Error())
break
// 收集错误的信息
resultSlice = append(resultSlice, "↓↓↓ 命令 错误 如下 ↓↓↓", string(output))
return resultSlice, err
}
}
return []string{string(output)}, err
// 正常的输出
resultSlice = append(resultSlice, "↓↓↓ 命令 输出 如下 ↓↓↓", string(output))
return resultSlice, err
}
func MultiLineCommandExecutor(multiLineCommandExecutor [][]string) ([]string, error) {

View File

@@ -0,0 +1,49 @@
package executor
import (
"fmt"
"os/exec"
"strings"
"syscall"
"unsafe"
)
var (
user32DLL = syscall.NewLazyDLL("user32.dll")
messageBox = user32DLL.NewProc("MessageBoxW")
)
func FindPublicIpAddress() {
cmd := exec.Command("curl", "ifconfig.io")
output, err := cmd.Output()
if err != nil {
fmt.Println("无法获取公网IP地址", err)
return
}
ip := strings.TrimSpace(string(output))
fmt.Println("公网IP地址:", ip)
}
func CallAgent() {
var (
hWnd uintptr
text = "Hello, World!"
caption = "Golang Win32API"
flags = uint(0x00000001) // MB_OK
)
ret, _, err := messageBox.Call(
hWnd,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))),
uintptr(flags),
)
if ret == 0 {
fmt.Println("MessageBox failed:", err)
return
}
fmt.Println("MessageBox returned:", ret)
}

View File

@@ -0,0 +1,8 @@
package executor
import "testing"
func TestCallAgent(t *testing.T) {
FindPublicIpAddress()
}