pcap_open() нельзя использовать в libpcap

Я хочу создать приложение с помощью libpcap в Qt в Kali linux. Я создаю подобное приложение в Windows и работает.

Я загружаю и устанавливаю libpcap. Теперь Qt распознает pcap.h, но некоторые функции и константы не работают. вроде как:

pcap_open - PCAP_OPENFLAG_PROMISCUOUS - pcap_findalldevs_ex - PCAP_SRC_IF_STRING - _snprintf_s.

Ошибки компилятора, подобные 'sth', не были объявлены в этой области. Я использую заголовки ниже, но появляются ошибки выше.

#define HAVE_REMOTE
#define WPCAP
#include <pcap.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

person Mohammad Reza Ramezani    schedule 24.03.2014    source источник
comment
Можете ли вы предоставить точное сообщение об ошибке компилятора?   -  person ScoPi    schedule 24.03.2014
comment
Спасибо, дорогой Скопи. У меня новая проблема, о которой я говорю в комментариях «Уважаемый стартап».   -  person Mohammad Reza Ramezani    schedule 24.03.2014


Ответы (3)


WinPcap добавляет некоторые API, недоступные в libpcap (и версии libpcap, более новые, чем версия, на которой основан последний выпуск WinPcap, имеют API, недоступные в WinPcap).

pcap_open() — один из таких API; он НЕ доступен в libpcap. Вы должны использовать либо pcap_open_live(), либо, в libpcap 1.x, pcap_create() и pcap_activate().

libpcap также в настоящее время не поддерживает удаленный захват пакетов.

person Community    schedule 24.03.2014

добавьте LIBS += -lpcap в конец вашего файла .pro. Это решит проблему.

person Sigcont    schedule 24.03.2014
comment
Большое спасибо, дорогой @Startup. Я добавил это, но проект не запускается. в выводе приложения: /root/Qt-Project/build-LinuxBasedPacketCapturing-Desktop_Qt_5_2_1_GCC_32bit-Debug/LinuxBasedPacketCapturing: ошибка при загрузке общих библиотек: libpcap.so.1: невозможно открыть общий объектный файл: нет такого файла или каталога - person Mohammad Reza Ramezani; 24.03.2014
comment
@Mohammad apt-get install libsqlite3-dev, проверьте ваш /usr/lib, присутствует ли там libpcap.so или нет. в противном случае вы должны связать местоположение libpcap.so - person Sigcont; 24.03.2014
comment
Я использую команду locate в Linux и отвечаю. некоторые ответы здесь: /usr/lib/i386-linux-gnu/libpcap.so.0.8 /usr/lib/i386-linux-gnu/libpcap.so.1.3.0 Я добавил LIBS += -L/usr/ lib/i386-linux-gnu/libpcap.so.1.3.0, но в выводе приложения указано выше. - person Mohammad Reza Ramezani; 24.03.2014
comment
ЛС /USR/библиотека | grep libpcap , проверьте версию libpacp, она отобразит libpcap.so.1.3.0 или что-то еще, а затем ln -s /usr/lib/libpcap.so.1.3.0 libpcap.so.1. попробуйте может решить вашу проблему - person Sigcont; 24.03.2014
comment
Извините меня. Я тестировал не тот проект. ошибки Моего первого поста не решает. Я думаю, что вышеуказанные функции и константы несовместимы с libpcap (только в winpcap). потому что другие функции работают. Верно? - person Mohammad Reza Ramezani; 24.03.2014
comment
Я думаю, что вышеуказанные функции и константы несовместимы с libpcap (только в winpcap). потому что другие функции работают. Верно? Да. Смотрите мой ответ. - person ; 25.03.2014

Я искал и обнаружил, что некоторые функции в winpcap не работают в libpcap (как сказал Гай Харрис).

Для программиста Qt в Linux они должны добавить следующий код в файл .pro:

LIBS += -L/usr/local/lib/ -lpcap
person Mohammad Reza Ramezani    schedule 25.03.2014