Как я могу шпионить за коммуникацией между процессом и терминалом?

Мне разработало процесс Linux третье лицо, которое связывается с терминалом. Для отладки я хочу видеть, что коммуникация возвращается в дальше.

Можно было бы думать cat добился бы цели (для наблюдения одного направления):

    ./third-party-app &
    cat /dev/tty

... но это не делает. Скорее cat украдет половину данных, предназначенных для приложения, которое в значительной степени бесполезно.

приложение сторонних производителей трудно кодируется для принятия /dev/tty.

Одним путем я нашел для шпионажа за коммуникацией, должен переименовать /dev/tty устройство к, скажем, /dev/real_tty и создайте названный именованный канал /dev/tty в его месте. Затем выполнение:

    cat /dev/real_tty | tee /dev/tty &

... по крайней мере, позволит мне видеть вывод /dev/real_tty, путем копирования данных из /dev/real_tty к именованному каналу /dev/tty и stdout.

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

Что правильный путь состоит в том, чтобы сделать это?

Если чье-либо удивление, устройство TTY является ссылкой RS-232 на микроконтроллер. Информация не является уязвимой или защищена. Все процессы (приложение и шпионы) могут работать как корень.

7
задан jbarlow 4 August 2010 в 22:51
поделиться

6 ответов

Вы можете посмотреть slsnif . Он делает именно то, что вы хотите, или, если вы хотите написать его самостоятельно, доступен исходный код, чтобы увидеть, как это работает.

1
ответ дан 7 December 2019 в 05:15
поделиться

Непростой (по крайней мере, для меня), но механизм, который должен работать для последовательных драйверов tty, - это дисциплина линии .

0
ответ дан 7 December 2019 в 05:15
поделиться

Есть несколько альтернатив:

Сделай сам с GDB: Перенаправление вывода из запущенного процесса

CryoPID позволяет фиксировать состояние запущенного процесса в Linux и сохранять его в файл. Затем этот файл можно использовать для возобновления процесса позже, либо после перезагрузки, либо даже на другом компьютере.

Распределенная многопоточная контрольная точка - это инструмент для прозрачного контрольная точка состояния произвольной группы программ, распространяемых на многих машинах и соединены розетками.

1
ответ дан 7 December 2019 в 05:15
поделиться

Думали ли вы об использовании strace / ltrace ? Вы можете видеть выполняемые системные вызовы, в частности, вы можете видеть выполняемые вызовы write / ioctl и т. Д.

3
ответ дан 7 December 2019 в 05:15
поделиться

Здесь люди уже сделали хорошие предложения, но вот еще одно:

Вы также можете написать общую библиотеку с помощью собственной write () , которая выполняет некоторую работу перед вызовом write () из libc.so . Затем вы можете использовать переменную среды LD_PRELOAD для загрузки вашей библиотеки при запуске процесса.

0
ответ дан 7 December 2019 в 05:15
поделиться

RS-232 ? Просто коснитесь линий RxD / TxD / GND зажимами. Я давно не видел ни одного устройства, которое заботилось бы о DCD, DTR и т. Д.

2
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: