LINUX.ORG.RU

Сообщения gering

 

QNetsocketNotifer - бесконечный вызов сигнала activated

Здравствуйте.

Суть такова: пытаюсь создать сетевой снифер на Qt используя библиотеку libnids(оболочка для libpcap).

Необходимо осуществлять обработку сигналов об отловленных пакетах при помощи QNetsocketNotifer наподобие того, как сделано для libpcap здесь.

сделал так:

//callback для libnids:
void NETLISTENER::tcp_callback(tcp_stream *a_tcp, void **this_time_not_needed)
{
printf("call called\n");
}

//Слот для qsocketnotifer:
void NETLISTENER::RecvCallback(int fd)
{
printf("recv called\n");
nids_dispatch(-1);
}

//В конструкторе класса NETLISTENER:
.....
nids_init();
.....
nids_register_tcp((void *)&NETLISTENER::tcp_callback);
.....
int fd = nids_getfd();
QSocketNotifier *Notifer = new QSocketNotifier(fd, QSocketNotifier::Read, this );
connect(Notifer, SIGNAL(activated(int)), this, SLOT(RecvCallback(int)));
Notifer->setEnabled(true);
.....

Запускаю, посылаю пакет, и выполнение завершается с ошибкой «Segmentation fault» при вызове nids_dispatch(-1) в слоте.

Если вызов nids_dispatch(-1) закомментировать, то в консоль вываливается бесконечное множество сообщений «recv called».

Прошу помочь в решении проблемы.

gering
()

libnids - не отлавливает пакеты

Решил я тут попробовать libnids. Скомпилировал примеры, поставляемые вместе с исходниками библиотеки. Один из примеров должен отлавливать tcp-пакеты и писать об этом в лог-файл и в вывод, но когда я его запускаю он ровным счетом ничего не делает: вывод пуст, лог пуст. callback функция вообще не вызывается :(

Кто уже работал с libnids подскажите что может быть не так.

gering
()

RSS подписка на новые темы