Я пытаюсь получить файл через Netcat с сервера на базе Linux (Raspberry Pi).
На стороне отправителя (Raspberry Pi) я запускаю небольшой скрипт Python, который просто упаковывает некоторые файлы и отправляет их в конвейер. Это прекрасно работает и было протестировано много раз.
На стороне получателя (Windows 8.1 Pro) я использую Netcat для преобразования входящего потока в файл. Если я делаю это вручную в cmd.exe, все отлично работает:
nc -l -p <port> > C:\file.gz
Мой файл прибывает, как и планировалось. Однако, когда я пытаюсь автоматизировать этот процесс на стороне получателя с помощью скрипта C# (.Net 4.5), файл просто не приходит. Мой код выглядит так:
public void StartListeningToNetcat()
{
Process ncProcess = new Process();
ncProcess.StartInfo.UseShellExecute = false;
ncProcess.StartInfo.CreateNoWindow = false;
ncProcess.StartInfo.RedirectStandardOutput = true;
ncProcess.StartInfo.RedirectStandardInput = true;
ncProcess.StartInfo.FileName = "cmd.exe";
ncProcess.StartInfo.Arguments = @"C:\...\nc -l -p <port> > C:\file.gz";
ncProcess.Start();
}
Я знаю, что запуск nc через cmd.exe — это обходной путь, но прямой вызов netcat выглядит так:
ncProcess.StartInfo.FileName = "C:\...\nc.exe";
ncProcess.StartInfo.Arguments = @"-l -p <port> > C:\file.gz";
... возвращает ошибку: «>: прямой поиск хоста не удалось: h_errno 11001: HOST_NOT_FOUND». В любом случае, я был бы не против проигнорировать эту ошибку и пойти на «неэлегантный» способ вызова cmd.exe.
Предполагая, что Windows может быть мерой безопасности, чтобы запретить приложениям записывать входящие файлы на мой жесткий диск, я попытался отключить брандмауэр и использовать:
ncProcess.StartInfo.Verb = "runas";
без успеха. Может ли кто-нибудь указать мне в правильном направлении?