![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Доброго времени суток.
У меня в мыслях есть идея создать кроссплатформенное GUI приложение для сниффинга/мониторинга траффика от последовательных портов. Для Windows всё более менее ясно: пишем фильтр-драйвер, загружаем его и пользуемся его плюшками (яркий пример такого приложения - Free Serial Port Monitor). Но проблема возникла с Linux: как тут быть? Посмотрел сорцы программки slsnif (http://sourceforge.net/projects/slsnif/ ) - там юзаются пайпы и/или /pty . Но это немного не то, тем более, что эта утилита как-то не корректно работала: 1. Она работает только на прием данных в порт 2. Она тупо открывает порт, читает из него данные и выводит в консоль, при этом, тому приложению, которому реально необходимы эти данные - их просто не получает, т.к. slsnif их уже прочитал. ЗЫ: Если не прав - поправьте. Так вот, возможно ли и в Linux написать что-то похожее на Filter driver как в Windoews? Или может, есть альтернативные варианты? |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
slsnif, interceptty и подобные программы открывают новое устройство псведотерминала, на использование которого предполагается переконфигурировать приложения, за которыми нужно следить. Это возможно в большинстве случаев и, конечно, проще, чем писать модуль ядра.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Т.е. Приложение должно вместо порта открывать пайп или pty? так может оказаться что такого выбора в нем может не быть. Но а примеры ж фильтр драйверов должны быть в сети? А то я не нашел. Имхо драйвер было бы лучше и универсальнее.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Для Linux такого понятия вообще нет. Нет. Не лучше и не универсальнее - версии ядра меняются часто, и драйверы от одной, могут к другой не подходить. Обычно, для подобных утилит используют libpcap. Она уже кроссплатформенная. |
|||
|
||||
kuzulis |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Ну а иначе то никак. Т.к. к примеру, нужно перехватывать не только траффик ввода/вывода, но, к примеру и моменты конфигурирования устройства. Также, если брать "стандартный" вариант, который к примеру, используют slsnif, interceptty, то там мы открываем порт с уже известными параметрами. А что, если приложение, которое нам нужно "ломануть" втихпря как-то использует порт с какими то параметрами и которые изменяет в режиме своей работы - в этом случае, мы не сможем ничего сделать. Ведь так? Или я не прав?
Но ведь она только для перехвата сетевого траффика tcp/ip. Есть ли еще решения? |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
черт. заработался я. Почему-то подумал, что речь идет о сокетах.
![]() Скорее всего, действительно придется писать модуль ядра, который будет перехватывать управление портом от штатного драйвера. Как вариант, можно просто переименовать устройство порта, а на его место пихнуть созданные упомянутыми прогами pty. Правда, во втором случае, придется много делать из-под рута каждый раз при необходимости сниффинга. |
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Думаю, стандартная книга о написании драйверов для Linux тебе подойдет.
Думаю, твой драйвер должен найти объекты описания устройств и подменить в них коллбэки на свои. А при выгрузке, соответственно, восстанавливать обратно. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |