繁体   English   中英

使用C在Linux上记录命令行输入和输出

[英]Recording command line input and output on linux with C

基本上我想做一个像键盘记录器一样的程序。 问题是,作为网络管理员,有时我不记得在某些情况下对计算机所做的操作,或者同一时间我编写了Linux的howto和教程。 我想记录一下我做了什么。 因此,该程序的基本思想是:键入程序的名称(此刻我称其为rat)

$ 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");做一些测试fp_in = popen( input, "w"); system ,但首先使用popen不能更改目录,而使用“ system则无法正确管理输入和输出。

我还在检查是否可以做一些像插件一样的bash操作,但没有找到任何信息。

在某些时候,如果感觉不错,我应该创建另一个shell(这超出了我的当前能力)或fork bash sh。 但这应该是那么复杂的权利。 我愿意建议从哪里开始。 我对C感到生疏,因此我再次阅读了许多基本知识。

有了xml文件,后来我正在考虑制作一个程序来存储此数据和/或编辑此数据,以便我可以创建教程和方法。

我可以想到许多将其扩展到使用printscreen的方法,因此所有存储的图像都将保存到一个文件,您可以将该文件上传到服务器(此刻我很高兴存储数据)。 它可能是一个有用的工具。

PS。 我确实知道这也可以用于邪恶的事情。

script命令已经存在,它将所有输入和输出记录到终端中,并将其写入笔录中。 我建议仅使用它,除非您有不能满足的特殊需求。 实际上,我见过的最好的script版本是NetBSD版本 ,因此如果Linux版本不能满足您的需求,您可能要研究一下。

如果您想自己编写它,而不是使用system ,我建议您使用fork / exec创建一个单独的shell进程,将所有输入和输出都复制到其中。 为了了解其工作原理,建议查看现有script版本的源代码。

大多数外壳程序都有内置的script ,该script将仅在命令行内外记录文本。 不完全是您要寻找的东西...令我惊讶的是, script不是内置的,这意味着它构建所需内容的模型。

script命令几乎可以完成您想做的事情:它只记录命令行中输入和输出的文本。

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

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

根据您的设置,您甚至可能不必使用第二台计算机(您应该可以自己使用ssh)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM