Как подключить winpcap в visual studio
Я пытаюсь включить библиотеку WinPcap в одну из моих визуальных программ C++ и использую Visual Studio 10 Ultimate.
Чтобы добавить определение препроцессора, необходимо выбрать пункт Свойства в меню проект, а затем выбрать пункт C/C++ из элемент управления list слева и в разделе category Preprocessor необходимо добавить определение в текстовое поле Preprocessor Definitions.
Проект -> Свойства -> C/C++ -> Препроцессор -> Определения Препроцессора-> Добавлено WPCAP
Итак, я успешно выполнил этот шаг
Чтобы добавить новую библиотеку в проект, необходимо выбрать пункт Свойства в меню проект, а затем выбрать пункт Компоновщик в меню проект. элемент управления списком слева, а также под вводом категории добавьте имя о новой библиотеке в дополнительном разделе Текстовое поле зависимости.
Проект -> Свойства -> Компоновщик -> Ввод -> Дополнительные Зависимости -> Добавлено wpcap.lib
Теперь у меня есть проблема при выполнении третьего шага.
Чтобы добавить новый путь, где Microsoft Visual Studio будет искать библиотеки, вы должны выбрать параметры из меню Сервис, затем проект и решения из элемента управления списком слева, каталоги VC++, а затем выбрать Библиотечные файлы в каталогах Show для combobox и add the path в поле ниже.
Инструменты -> Параметры -> проект и решения -> каталоги VC++.
Здесь говорится , что редактирование каталогов VC++ в меню Сервис > Параметры устарело.
Теперь, где находится этот лист свойств пользователя ? Может ли кто-нибудь указать мне правильное направление?
1 ответ
Я уже некоторое время использую winpcap для отправки необработанных пакетов по проводному соединению. Я создаю свой собственный протокол (ничего особенного, просто привыкаю к нему), но теперь я хочу распространить его и на беспроводные соединения. Позволяет ли winpcap отправлять необработанные.
Я хочу сделать программу C, которая использует winpcap. Однако сначала мне нужно установить пакет winpcap в мой PC с помощью установщика, прежде чем я смогу выполнить свою программу. Как сделать так, чтобы моя программа делала это (выполняла действия установщика winpcap) автоматически?
Теперь он является свойством проекта и находится в каталогах свойств проекта -> VC++.
Похожие вопросы:
хай.. как генерировать необработанные карманы и отправлять их в другую систему с помощью winpcap в vc++. я сделал захват пакетов (сниффер) с помощью winpcap в vc++ пожалуйста, помогите мне Спасибо
Я хотел знать, как отключить стек Windows TCP/IP в VC++ [ программно ]. Мы делаем некоторые необработанные сокеты программирования с помощью winpcap. Таким образом, наше приложение не нуждается в.
Я не знаю, правда ли это, но когда я читал FAQ на одном из проблемных сайтов, я нашел кое-что, что привлекло мое внимание: Проверьте свои методы ввода-вывода. В C++ использование cin и cout.
Я уже некоторое время использую winpcap для отправки необработанных пакетов по проводному соединению. Я создаю свой собственный протокол (ничего особенного, просто привыкаю к нему), но теперь я хочу.
Я хочу сделать программу C, которая использует winpcap. Однако сначала мне нужно установить пакет winpcap в мой PC с помощью установщика, прежде чем я смогу выполнить свою программу. Как сделать.
Я пытаюсь портировать исполняемый файл Windows на Linux с помощью wine. Я нахожусь в точке, где я могу запустить исполняемые файлы, но он возвращает некоторую ошибку, говоря, что он не может.
Я должен сделать приложение на основе windows, для которого захватывается сетевой трафик для каждого приложения, где некоторые из запущенных приложений используют один и тот же номер порта для.
Хотите получить пакет разработчика Winpcap (4.1.2), работающий на Windows 7 64-bit. Я программирую в C/C++ в Netbeans IDE с компилятором Cygwin (4.1.10). Я хотел бы непосредственно извлечь некоторые.
Я хочу использовать библиотеку winpcap в своем проекте, но это приведет к ошибке на других компьютерах, на которых winpcap не установлен. Я хочу использовать свою программу в WinXP, Win7. Я проверил.
я whant, чтобы установить утилита WinPcap на окно 10, но я получаю ошибку --------------------------- WinPcap 4.1.3 настройка --------------------------- эта версия Windows не поддерживается WinPcap.
Я пытался создать программу для анализа кадров Ethernet, захваченных в файлах pcap, с помощью MS Visual Studio 2012 на C ++. Я загрузил последние версии WinPcap (4.1.3) и Libpcap (1.7.2).
Мне удалось включить все подпапки из извлеченной папки libpcap в мой проект (если я добавил только корневую папку, включения не работали). И все же у меня есть ошибка, что нет определения типа «Адаптер». Поэтому я просмотрел все файлы в Libpcap и не нашел определения. Я также попытался найти, не определен ли он в какой-то стандартной библиотеке, и снова безуспешно.
Я также попытался немного поиграть и прокомментировал ошибочную строку в pcap.h:
И у меня другая ошибка:
Ошибка 2 ошибка LNK2019: неразрешенный внешний символ _pcap_open_offline_with_tstamp_precision
Итак, после некоторого исследования я обнаружил, что мне может не хватать некоторых определений препроцессора ( WIN32;WPCAP;HAVE_REMOTE ). Это вызвало еще одну проблему: не удалось найти файл заголовка Win32-Extensions.h . И после этого я просто сдался.
Спасибо за любые предложения.
3 ответа
Я загрузил последнюю версию WinPcap (4.1.3) . unresolved external symbol _pcap_open_offline_with_tstamp_precision
Последняя версия WinPcap не основана на последней версии libpcap и даже не на относительно последней версии libpcap, поэтому в ней нет pcap_open_offline_with_tstamp_precision() , а есть только pcap_open_offline() .
Последняя версия WinPcap также не может читать файлы pcap-ng или файлы «pcap с наносекундным разрешением», поэтому ни в коем случае не может предоставить вам отметки времени с точностью до наносекунды.
Если вы хотите иметь возможность читать файлы с отметками времени с наносекундной точностью и получать из них значения отметок времени с разрешением до наносекунд, вам придется работать на UN * X и использовать более новую версию libpcap; это то, что вы сделали в Linux.
Если вы хотите иметь возможность запускать свою программу в Windows с WinPcap - или в версиях UN * Xes со старыми версиями libpcap - вам придется использовать pcap_open_offline() для открытия файлов захвата и жить с разрешением в микросекунды отметки времени.
Я загрузил последние версии WinPcap (4.1.3) и Libpcap (1.7.2).
Вы не можете просто сложить их вместе и надеяться, что это сработает. Если вы хотите загрузить исходный код WinPcap и libpcap и попытаться объединить их в обновленную версию WinPcap, это будет довольно сложный проект, и вам, вероятно, придется изучить исходный код для них обоих.
Вы можете просто установить WinPcap и пакет разработчика WinPcap (да, там написано 4.1.2 , но пакет разработчика 4.1.2 работает с 4.1.3, как сказано в примечании) и используйте его, а libpcap оставьте в полях UN * X.
Чтобы использовать класс, вам понадобятся две вещи:
- Декларация. Он находится в файле .h, и он у вас есть;
- Определение. Этот находится внутри библиотеки (динамической или статической), в которой определен класс. Похоже, вы пропустили эту. Правильно ли вы подключились к библиотеке? Пожалуйста, проверьте, есть ли большая вероятность, что причиной является плохая ссылка (или отсутствие ссылки).
- Вам следует загрузить и установить WinPcap 4.1.3.
- Вам следует загрузить WinPcap 4.1.2 SDK.
- См. Пример «Примеры-pcap \ readfile \ readfile.c» в архиве WinPcap 4.1.2 SDK. Это поможет начать.
Если у вас есть файлы pcap-ng или файлы с точностью до наносекунды, обновите вашу библиотеку WinPcap с помощью WinPcap 4.1.3-libpcap 1.7.3 порт
1. Загрузите установочный пакет Winpcap и библиотеку разработки.
(1) Ссылки на ресурсы:установочный пакет winpcap、библиотека разработки winpcap
(2) Если он был установленWireshark (Как правило, при установке wirehake программа установки winpcap появляется во время процесса установки) и подтверждает, что среда Winpcap установлена, нет необходимости временно переустанавливать установочный пакет Winpcap. Но ситуация в (3) может оказаться
(3) После настройки среды для запуска демонстрационной программы было обнаружено, что демонстрационная программа работала неправильно ——Невозможно правильно вывести результат и вернуть -12. Причина: wirehark [версия 3.0.0 (v3.0.0-0-g937e33de)] имеет проблему с установленным по умолчанию winpcap; просто переустановите установочный пакет winpcap.
2. Настройте среду разработки winpcap.
2.0 Введение в среду
- Code::Blcok 13.12
- winpcap Developer Pack 4.1.2 (WpdPack_4_1_2, рекомендуется разархивировать на чисто английский путь)
- winpcap 4.1.3
2.1 Настройка среды компиляции
Откройте Codeblock, выберите [Настройки] -> [Complier].
среди них, WPCAP Определения макросов, необходимые для использования уникальных функций в Winpcap win32, HAVE_REMOTE Определение макроса, необходимое для использования функции удаленного захвата, эквивалентно определению в кодировке
Добавьте расположение Packet.lib и wpcap.lib и расположение WS2_32.dll в библиотеке разработки Winpcap в [Настройки компоновщика]
- Для Packet.lib и wpcap.lib вы можете выбрать 32-битную версию в соответствии с архитектурой системы (находится в WpdPack\Lib ) Или 64-битный (находится в WpdPack\Lib\x64 ) Файл библиотеки функций
- Для WS2_32.dll 64-битные системы Windows обычно расположены в C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib По пути обычно располагаются 32-битные системы windows C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib Под путем
- Используйте следующий [Добавить], чтобы добавить абсолютный путь
- Добавьте расположение файла заголовка пакета разработки в [Каталоги поиска] WpdPack\Include , Также добавьте абсолютный путь для использования [Добавить]
3. Процедура испытаний
Вы можете создать новый файл или проект, скопируйте приведенный ниже код для тестирования demo.c
Выложу позже demo.c Тестовый проект удобен для тестирования, а также содержит рекомендуемые материалы и образцы кодов.
4. Изучите и используйте
Если после прочтения вы почувствуете себя просветленным, не могли бы вы понравиться
Сегодня мы рассмотрим замечательный
инструмент, библиотеку pcap, реализованную
для всех Windows-платформ (95, 98, ME, NT, 2000, XP и даже
CE) и для большинства UNIX-систем. Объединяющие
интерфейсы, libpcap и WinPCap едва различаются и, с
помощью pcap, ты сможешь написать сниффер,
переносимый на уровне исходных текстов
практически куда угодно. Например, сниффер
с поддержкой BPF-фильтрации (собственно, это
всё, что может понадобится от сниффера для
любых задач), приведённый в конце статьи,
компилируется одинаково хорошо подо все
доступные мне платформы. За исключением,
пожалуй, возможных warning'ов по поводу
несовпадения типов.
БИБЛИОТЕКА ПИКАП
Если ты пишешь под UNIX, тебе понадобится
пакет libpcap, желательно посвежее. Libpcap
немного эволюционирует: рассматриваемые
здесь приёмы действительны для версии 0.7.1.
Обрати внимание, в зависимости от версии,
libpcap по-дефолту встает в разные места (в /usr/lib,
в /usr/local/lib, etc), и тебе необходимо будет
добиться синхронизации версий, а также
решить, хочешь ли ты включать объектный код
libpcap в свою программу (а это плюс 90kb и выше),
или тебя устроят динамически подгружаемые
библиотеки. Кроме того, некоторые функции в
реализации под различные UNIX-платформы
ведут себя по-разному (это касается,
например, поддержки детального описания
интерфейсов), поэтому я настоятельно
рекомендую тебе читать документацию.
Учти несколько важных моментов:
1) Программы, использующие pcap, должны быть
либо суидными, либо выполняться из-под рута
(или "Администратора" :))
2) Сниффить диалап-соединения в системах NT/2000/XP
посредством PacketX невозможно. Создатели WinPCap
списывают это на криворукость MicroSoft, и здесь
я рекомендую обратиться к PPP-драйверам
программ вроде CommView и их API, но это уже
отдельный разговор.
ДОКУМЕНТАЦИЯ К WINPCAP
. заслуживает очень теплых слов 🙂 Я получил
огромное удовольствие, изучая эту
документацию. Качественная навигация,
отличные примеры, глубокое фундаментальное
изложение понятий и технологий. По большому
счету, этой документации вполне достаточно,
чтобы полностью овладеть пикапом. Для самых
маленьких (для таких, как я, которые пишут
демо-программы, коцая текст из примеров в
документации) есть раздел "WinPcap tutorial: a step
by step guide to program WinPcap". Я сделаю небольшое
изложение этого раздела и расскажу об
основных приемах для создания
функционального сниффера на основе pcap'а.
1. OBTAINING THE DEVICE LIST
int pcap_findalldevs(pcap_if_t **alldevs, char *errbuf); -- функция,
собирающая информацию о доступных
интерфейсах, которые можно пытаться
прослушивать. Помимо интересующих нас
сетевых адаптеров, сюда попадают
всевозможные инфракрасные устройства,
параллельные порты, etc.
Параметр pcap_if_t **alldevs -- односвязный список.
Элементы разбирать не буду, они прекрасно
проиллюстрированы в документации. Отмечу
лишь, что функция pcap_findalldevs() сама выделяет
нужную память под **alldevp. Признак конца
списка -- значение NULL в очередном pcap_if *next из
выбранного **alldevs.
Проход по списку можно осуществлять так:
pcap_if_t *devlist;
pcap_if_t *d;
**alldevs -- штучка интерфейсная, нужная, пожалуй,
лишь для общения с юзером. И, если нет нужды
хранить её в памяти, можно воспользоваться
специальным деструктором, pcap_freealldevs(pcap_if_t
*alldevp).
Что касается имен интерфейсов, в Windows они,
мягко скажем, не очень обычные, и задавать
их с командной строки не очень удобно. В
моей Win2k PRO, например, сетевой адаптер
называется так: \Device\NPF_.
Стало быть, приличный сниффер нуждается в
наличии фичи либо с автоопределением
адаптера, либо с возможностью его выбора
юзером в диалоговом окне.
2. OPENING AN ADAPTER
pcap_t* pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char
*errbuf); открывает устройство char *device и
связывает его с дескриптором типа pcap_t *.
Параметр int snaplen задаёт количество байт,
необходимая снимать с каждого входящего
кадра данных. int promisc, будучи установленным в
ненулевое значение, переводит устройство в
promiscuous mode, int to_ms -- таймаут на ожидание кадра
данных в миллисекундах, char *errbuf -- ASCII-расшифровка
возникшей ошибки, заполняется при возврате
значения NULL.
void pcap_close(pcap_t *p); -- деструктор для
дескриптора устройства и связанной с ним
памяти.
3. ATTACHING A FILTER
Как я уже рассказывал в предыдущих
публикациях, существует технология BPF-фильтрации,
которой можно воспользоваться для весьма
дотошной детализации фильтрации входящих
кадров данных на аппаратном уровне (в
данном случае, на уровне сетевого адаптера).
Как известно, всякий раз при получении
кадра данных в свои буфера, сетевое
устройство генерирует прерывание
процессору. Фильтрация просто необходима:
сниффер без фильтра в сети высокой
пропускной способности (выше 10 Mbit/sec), с
более-менее навороченным выводом, способен
загрузить систему под 100%.
Библиотека pcap предоставляет очень простой
интерфейс к BPF-фильтрации, сосредоточенный
в двух основных функциях:
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize,
bpf_u_int32 netmask);
int pcap_setfilter(pcap_t *p, struct bpf_program *fp).
Первая функция "компилирует" строку char
*str, состоящую из набора regular expressions для
фильтра в BPF-псевдокод и помещает его в
список struct bpf_program *fp, применяя фильтр к
сетевой маске bpf_u_int32 netmask и "сжимая" его,
отбрасывая избыточные данные, в случае
позитивного значения int optimize. Вторая
функция применяет полученный псевдокод к
указанному дескриптору устройства. Память
под bpf_program * выделяется автоматически, но
деструкторов, насколько я понимаю, не
предусмотрено, и тебе придётся
реализовывать их самостоятельно.
Синтаксис регулярных выражений для pcap_compilte()
можно найти в мэне tcpdump'а и в документации к
WinPCap'у.
4. CAPTURING THE PACKETS
Я говорю о функции int pcap_loop(pcap_t *p, int cnt, pcap_handler
callback, u_char *user). pcap_t *p -- это дескриптор
открытого интерфейса. int cnt -- количество
кадров данных, которое необходимо
прослушать перед тем, как передать
управление дальше. pcap_handler callback -- это ни что
иное, как ссылка на функцию-хэндлер, куда
передается управление при получении
следующего кадра данных. u_char *user -- это буфер
обмена между pcap_loop() и её хэндлером.
Сам хэндлер таков: void (*pcap_handler)(u_char *user, const
struct pcap_pkthdr *pkt_header, const u_char *pkt_data). В *pkt_header'е
содержатся реквизиты входящего кадра
данных (время поступления, размер, etc). u_char
*pkt_data -- это сам кадр, начиная с заголовка
локального уровня.
Демо-сниффер реализует данный подход таким
образом:
while(!enough) rc = pcap_dispatch(iface,number,packet_handler,NULL);
if(rc == -1) printf("pcap_dispatch() failed!\n");
return 1;
>
>
5. SENDING THE PACKETS
Возможность отправки данных в открытый
интерфейс посредством pcap существует лишь в
WinPCap и реализована в виде функции int pcap_sendpacket(pcap_t
*p, u_char *buf, int size).
Ты уже, наверное, догадался, packet.dll -- это
интерфейс низкого уровня для библиотеки
WinPCap, можно сказать, его сервис-провайдер.
Логично предположить, что реализовывать и
сниффинг, и спуффинг непосредственно на
уровне PacketX лучше, чем на WinPCap. Ты получаешь
больше возможностей, больше свободы, больше
контроля. Я напишу последнюю,
заключительную статью как раз о PacketX.
DEMO-SNIFFER
Я написал небольшой демо-сниффер,
реализующий описанные выше прием. Win-версия
зависит от WinPCap версии 3.0а, а unix-версия -- от
наличия libpcap. Бинарник под windows можно взять здесь,
а исходники -- здесь.
Небольшой парсинг для сниффера я накоцал из
библиотеки, которую пишу под свои задачи,
поэтому не удивляйтесь некоторой
неадекватности в коде программы. И читайте
pcap-sniffer.exe --help :))
Последний момент: в некоторых версиях libpcap (сюда
относится версия под Linux), описание
интерфейсов не поддерживается. Посему,
желающие компилировать прогу под линукс
должны исключить соответствующий код (обработку
параметра --list).
Итак Ethernet библиотека WinPcap для C++Builder6. Прежде чем воспользовать данной библиотекой необходимо установить на компьютер сниффер Wireshark в составе которого имеется WinPcap. Это совсем несложно. Некоторые поясняющие картинки ниже по тексту. Далее будем предполагать что на компе уже установлен C++Builder6 или его меньший или старший братец типа C++Builder5, Embarcedero и т. п.
Для того, чтобы проверить работу библиотеки в действии создадим в C++Builder6 небольшой тестовый проект который посредством библиотеки WinPcap будет отправлять в Ethernet сеть небольшой пакет на MAC адрес сетевой карты компа и принимать его. Примерно так.
Библиотека WinPcap позволяет отправлять в сеть и принимать из сети данные с любым MAC адресом сетевой карты. Функция приема WinPcap будет принимать любой пакет из сети. Далее нужный пакет можно отфильтровать по MAC адресу назначения, который обычно находится в первых шести байтах Ethernet пакета. Для наглядности все выше сказанное реализовано в тестовом проекте.
Теперь главное. Установки Wireshark и WinPcap на Windows совершенно недостаточно для создания программы на C++Builder. Для использования функций библиотеки WinPcap в C++Builder необходимо установть в его папки файлы самой библиотки и прописать пути к ним. Но прежде их придется конвертировать в нужный формат.
3. Переместить, с переименованием к исходным , тоесть к Packet.lib и wpcap.lib полученные файлы в папку Lib с установленным C++Builder6, а также содержимое папки Include библиотеки WinPcap в соответствующую папку с установленным C++Builder6
Все. Теперь можно создавать проекты в C++Builder6 на базе библиотеки WinPcap. Один малентький нюанс. При первой попытке компиляции возникает странная ошибка, которая убирается путем правки файла pcap.h
Строку sys/time.h необходимо заменить на строку time.h
Кому лень возиться с преобразованием и исправлением, ниже ссылка с готовыми файлами библиотеки WinPcap для C++Builder, а также тестовый проект C++Builder6 по приему и передаче сырых Ethernet пакетов в Windows на базе библитеки WinPcap. Кому пригодится тестовый проект или у кого возникают вопросы или замечания по данной теме не забудьте оставить свой коммент.
Читайте также: