当前位置:  技术问答>linux和unix

有什么办法截取终端屏幕上的信息

    来源: 互联网  发布时间:2015-04-20

    本文导语:  有什么办法截取终端屏幕上的信息 字符终端,sco openserver 5.05环境下! | 这要涉及到内核编成,可以截取TTY的输出队列就可以了.大致的思路如下: 1,替换TTY的线路规程 2.把截获的数据同过伪设...

有什么办法截取终端屏幕上的信息
字符终端,sco openserver 5.05环境下!

|
这要涉及到内核编成,可以截取TTY的输出队列就可以了.大致的思路如下:
1,替换TTY的线路规程
2.把截获的数据同过伪设备传到你的程序中.
3.我写的一个文章是讲怎么截获TTY的键盘输入的,原理是一样的,你去看看.
   UNIX TTYMONITOR的分析与实现
在UNIX环境中,经常需要对终端输入进行监控,即用户究竟输入了些什么?为了获得用户输入结果,本人通过对SCO的OSR5(金融系统主要的前台网点平台)的内核进行深入的分析,通过修改替换UNIX的线路规程的方法做成TTYMONITOR软件包,现在把大致实现的思路介绍一下,在阐述“TTYMONITOR”的技术细节之前,有必要介绍UNIX的工作机制。这里主要涉及到两部分知识:UNIX下的终端和线路规程。

一.UNIX的终端及其设备驱动程序
UNIX下的终端有三种类型:实终端,虚终端(TELNET等网络登陆),控制台终端他们分别有不同的设备驱动程序,因此如果通过修改设备驱动程序的方法来实现本文的目的的话,工作量至少是三倍。我们通过分析,无论是什么类型的终端,尽管他们的设备驱动程序各不相同,每一个硬(虚)设备接口都由特定的设备驱动程序支持。
1.设备驱动程序:
通常,设备驱动程序可以分为三个部分:(A)自动配置和初始化子程序,(B)服务于I/O请求的子程序(上半部分),(C)中断服务子程序(下半部分)。
2.对于实终端与控制台终端有实际的硬件设备驱动程序,虚终端是一个伪设备驱动程序,为了描述方便,我们都称之为硬件设备驱动程序,对应与(C)。另外一个概念是逻辑驱动程序(在这里的实例是TTY),对应与(B)。通常而言硬件设备驱动程序与逻辑设备驱动程序的接口一般是没有被标准化的,但是对于终端是个例外。UNIX中采用了线路规程的概念。一般的设备驱动程序的上下两部分是这样工作的:在输出是,上部分调用下部分的例程,在输入时,下部分调用山部分的例程,由于引入了线路规程,TTY设备驱动程序的上下两部分不在直接调用,而是上部分调用线路规程的上部分例程,下部分调用线路规程的下部分的例程。
二.线路规程
线路规程是用来在异步串口上(或者这种接口的软件仿真上)提供语义的处理模块,由过程接口linesw[](线路开关)结构来描述。线路规程的例程在UINX里是怎么被调用的呢?OSR5核心共有七组例程(可以扩充),他们通过在/etc/conf/pack.d/kernel/space.c中初始的linesw表来调用的,该表中每一项代表一个线路规程,有八个函数表项。大多数终端都缺省的使用来自于UNIX V7/UNIX 32V中提出的规程,在OSR5中也即使0号规程,对应与linesw表的第0项。(当然也可以是其他规程,只不过在这里只描述0号规程,其他的规程的修改基本原理是一样的)
如果整个替换线路规程的第0组的单项或全部实例(即linesw数组的实际值),显然会带来潜在的问题,因此我们只是把l_read的实际涵数ttread替换成ettread,在ettread结束时,再调用ttread:
var_type var_table;/*自己定义的内核变量,用于保存从tty结构中获得的键入字符队列的指针*/
    int ettread(tty *tp)
    { 
int i;
myfun();       /*自己加入的变量和代码*/
   i=ttread(tp);
return(i);
    }
三.自定义的全局内核变量向用户进程的传递:
自己在程序中定义的变量如何向监控进程传递呢?原打算通过使用进程间通讯机制来实现,但是由于我们的增加程序是在核心中运行,所以调用系统调用能否正常工作不知道,而且会不会带来潜在的副作用更是不清楚,因此我决定放弃这种方法的尝试,而改用增加伪设备的方法,通过伪设备在监控进程和自编内核代码之间传递变量,即在监控进程中用通常的open(),read()系统调用来读取这些变量的值。
四.监控进程
五.数据结构的介绍
1.Linesw: 该结构的定义可参见/usr/include/sys/conf.h
2.Tty   : 该结构的定义可参见/usr/include/sys/tty
六.实现编程(略)
版权所有


|
一点建议
dup2( fileno(stdout), myfd);

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我做了个俄罗斯方块游戏,不过屏幕闪动很大,有什么办法解决??谢谢
  • 为什么我的redhat的屏幕老是无法和windows的对齐啊,有什么办法可以解决吗
  • window.onload事件覆盖掉body onload事件(window.onload和html body onload事件冲突)解决办法
  • 为什么我的redhat的屏幕老是无法和windows的对齐啊,有什么办法可以解决吗 iis7站长之家
  • 安装hadoop时出现内存不够及其它一些常见的hadoop错误解决办法
  • VMware装了ubuntu时,没有设置root的密码,现在没有办法打开root账户,网上的很多办法都试了。
  • linux/centos安装nginx常见错误及解决办法
  • 请问用rm 命令删掉的目录(含文件)有什么办法恢复?
  • 有什么办法让KDE注销时选择注销、重启还是关机?
  • 救命.PHP没有办法调用MYSQL!!!!
  • 虚拟机-虚拟光驱的搭配,有安装LINUX成功的办法么?
  • 根目录满了,有什么办法可以扩容?
  • 访问Access数据库,除了JDBD-ODBC桥,是否还有别的办法?
  • Sql Server忘记密码的解决办法
  • 在VAJ中有办法改变核心的JAVA包吗?
  • 就没别的办法了?---关于applet,swing,IE
  • 有什么办法能把复制到硬盘再装吗?
  • 有没有办法在JSP中刷新页面?请高手指点。
  • 显示器(AXION)不支持LINUX图形界面,有没有解决办法
  • 请问,有什么办法可以把html文件生成pdf/excel格式的文件
  • 有没有办法当按下机箱上的电源按钮后让linux正常关机?
  • 我想要redhat9。0里面的图标,不知道大侠们有没有办法?
  • 请问:我的F盘没有办法转化成NTFS格式


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3