我将如何去写一个Linux的TTY嗅探器?

为了教育的目的(不是任何人都应该关心这样的练习背后的动机),我想写一个程序,可以读/写/从备用ttys / ptys。 我读过(从20世纪90年代)的文章,但不能使用他们在现代Linux / glibc上使用的实现

我希望过去有人研究过这个(不太远),或者至less是阅读有关的文档,他们可以提供,这会进一步启发我。

我还想知道,如果这个练习必须通过一个可加载的内核模块[lkm]来完成(考虑到Linux没有stream的事实)。

我有很多问题,可能是一些基本的意识形态的误解,使这样的目标能够落实到位,有人可以帮忙吗? 🙂

Phrack文章中的linspy.c代码是一个Linux内核模块。 它不会针对现代内核进行编译,因为内部内核接口会频繁更改。

然而,它使用的基本方法是健全的(尽管在SMP环境中它完全没有锁定所需的正确性),并且通过使用足够的手肘润滑脂,您应该能够将其移植到最新的内核上进行编译。

 function spy() { ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \ | grep -Poi 'write(...\"[[:print:]]{1,2}\"[.][.][.][,]..)' ; } 

 [436] klikevil@epiphany ~ $ w 09:36:43 up 12:06, 6 users, load average: 0.46, 0.29, 0.20 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT klikevil pts/0 75.125.126.8 23:05 2:19m 10:33 0.18s cmd klikevil pts/1 75.125.126.8 00:18 6:50m 0.06s 0.04s sshd: klikevil [priv] klikevil tty7 :0 09:02 17:07m 2:02 0.32s x-session-manager klikevil pts/2 :0.0 09:03 3:30 0.08s 0.08s bash klikevil pts/3 :0.0 09:03 0.00s 0.76s 0.00sw klikevil pts/4 :0.0 09:06 3:13 0.46s 0.00s /bin/sh /usr/bin/thunder [437] klikevil@epiphany ~ $ spy 2 write(2, "e"..., 1) write(2, "c"..., 1) write(2, "h"..., 1) write(2, "o"..., 1) write(2, " "..., 1) write(2, "s"..., 1) write(2, "u"..., 1) write(2, "p"..., 1) write(2, " "..., 1) write(2, "d"..., 1) write(2, "o"..., 1) write(2, "g"..., 1) write(2, "\n"..., 1) ^C 

似乎工作得很好,如果你不介意通过一堆换行符排序。 至于tail -f /dev/vcsa1-6

杰西卡

我ssh进入一个远程Linux框两次,产生/ dev / pts / 0和/ dev / pts / 1。 从0开始,我可以打开1进行读取,从而窃取用户键入的所有内容。如果我想让他们看到他们的输入,我必须将其写回到/ dev / pts / 1。 当然,他们的输入永远不会到达他们的shell,所以我必须在我的末尾创建一个shell进程(0),并将其输入到管道中,然后将管道返回到1。

这一切对我很好。 当所有这些都在进行时,我可以在任何我喜欢的过程中保存所有读取和写入的数据。

当然,除非你是根,否则你不能这样做,或者你正在窥探你拥有的一个会话,但是你只是想为了教育的目的,对吧?