Russian Qt Forum
Ноябрь 22, 2024, 21:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: PCAP + Qt  (Прочитано 7514 раз)
_KoT_
Гость
« : Декабрь 06, 2010, 17:39 »

Для тех кто не знает, PCAP - библиотека позволяющая отлавливать пакеты поступающие на сетевую карту. Имеет реализации для Linux и Windows.

В классе Kaptilo скрыл код, который подключается к указанному сетевому устройству и регистрирует ловушку пакетов с указанным фильтром.
Ловушка запускается бесконечным циклом в отдельном потоке. При создании понадобится передать
- указатель на массив символов — имя устройства;
- указатель на массив символов — фильтр пакетов;
- указатель на объект содержащий функцию вызываемую для анализа каждого пакета (см. KaptiloFunk).

Объект Kaptilo станет родителем для объекта функции-анализатора и позаботится об освобождении памяти.
О освобождении памяти строк с именем устройства и фильтром позаботьтесь сами.

KaptiloFunk — базовый класс для объекта функции-анализатора, вызываемой для каждого поступившего пакета.
См. комментарии в исходниках.
http://pcapinqt.googlecode.com/svn/trunk/pcapinqt/kaptilo.h
http://pcapinqt.googlecode.com/svn/trunk/pcapinqt/kaptilo.cpp

Пример
Код:
#include "kaptilo.h"
.....
// Реализую в наследнике KaptiloFunk функцию-анализатор. Здесь просто добавляю пакеты в список,
// в реальности, скорее всего, будет более сложная функция.
class MyKaptiloFunk : public KaptiloFunk{
Q_OBJECT
private:
QList<const u_char*> * lp;
public:
MyKaptiloFunk(QList<const u_char*> * Lp,  QObject * parent = 0)
: KaptiloFunk(parent), lp(Lp){}
void Funk(const struct pcap_pkthdr * header, const u_char * pkt_data){
*lp += pkt_data;
}

};
.....
// Создаю ловушку.
Kaptilo k("wlan0", "port 80", new MyKaptiloFunk(&lp));
.....
// Возможно присоединять к дереву объектов, чтоб память освободилась, когда нужно.
Kaptilo *k = new Kaptilo("wlan0", "port 80", new MyKaptiloFunk(&lp), this); // Здесь this указатель на наследника QObject.
.....
Не забудьте добавить в проект библиотеку PCAP. Подмигивающий

Если у кого нибудь есть замечания, исправления, дополнения и т.д. буду рад их услышатьпрочитать Улыбающийся.
« Последнее редактирование: Декабрь 06, 2010, 17:59 от _KoT_ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.