| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Фильтр драйвер возможен? |
| Автор: kuzulis 27.8.2011, 17:36 |
| Доброго времени суток. У меня в мыслях есть идея создать кроссплатформенное GUI приложение для сниффинга/мониторинга траффика от последовательных портов. Для Windows всё более менее ясно: пишем фильтр-драйвер, загружаем его и пользуемся его плюшками (яркий пример такого приложения - Free Serial Port Monitor). Но проблема возникла с Linux: как тут быть? Посмотрел сорцы программки slsnif (http://sourceforge.net/projects/slsnif/ ) - там юзаются пайпы и/или /pty . Но это немного не то, тем более, что эта утилита как-то не корректно работала: 1. Она работает только на прием данных в порт 2. Она тупо открывает порт, читает из него данные и выводит в консоль, при этом, тому приложению, которому реально необходимы эти данные - их просто не получает, т.к. slsnif их уже прочитал. ЗЫ: Если не прав - поправьте. Так вот, возможно ли и в Linux написать что-то похожее на Filter driver как в Windoews? Или может, есть альтернативные варианты? |
| Автор: Void 27.8.2011, 17:54 |
| slsnif, interceptty и подобные программы открывают новое устройство псведотерминала, на использование которого предполагается переконфигурировать приложения, за которыми нужно следить. Это возможно в большинстве случаев и, конечно, проще, чем писать модуль ядра. |
| Автор: kuzulis 27.8.2011, 19:21 |
| Т.е. Приложение должно вместо порта открывать пайп или pty? так может оказаться что такого выбора в нем может не быть. Но а примеры ж фильтр драйверов должны быть в сети? А то я не нашел. Имхо драйвер было бы лучше и универсальнее. |
| Автор: bsa 29.8.2011, 14:41 |
Для Linux такого понятия вообще нет. Нет. Не лучше и не универсальнее - версии ядра меняются часто, и драйверы от одной, могут к другой не подходить. Обычно, для подобных утилит используют http://www.tcpdump.org/pcap.html. Она уже кроссплатформенная. |
| Автор: kuzulis 29.8.2011, 21:16 | ||||
Ну а иначе то никак. Т.к. к примеру, нужно перехватывать не только траффик ввода/вывода, но, к примеру и моменты конфигурирования устройства. Также, если брать "стандартный" вариант, который к примеру, используют slsnif, interceptty, то там мы открываем порт с уже известными параметрами. А что, если приложение, которое нам нужно "ломануть" втихпря как-то использует порт с какими то параметрами и которые изменяет в режиме своей работы - в этом случае, мы не сможем ничего сделать. Ведь так? Или я не прав?
Но ведь она только для перехвата сетевого траффика tcp/ip. Есть ли еще решения? |
| Автор: bsa 31.8.2011, 17:31 |
| черт. заработался я. Почему-то подумал, что речь идет о сокетах. Скорее всего, действительно придется писать модуль ядра, который будет перехватывать управление портом от штатного драйвера. Как вариант, можно просто переименовать устройство порта, а на его место пихнуть созданные упомянутыми прогами pty. Правда, во втором случае, придется много делать из-под рута каждый раз при необходимости сниффинга. |
| Автор: bsa 1.9.2011, 10:18 |
| Думаю, стандартная книга о написании драйверов для Linux тебе подойдет. Думаю, твой драйвер должен найти объекты описания устройств и подменить в них коллбэки на свои. А при выгрузке, соответственно, восстанавливать обратно. |