Невозможность выполнить определенную команду оболочки в GolangPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможность выполнить определенную команду оболочки в Golang

Сообщение Anonymous »

Я пытаюсь выполнить программу с именем «Commix» в Golang и получить выходные данные. Однако инструменты завершают работу с кодом состояния 0 после анализа моего файла HTTP-запроса. Никаких индикаторов неудачи нет. Я не открывал проблему на странице Commix на GitHub, потому что, похоже, это не проблема самого инструмента.
Я пытаюсь выполнить следующую команду: commix -r req.txt --ignore-stdin --batch
Выполнение с моего терминала Linux дает правильные результаты, файл запроса анализируется, и инструмент инициирует тестирование команды инъекции.
Инструмент также работает должным образом при запуске из Python (v3.12.3):

Код: Выделить всё

import subprocess
cmd = "commix -r req.txt --ignore-stdin --batch"
returned_value = subprocess.call(cmd, shell=True)
print(returned_value)
Однако при использовании Golang (v1.22.2) инструмент сообщает «[info] Анализ HTTP-запроса...», а затем завершает работу с кодом состояния 0. Имейте в виду, что Commix — это единственный инструмент, который ведет себя так, другие инструменты, которые я использую, работают нормально.
Функция, которую я использую для выполнения команд оболочки в Golang:

Код: Выделить всё

func OsExec(command, wd string) (output string) {
var (
stdout, stderr string
outbuf, errbuf bytes.Buffer
exitCode       int
)

cmd := exec.Command("/bin/sh", "-c", command)
cmd.Dir = wd
cmd.Env = os.Environ()

cmd.Stdout = &outbuf
cmd.Stderr = &errbuf

err := cmd.Run()

stdout = outbuf.String()
stderr = errbuf.String()

if err != nil {
log.Printf("Error executing command: %v", err)
exitCode = getErrorExitCode(err)
} else {
exitCode = cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
}

if stderr == "" && exitCode != 0 {
stderr += err.Error()
}

output = strings.Join([]string{stdout, stderr, "Exit Status: " + strconv.Itoa(exitCode)}, "\n")
output = strings.TrimPrefix(output, "\n")
output = strings.TrimSuffix(output, "\n")

return output
}

func getErrorExitCode(err error) int {
if exitError, ok := err.(*exec.ExitError); ok {
ws := exitError.Sys().(syscall.WaitStatus)
return ws.ExitStatus()
}
return 1
}
Если я удалю аргумент --ignore-stdin и изменю stdout и stderr, чтобы они указывали на os.Stdout и os.Stderr, и добавлю cmd.Stdin = os.Stdin тогда инструменты ведут себя нормально.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-golang
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»