Запись ввода и вывода командной строки на Linux с C - PullRequest
2 голосов
/ 17 сентября 2010

В основном я хочу сделать программу почти как кейлоггер. Дело в том, что я как сетевой администратор иногда не помню, что я делал с машиной в определенном случае, или в то же время я делаю инструкции и руководства для Linux. Я хочу записать, что я сделал. В общем, идея этой программы: Вы вводите название программы, (на данный момент я называю это крысиной)

$ rat
Welcome everything from now on will be recorded
recording $ ls
file1 file2 file3
recording $ quit
Bye bye

Все, что вы делаете, будет отправлено в XML-файл. Как то так

<?xml version='1.0' encoding='UTF-8' ?>
<rat>
 <command>
   <input>ls</input>
   <output>file1 file2 file3</output>
   <err><err>
 </command>
</rat>

Я делаю несколько тестов с fp_in = popen( input, "w"); и system, но сначала с помощью popen я не могу изменить каталоги, а с помощью "system я не могу правильно управлять вводом и выводом.

Я также проверял, могу ли я что-то сделать, чтобы подключиться как плагин, но не нашел никакой информации.

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

С файлом xml позже я подумал о создании программы для хранения этих данных и / или редактирования этих данных, чтобы я мог создавать учебные материалы и инструкции.

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

пс. Я знаю, что это может быть использовано и для злых дел.

Ответы [ 3 ]

6 голосов
/ 17 сентября 2010

Уже существует команда script, которая записывает весь ввод и вывод в терминал, записывая его в стенограмму.Я бы порекомендовал просто использовать это, если у вас нет особых потребностей, которые не отвечают.На самом деле, самой хорошей версией script, которую я видел, была версия NetBSD , так что вы можете посмотреть на это, если версия Linux не удовлетворяет вашим потребностям.* Если вы хотите написать его самостоятельно, вместо использования system, я бы порекомендовал вам использовать fork / exec для создания одного процесса оболочки, которыйВы копируете весь ввод и вывод в.Чтобы понять, как это работает, я бы порекомендовал взглянуть на исходный код существующей версии script.

1 голос
/ 17 сентября 2010

Большинство оболочек имеют встроенный script, который просто записывает текст в командной строке и из нее. Не совсем то, что вы ищете ... К моему удивлению script не является встроенным, что означает, что это модель для построения того, что вы хотите.

Команда script делает почти то, что вам нужно: она просто записывает текст в командной строке и из нее.

Если вы сделаете ваш запрос отличительным (чтобы вы могли достоверно определить разницу между командами оболочки и всем остальным), вы можете пост-обработать вывод script для достижения ваших целей. Также вы можете взломать script, чтобы заставить его испускать искомый XML.

0 голосов
/ 17 сентября 2010

Вы также можете попробовать подойти к этому под другим углом.Вместо использования обычной оболочки подключайтесь к машине с помощью ssh или telnet и выполняйте свои команды таким образом.Многие клиенты ssh / telnet (например, PuTTY ) имеют возможность регистрировать весь ввод и вывод консоли во время сеанса.Вы должны быть в состоянии постобработать этот журнал, чтобы сгенерировать любой тип файла журнала, который вам нужен.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...