Netcat на удаленной машине с использованием SSH

Я пытался запустить netcat с помощью ssh и кажется, что мой код всегда терпит неудачу в моем C-коде. Вот команды, которые я выполняю, используя system () в этом порядке.

system("ssh machine 'nc -l 61001|dd bs=64M of=temp' &")
system("/bin/dd if=filename bs=64M|nc IP_address 61001")

Я заметил, что первая команда работает правильно, так как временный файл создается на удаленной машине. Вторая команда dd дает сбой и утверждает, что на удаленном компьютере было записано 0 байт. Эти команды работают правильно, когда выполняются из терминала, но терпят неудачу, как только я помещаю их в системные вызовы () в C.

0

Решение

Короткий ответ:

& disown (вместо просто &) следует сделать.

Объяснение:

system() порождает оболочку, которая просто выполняет один команда, а затем выходит. & говорит оболочке преобразовать команду в фоновый режим (значит, она не ждет ее завершения), но она все еще является частью сеанса и группы процессов оболочки. Когда лидер группы (снаряд) выходит, все дети убиты. disown заставляет оболочку запускать новую группу процессов, теперь дочерний процесс находящийся в собственности от init (первый процесс в системе).

«Реальный» ответ:

Это о программировании. Вы создаете процессы, похожие на сумасшедшие, чтобы выполнить то, что может легко сделать программа на C, используя вызовы встроенной библиотеки (за исключением ssh но есть и лучшие способы тоже). Иди читай дальше BSD розетки.

2

Другие решения


По вопросам рекламы [email protected]