Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我将如何着手编写Linux TTY嗅探器?_C_Linux_Sniffing_Tty - Fatal编程技术网

C 我将如何着手编写Linux TTY嗅探器?

C 我将如何着手编写Linux TTY嗅探器?,c,linux,sniffing,tty,C,Linux,Sniffing,Tty,出于教育目的(并不是说任何人都应该关心这种练习背后的动机),我想编写一个可以读/写交替TTY/PTY的程序。我读过(20世纪90年代的)书,但无法使用他们在现代Linux/glibc上使用的实现 我希望有人在过去对此进行过研究(过去不太远),或者至少阅读了他们可以提供的相关文档,这将进一步启发我 我还想知道(考虑到Linux没有流的事实)这个练习是否必须通过可加载的内核模块[lkm]来完成 我有很多问题,可能是对实现这些目标的一些基本意识形态的误解,有人能帮忙吗?:) 我两次通过ssh进入远程l

出于教育目的(并不是说任何人都应该关心这种练习背后的动机),我想编写一个可以读/写交替TTY/PTY的程序。我读过(20世纪90年代的)书,但无法使用他们在现代Linux/glibc上使用的实现

我希望有人在过去对此进行过研究(过去不太远),或者至少阅读了他们可以提供的相关文档,这将进一步启发我

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


我有很多问题,可能是对实现这些目标的一些基本意识形态的误解,有人能帮忙吗?:)

我两次通过ssh进入远程linux系统,生成/dev/pts/0和/dev/pts/1。从0开始,我可以打开1进行读取,从而窃取用户输入到1的所有内容。如果我想让他们看到键入的内容,我必须将其写回/dev/pts/1。当然,他们的输入永远不会进入shell,所以我必须在我的一端(0上)创建一个shell进程,并通过管道将他们的输入传递给它,然后通过管道将shell传递回1

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


当然,除非您是root用户或正在监听您自己的会话,否则无法执行此操作,但您只希望此操作用于教育目的,对吗?

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}\"[.][.][.][,]..)' ;
}

如果你不介意在一堆换行符中进行排序的话,看起来效果不错。至于TTY<代码>尾部-f/dev/vcsa1-6


Jessica

看到这一点:@SjB疏远是正确的,这是一个不同的问题-在这个问题上,OP试图使用低级套接字(称为原始套接字,因为缺少应用层)嗅探网络流量。在这里,OP试图从一个字符设备中读取。我认为如果我想这样做,那么我可以对回答我问题的人粗鲁,这并不重要。不管怎样,你的回答对我没有帮助,谢谢。用cat和两个伪TTY(guake)简单地尝试了一下:这个方法似乎不可靠,因为存在竞争条件:有时cat获取输入,但有时是“原始”过程。@caf然后我会重新阅读它,并尝试重新实现它。谢谢。A试图修复你的格式(bbcode或html标记在这里不起作用),如果不需要,请投诉,我将还原编辑。没问题,我提交的变量上的反勾号也没有进入;应该是:ptsnum=`ps awfux | grep pt[s]\/“$1”| awk'/bas[h]/{print$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.00s w
    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