Как мне написать сценарий для Linux TTY?

В образовательных целях (не для того, чтобы кто-то заботился о мотивах такого упражнения), я хотел бы написать программу, которая может читать / писать в / из альтернативных ttys/ptys. Я читал статьи (с 1990-х), но не могу использовать реализацию, которую они используют в современном Linux / glibc

Я надеялся, что кто-то исследовал это в прошлом (не слишком далеко в прошлом), или, по крайней мере, прочитал относящуюся к нему документацию, которую они могли бы предоставить, которая могла бы просветить меня дальше.

Мне также интересно, если (учитывая тот факт, что в Linux нет потоков), нужно ли выполнять это упражнение через загружаемый модуль ядра [lkm].

У меня много вопросов и, возможно, неправильное понимание некоторых фундаментальных идеологий, которые позволяют ставить такие цели, может кто-то помочь?:)

3 ответа

linspy.c код в этой статье Phrack является модулем ядра 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.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

Кажется, работает довольно хорошо, если вы не возражаете разобраться в куче разрывов строк. Что касается TTYs.. tail -f /dev/vcsa1-6

Джессика

Я ssh'd в удаленную Linux-коробку дважды, производя /dev/pts/0 и /dev/pts/1. С 0 я могу открыть 1 для чтения, тем самым украдя все, что пользователь вводит, в 1. Если я хочу, чтобы они увидели, как он печатает, я должен записать его обратно в /dev/pts/1. Конечно, их ввод никогда не попадает в их оболочку, поэтому я должен создать процесс оболочки на моем конце (на 0) и направить их ввод, а затем направить оболочку обратно в 1.

Это все прекрасно работает для меня. Пока все это происходит, я могу сохранить все данные, прочитанные и записанные в процессе, где угодно.

Конечно, вы не можете сделать это, если вы не являетесь пользователем root или не отслеживаете сеанс, который у вас есть, но вы хотели этого только в образовательных целях, верно?

Другие вопросы по тегам