【问题标题】:Recording command line input and output on linux with C用C在linux上记录命令行输入输出
【发布时间】:2011-04-13 19:26:27
【问题描述】:

基本上我想做一个几乎像键盘记录器一样的程序。问题是我作为网络管理员有时我不记得在某些情况下我对机器做了什么,或者同时我为 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 我无法更改目录并且使用“系统我无法正确管理输入和输出。

我也在检查是否有什么可以像插件一样进行 bash 的操作,但没有找到任何信息。

在某些时候,如果我觉得我应该创建另一个 shell(这超出了我目前的能力)或 fork bash sh。但它应该是那么复杂的权利。 我愿意建议从哪里开始。 我对 C 很生疏,所以我又读了很多基本的东西。

使用 xml 文件,后来我想制作一个程序来存储这些数据和/或编辑这些数据,以便我可以创建教程和操作方法。

我可以想出很多方法将其扩展到使用 printscreen,这样所有存储的图像都会转到一个文件,您可以上传到服务器(目前我很高兴存储数据)。它可能是一个有用的工具。

ps。我知道这也可以用来做坏事。

【问题讨论】:

    标签: c unix shell process


    【解决方案1】:

    已经存在script 命令,它将所有输入和输出记录到终端,并将其写入脚本。我建议只使用它,除非您有它不满足的特殊需求。实际上,我见过的最好的script 版本是NetBSD version,所以如果 Linux 版本不能满足您的需求,您可能需要查看它。

    如果您想自己编写,而不是使用system,我建议您使用fork/exec 创建一个shell 进程,将所有输入和输出复制到该进程中。要了解它的工作原理,我建议查看 an existing version of script 的源代码。

    【讨论】:

    • 脚本打开一个伪终端(与 xterm、sshd、telnetd、...相同),然后将其拼接到用户已经与之交互的终端(可能是另一个伪终端),并记录两个终端之间发生的大部分事情。
    • 脚本做了很多事情,很好。它甚至记录空格和退格。我不认为它可以做 xml 的事情,但它很好。它处理实时交易谢谢我认为我的问题已经得到解答
    • 不幸的是,这不是真的。脚本似乎只记录输出。我处于一种情况,我想调试为什么程序输出废话而不是写在上面的内容,所以我需要记录输入和输出。我还没有解决方案。更新:您链接的 NetBSD script 似乎拥有它,谢谢和 +1。
    【解决方案2】:

    大多数 shell 都有一个 script 内置函数,它将简单地从命令行记录输入和输出的文本。不是你要找的东西... 令我惊讶的是,script 不是内置的,这意味着它构建你想要的东西的模型。

    script 命令几乎可以满足您的需求:它只是记录命令行输入和输出的文本。

    如果您使您的提示与众不同(以便您可以可靠地区分 shell 命令和其他所有命令之间的区别),您可以对script 的输出进行后处理以实现您的目标。或者,您可以破解 script 以使其发出您正在寻找的 XML。

    【讨论】:

    • 这似乎是外壳的事情。我将不得不进行更多调查,现在我正在考虑像午夜指挥官这样的黑客程序,以了解他们如何解决这个问题。他们在目录中做类似的事情。
    • 再看一遍脚本做了很多我问的事情
    【解决方案3】:

    您也可以尝试从不同的角度来解决这个问题。不要使用常规的 shell,而是使用 ssh 或 telnet 连接到机器并以这种方式运行您的命令。许多 ssh/telnet 客户端(例如PuTTY)都可以选择在会话期间记录所有控制台输入和输出。您应该能够对该日志进行后处理以生成您需要的任何类型的日志文件。

    根据您的设置,您甚至可能不必使用第二台机器(您应该能够 ssh 进入自己)。

    【讨论】:

    • screen 也可以做日志记录。
    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多