Всё, понял, о чём речь.
В том самом первом .go
файле, строчка 50:
_program := exec.Command(`./x86_64/goodbyedpi.exe`, `_strategies[i]`)
Кроме использования переменных для пути к файлу, убираем так же апострофы вокруг _strategies[i]
. Теперь i-й элемент _strategies
нормально считывается, но есть один нюанс: в goodbyedpi передаётся одна большая строка в качестве аргумента, а не набор параметров со значениями. Чтобы передать параметры по отдельности, надо самому разбивать строку на составляющие.
Альтернативный метод: создание временного .bat
файла с нужными аргументами и его запуск.
Посмотреть, как передаются аргументы, можно следующим образом.
- Создаём C# приложение (пусть будет
ArgsTest.exe
):
using System;
using System.IO;
class Program
{
static async Task Main(string[] args)
{
string outFile = "Arguments.txt";
string textToFile = "Arguments:\n";
await File.WriteAllTextAsync(outFile, textToFile);
int i = 0;
foreach (string arg in args)
{
textToFile = String.Format("Arg[{0}]: {1}\n", i, arg);
Console.Write(textToFile);
await File.AppendAllTextAsync(outFile, textToFile);
i++;
}
}
}
- В коде
.go
вместо goodbyedpi.exe
используем наше приложение выше и смотрим на результаты.
_program := exec.Command(argsTestFolder + "/" + argsTestExeName, `_strategies[i]`)
Arguments:
Arg[0]: _strategies[i]
_program := exec.Command(argsTestFolder + "/" + argsTestExeName, _strategies[i])
Arguments:
Arg[0]: --reverse-frag --wrong-seq --fake-with-sni www.google.com --frag-by-sni --set-ttl 3 -e 1 -q
- *Работающий workaround из второй версии:*
Arguments:
Arg[0]: --reverse-frag
Arg[1]: --wrong-seq
Arg[2]: --fake-with-sni
Arg[3]: www.google.com
Arg[4]: --frag-by-sni
Arg[5]: --set-ttl
Arg[6]: 3
Arg[7]: -e
Arg[8]: 1
Arg[9]: -q
Я смотрел только первую и вторую версии кода на .go
, но, полагаю, можно также сравнивать и с любой из последующих.