packet capture что за программа

Packet capture как пользоваться

ShareIT — поделись знаниями!

Полезно

Узнать IP — адрес компьютера в интернете

Онлайн генератор устойчивых паролей

Онлайн калькулятор подсетей

Калькулятор инсталляции IP — АТС Asterisk

Руководство администратора FreePBX на русском языке

Руководство администратора Cisco UCM/CME на русском языке

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Популярное и похожее

Настройка Site-To-Site IPSec VPN на Cisco

Настройка Router-on-a-Stick на Cisco

Настройка доступа к Cisco по SSH

Повышаем безопасность коммутаторов и маршрутизаторов Cisco

Настройка Cisco Embedded Packet Capture

Для захвата трафика можно использовать маршрутизаторы Cisco, при помощи утилиты Cisco Embedded Packet Capture, которая доступна, начиная с версии IOS 12.4.20T. В этой статье мы расскажем, как настроить EPC для захвата пакетов на роутере, сохранять их на flash памяти или экспортировать на ftp/tftp сервер для будущего анализа, при помощи анализатора пакетов, например, такого как Wireshark.

Давайте рассмотрим некоторые из основных функций, которые предлагает нам Embedded Packet Capture:

Прежде чем начать конфигурацию Cisco EPC необходимо разобраться с двумя терминами, которые будут использоваться в процессе – Capture Buffer(буфер захвата) и Capture Point (точка захвата)

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Capture buffer – это зона в памяти для хранения пакетных данных. Существует два типа буферов захвата Linear (линейный) и Circular (кольцевой):

Capture Point – это точка транзита трафика, в которой фиксируется пакет. Тут определяется следующее:

Настройка Cisco Embedded Packet Capture

Рассмотрим настройку на примере нашей схемы, где мы хотим захватить входящие и исходящие пакеты на интерфейсе FastEthernet 0/0 от ПК с адресом 192.168.1.5 до веб-сервера wiki.merionet.ru с адресом 212.193.249.136

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Далее мы можем настроить захват определенного трафика. В нашем случае нужно захватить трафик между 192.168.1.5 и 212.193.249.136. Это достигается при помощи списков контроля доступа ACL. Мы можем использовать стандартные или расширенные списки доступа в зависимости от требуемой детализации. Если список доступа не настроен, то захвачен будет весь трафик.

Наш список доступа включает трафик, исходящий от обоих хостов, потому что мы хотим захватить двунаправленный трафик. Если бы мы включили только один оператор ACL, тогда был бы зафиксирован только односторонний трафик. Теперь свяжем наш буфер с access-list’ом, при помощи команды monitor capture buffer [название_буфера] filter access-list [название_ACL]

Затем следующем шагом мы определяем, какой интерфейс будет точкой захвата. В нашем случае это FastEthernet 0/0, и мы будем захватывать как входящие, так и исходящие пакеты. Во время этой фазы конфигурации нам нужно предоставить имя для точки захвата.

Также очень важно ввести команду ip cef для обеспечения минимального влияния на процессор маршрутизатора, при помощи Cisco Express Forwarding. Если ip cef не включен, то появится сообщение IPv4 CEF is not enabled.

Полезные команды проверки:

Экспорт данных

В большинстве случаев захваченные данные необходимо будет экспортировать в сетевой анализатор трафика (например, WireShark) для дополнительного анализа в удобном для пользователя интерфейсе. Захваченный буфер можно экспортировать в несколько местоположений, включая: flash: (на маршрутизаторе), ftp, tftp, http, https, scp и другие.

После этого файл capture.pcap появится на нашем TFTP сервере, и мы можем открыть его в сетевом анализаторе.

Пожалуйста, расскажите почему?

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программаНам жаль, что статья не была полезна для вас 🙁 Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программаПодпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации 🙂 Просто оставьте свои данные в форме ниже.

У меня не всегда есть возможность быстро отреагировать на какие-то изменения в работе сети, но вы можете помочь мне в разработке, собрав дамп процесса авторизации и отправив его мне. Дамп содержит всю необходимую для реализации алгоритма информацию, включая: параметры исходящих запросов, ответы сервера, Cookies и т.п.

1. Начальная настройка устройства

1.1. Необходимые приложения

TODO: Найти замену Titanium Backup, не требующую прав root и позволяющую быстро упаковать и распаковать данные любого приложения.

1.2. Настройка Packet Capture

Для того, чтобы данное приложение могло выполнять MITM атаку на трафик, нам нужно его добавить сертификат в список надёжных в Android. Сертификат уникален для каждого устройства, поэтому он не позволит другим проводить эту же атаку по отношению к вам.

Откройте приложение Packet Capture и частично пропустите начальную презентацию. На слайде «SSL Decryption» нажмите на кнопку «Install Certificate».

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

В появившемся диалоговом окне просто нажмите кнопку «ОК».

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Готово! Теперь приложение сможет расшифровывать проходящий через него трафик.

Примечание: Android не очень любит, когда среди надёжных сертификатов находятся пользовательские, поэтому иногда может появляться уведомление «Сеть может отслеживаться администратором». Чтобы избавиться от этого предупреждения, нажмите на уведомление и в открывшемся окне удалите пользовательский сертификат, добавленный в этом шаге. При этом приложение Packet Capture потеряет возможность расшифровывать SSL трафик.

Процедура создания дампа очень проста и состоит всего из двух шагов.

2.1. Запуск захвата пакетов

Откройте Packet Capture. Интерфейс этого приложения очень простой и состоит всего из нескольких элементов. Для начала захвата пакетов вам нужно нажать на зелёную кнопку «Play» с цифрой 1.

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Далее нужно выбрать приложение, трафик которого вы хотите захватить. Захваченный трафик появится в главном меню Packet Capture.

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Не забудьте остановить захват пакетов после завершения всех операций нажатием кнопки «Stop».

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Вы можете просмотреть захваченные пакеты, нажав на собранный дамп. Если вас что-то не устраивает в этом дампе, его можно удалить смахиванием в сторону, а затем провести новый сбор данных. Учтите, что повторно пройти авторизацию в той же сети нельзя, поэтому вам либо придётся пересесть в другой вагон/автобус/. либо сменить MAC адрес на своём устройстве.

2.2. Прохождение авторизации в браузере

Откройте выбранный ранее браузер и зайдите на любой сайт, не использующий HTTPS (например, wi-fi.ru). Главная цель в этом шаге — получение начального перенаправления на страницу авторизации.

Очень желательно использовать режим инкогнито. Во-первых это обезопасит ваши данные (мне они не нужны, но меня и взломать могут), а во-вторых такое подключение будет чистым и мне будет проще понять, откуда что берётся.

После того, как страница авторизации открылась, выполните привычную процедуру входа в сеть. Packet Capture зафиксирует весь диалог с сервером и позволит мне реализовать подобный алгоритм в коде.

3. Упаковка и отправка собранных данных

В Packet Capture отсутствует встроенная функция экспорта, поэтому придётся использовать средства резервного копирования. Вместо экспорта отдельных дампов упакуем всё приложение целиком при помощи Titanium Backup.

Откройте Titanium Backup. Во всех появляющихся диалоговых окнах нужно нажать «ОК» (только в первый раз).

Перейдите во вкладку «Резервные копии» и найдите Packet Capture в списке приложений вручную или при помощи поиска по запросу «packet».

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Нажмите на строку с Packet Capture для открытия диалогового окна создания резервной копии.

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Нажмите кнопку «Сохранить».

Теперь зажмите ту же строку с Packet Capture до появления следующего диалогового окна.

packet capture что за программа. Смотреть фото packet capture что за программа. Смотреть картинку packet capture что за программа. Картинка про packet capture что за программа. Фото packet capture что за программа

Выберите пункты «Передать последнюю резервную копию. » → «Только данные (простой импорт)».

DEV: eth0
NET: 192.168.12.0
MASK: 255.255.255.0

Capturing Our First Packet

destination address — в данном случае должен быть гейтом. Проверим роутинг: теперь наберем команду arp для получения адреса ethernet:

Давайте удалим destination address из кеша: После чего компьютер пытается сделать широковещательный запрос — broadcast (ff:ff:ff:ff:ff:ff), пытаясь отыскать IP 192.168.1.1.

Допустим наша сетка имеет пропускную способность в 10Mb/s.

Первое поле ETH_ALEN есть destination ethernet address пакета. Второе поле ETH_ALEN — источник. Третье поле — тип пакета. id-шники протоколов из net/ethernet.h
Нам итересен прежде всего IP и немного ARP.

Writing a Basic Packet Capture Engine

В этом разделе обсуждается такая тема,как написание енжина по захвату пакетов. Нам нужно научиться анализировать и фильтровать пакеты.

Рассмотрим следующий библиотечный метод pcap :

Он будет использован нами как один из базовых. Во время цикла pcap_loop(..) будет происходить захват пакетов, которые будут передаваться в callback function типа pcap_handler.
Здесь представляют интерес аргументы 2 и 3, хидер для pcap packet и константа u_char.

Allright then, lets give her a whirl!

Используем эту информацию в качестве отправной точки. Допустим,в моей локальной сетке 2 машины — линуксовая и виндовая, которые соединены через хаб. Если я сетевую карту на линуксовой машине установлю в promiscuous mode, я смогу увидеть весь трафик,идущий через виндовую машину.

Рассмотрим следующую программу :

Эта программа принимает строку от пользователя, компилирует ее и устанавливает ее в качестве фильтра- при этом нужно сделать запрос на google.com:

Похоже, и тут мы попали в точку. Теперь неплохо бы расшифровать полученную информацию. В следующем разделе рассмотрим анализ пакетов.

Packet Analysis

В этом разделе мы затронем тему выделения информации. Для этого неплохо бы знать соответственные RFC: RFC 791 (IP),RFC 768 (UDP),RFC 826 (ARP),RFC 792 (ICMPv4) и конечно RFC 793 (TCPv4).

Настоятельно рекомендую вам использовать другой сниффер для подтверждения всего того, что я тут наговорил.Например,tcpdump или ethereal. Оба этих снифера могут анализировать как пакеты, так и сами данные.

Следующая программа будет построена на основе предыдущих, с небольшим изменением callback function, которая передается в pcap_loop() или pcap_dispatch(). Рассмотрим следующий пример:

Эта программа будет использована в качестве заготовки для дальнейших программ. Вы могли заметить, что я передаю u_char* ( NULL) в pcap_loop(). Это делается для передачи первого аргумента. Итак, нам нужно прочитать тело TCP packets.

Важнейшим элементом любого хидера является тип пакета. Структура struct ether_header из net/ethernet.h:

Это дает нам возможность конвертации ethernet headers в читаемый ascii. конвертация ethernet address в HOSTNAME Кое-что тут было позаимствовано из небезизвестного Steven’s-а. А вот и callback function для управления ethernet headers, распечатки source и destination — адресов:

В исходниках вы найдете пример disect1.c.

Давайте теперь подробнее посмотрим на IP-хидер:

Источник

How to Capture Packets

Overview of Packet Capture

Security Declaration

The packet capture function is mainly used for network detection and fault management and may involve personal communication information. Huawei cannot collect or store user communication information without permission. It is recommended that relevant functions used to collect or store user communication information be enabled in adherence with applicable laws and regulations. During the usage and storage of user communication information, measures must be taken to protect user communication information.

This document uses S series switches of V200R013C00 as an example.

Definition

Packet capture technology captures packets from devices and provides a way to locate network problems.

Benefits

Maintenance personnel can view captured packets on the command line interface (CLI), save captured packets in a specified file, and download the captured packets to a local PC for analysis. This greatly improves maintenance efficiency and reduces maintenance costs.

Classification

The switch can capture the following types of packets:

Capturing Service Packets

You can run the capture-packet < interface interface-type i nterface-number | acl < ipv4-acl| ipv6 ipv6-acl > > * [ vlan vlan-id | cvlan cvlan-id ] * destination < filefile-name | terminal > * [ car cir car-value | time-out time-out-value | packet-num number | packet-len length | < inbound| outbound > ] * [ packet-info ] command in the system view or diagnostic view to capture service packets that match specified rules.

Parameters

interface interface-type interface-number

Captures packets on a specified interface.

The interface must exist on the switch and cannot be a management interface.

Captures packets matching a specified ACL or ACL6.

The specified ACL or ACL6 and the corresponding rules must have been created. For other fixed switches excluding the S5720EI, S5720HI, S5730HI, S6720EI, S6720HI, and S6720S-EI, the destination IPv6 address cannot be specified in an ACL6 rule. Otherwise, packets cannot be captured.

Captures packets from a specified VLAN.

The value is an integer in the range from 1 to 4094.

Captures packets with a specified inner VLAN ID.

Only the S5720EI, S5720HI, S5730HI, S6720EI, S6720HI, S6720S-EI, and modular switches support this parameter.

The value is an integer in the range from 1 to 4094.

Indicates the mode in which captured packets are stored:

The value of file-name is a string of 5 to 63 characters.

Specifies the rate at which packets are captured, that is, the total number of bytes of packets that can be captured by the device in a unit of time (1s).

Only the S5720EI, S5720HI, S5730HI, S6720EI, S6720HI, S6720S-EI, and modular switches support this parameter.

The value is an integer in the range from 8 to 256, in kbit/s. The default value is 64.

Specifies the timeout interval for capturing packets. The system stops capturing packets after the specified timeout interval expires.

The value is an integer in the range from 1 to 300, in seconds. The default value is 60.

Specifies the number of packets to be captured. The system stops capturing packets after the specified number of packets are captured.

The value is an integer in the range from 1 to 1000. The default value is 100.

Specifies the length of captured packets.

The value is an integer in the range from 20 to 64, in bytes. The default value is 64.

Captures packets received on an interface.

Only the S5720HI, S5730HI, and S6720HI, and LE1D2S04SEC0 card, LE1D2X32SEC0 card, LE1D2H02QEC0 card, and X series cards on modular switches support inbound and outbound parameters. If inbound and outbound are not specified, both packets received and sent by an interface are captured. Other cards and fixed switches do not support inbound or outbound and can only capture packets received by interfaces.

Captures packets sent by an interface.

Parses basic information about captured packets, such as the source and destination MAC addresses or IP addresses.

This parameter can be specified only when this command is run in the diagnostic view. The switch can parse basic information about the captured packets only when this parameter is specified and the length of the captured packet is greater than or equal to 48 bytes (that is, the value of packet-len length is greater than or equal to 48).

Feature Limitations

Example

# Capture packets on GE0/0/1, parse basic information, and display the information on the terminal (packet capture in the diagnostic view of the S5720HI is used as an example).

ith captured (incoming/outgoing) packet.

Источник

Packet Capture

This section describes the configuration model of packet capture and provides examples of XML packets.

Data Model

The configuration model file matching packet capture is huawei-capture.yang.

/huawei-capture:capture-pkt/cpu

Captures packets sent to the CPU.

This object does not need any data configuration.

cpu and ifNameType cannot be configured simultaneously.

/huawei-capture:capture-pkt/ifNameType

Captures packets on a specified interface.

The value is a string in the format of interface-typeinterface-number.

The interface must exist on the switch.

/huawei-capture:capture-pkt/vlan-id

Captures packets from the specified outer VLAN.

The value is an integer that ranges from 1 to 4094. The VLAN must exist on the switch.

/huawei-capture:capture-pkt/acl-id

Captures packets matching the specified ACL.

The value is an integer that ranges from 2000 to 4 999. The ACL must exist on the switch.

/huawei-capture:capture-pkt/packetnumber

Indicates the number of packets to be captured. The system stops capturing packets after the specified number of packets are captured.

The value is an integer that ranges from 1 to 1000. The default value is 100.

/huawei-capture:capture-pkt/packetlenth

Indicates the length of a single captured packet, which means the first several bytes of the captured packet.

The value is an integer that ranges from 20 to 64, in bytes. The default value is 64.

/huawei-capture:capture-pkt/timeout

Indicates the timeout interval of packet capture. The system stops capturing packets after the specified timeout interval.

The value is an integer that ranges from 1 to 300, in seconds. The default value is 60.

/huawei-capture:capture-pkt/filename

Saves captured packets to the specified file.

The file name is a string in *.cap format. The default value is capture.cap.

Table 2-246 Notification message

ItemDescription
esnIndicates the device ESN.
filenameIndicates the name of the file that stores the captured packets.
typeIndicates the type of the file that stores the captured packets.
statusIndicates the result of packet capture.
errorcodeIndicates the error code.

Capturing Packets Sent to the CPU

This section describes how to capture packets sent to the CPU using the rpc method.

Data Requirements

Capturing packets sent to the CPU

Capturing packets from the specified outer VLAN

Capture packets from VLAN 10.

Capturing packets matching the specified ACL

Capture packets matching the ACL 2003.

Number of packets to be captured

Capture 120 packets.

Length of a single captured packet

Set the length of a single captured packet to 55 bytes.

Timeout interval of packet capture

Set the timeout interval of packet capture to 10 seconds.

Name of the file to which packets are saved

Save the captured packets to the captureTest1.cap file.

Request Example

The specified VLAN and ACL must exist, and the ACL must have the rules configured. For details about how to configure VLAN and ACL, see VLAN Management and ACL Rule Management separately.

Name of the file to which packets are saved cannot exist.

Response Example

Capturing Packets on a Specified Interface

This section describes how to capture packets on a specified interface using the rpc method.

Data Requirements

Capturing packets on a specified interface

GigabitEthernet 0 /0/1

Capture packets on the interface GigabitEthernet 0 /0/1.

Capturing packets from the specified outer VLAN

Capture packets from VLAN 10.

Capturing packets matching the specified ACL

Capture packets matching the ACL 2003.

Number of packets to be captured

Capture 120 packets.

Length of a single captured packet

Set the length of a single captured packet to 55 bytes.

Timeout interval of packet capture

Set the timeout interval of packet capture to 10 seconds.

Name of the file to which packets are saved

Save the captured packets to the captureTest1.cap file.

Request Example

The specified VLAN and ACL must already exist, and the ACL must have the rules configured. For details about how to configure VLAN and ACL, see VLAN Management and ACL Rule Management separately.

Name of the file to which packets are saved cannot already exist.

Источник

Программирование с использованием PCAP

Данный текст является переводом статьи Тима Карстенса Programming with pcap 2002 года. В русскоязычном интернете не так много информации по PCAP. Перевод сделан в первую очередь для людей, которым интересна тема захвата трафика, но при этом они плохо владеют английским языком. Под катом, собственно, сам перевод.

Вступление

Давайте начнем с того, что определим, для кого написана эта статья. Очевидно, что некоторое базовое знание C необходимо (если, конечно, вы не хотите просто понять теорию), для понимания кода приведенного в статье, но вам не нужно быть ниндзя программирования: в тех моментах, которые могут быть понятны только более опытными программистам я постараюсь подробно объяснить все концепции. Так же, пониманию может помочь некоторое базовое знание работы сетей, учитывая что PCAP — это библиотека для реализации сниффинга (Прим. переводчика: Сниффинг — процесс захвата сетевого трафика, своего, или чужого). Все представленные здесь примеры кода были протестированы на FreeBSD 4.3 с ядром по умолчанию.

Начало работы: Общая форма приложения PCAP

Первая вещь которую необходимо понять — общая структура PCAP сниффера. Она может выглядеть следующим образом:

Определение устройства

Это ужасно просто. Есть два способа определить устройство, которое мы хотим прослушивать.

Первый — просто позволить пользователю сказать программе имя того устройства с которого он хочет захватывать трафик. Рассмотрим этот код:

Пользователь определяет устройство указывая его имя в качестве первого аргумента программы. Теперь, строка dev содержит имя интерфейса который мы будем прослушивать в формате понятном PCAP (конечно, при условии, что пользователь дал нам реальное имя интерфейса)

Второй способ также очень прост. Давайте взглянем на программу:

Настройка устройства для сниффинга

Для демонстрации, рассмотрим этот фрагмент кода:

Замечания по поводу разборчивого/неразборчивого режимов сниффинга: два способа очень различны по стилю. Обычно, интерфейс находится в разборчивом режиме, захватывая только тот трафик, который отправлен именно ему. Только трафик направленный от него, к нему, или маршрутизированный через него будет захвачен сниффером. Неразборчивый режим, наоборот, захватывает весь трафик который проходит через кабель. В среде без коммутации это может быть весь сетевой трафик. Очевидным преимуществом этого способа является то, возможно захватить большее количество пакетов, что может быть полезным, или нет, в зависимости от цели захвата трафика. Однако существуют и недостатки. Неразборчивый режим легко детектируется, один узел может четко определить, находится ли другой в неразборчивом режиме или нет. Так же, он работает только в не коммутируемой среде (например хаб, или маршрутизатор использующий APR). Еще одним недостатком является то, что в сетях с большим количеством трафика может не хватить системных ресурсов для захвата и анализа всех пакетов.

Не все устройства предоставляют одни и те же заголовки канального уровня в прочитанных вами пакетах. Ethernet устройства, и некоторые не-Ethernet устройства, могут предоставить Ethernet заголовки, но другие типы устройств, например такие как замыкающие устройства в BSD и OS X, PPP-интерфейсы, и Wi-Fi-интерфейсы в режиме мониторинга — нет.

Вам нужно определить тип заголовков канального уровня, которые предоставляет устройство, и использовать для анализа содержимого пакетов. pcap_datalink() возвращает тип заголовков канального уровня. (Cм. список значений заголовков канального уровня. Возвращаемые значения — значения DHT_ в этом списке)

Если ваша программа не поддерживает заголовки канального уровня предоставляемые устройством, то она должна будет прекратить работу, с помощью подобного кода:

который сработает если устройство не поддерживает Ethernet — заголовки. Это может сработать для кода приведенного ниже, который использует заголовки Ethernet.

Фильтрация трафика

Процесс очень простой. После того, как мы вызвали pcap_open_live() и имеем работающую сессию сниффинга, мы можем применить наш фильтр. Вы спросите, почему просто не использовать обычные if / else if выражения? Две причины: первая — фильтр PCAP эффективнее, потому что он фильтрует непосредственно через BPF; соответственно нам нужно куда меньшее количество ресурсов, ведь драйвер BPF делает это напрямую. Вторая — это то, что фильтры PCAP просто проще.

Перед тем, как применить фильтр, мы должны скомпилировать его. Условие фильтра содержится в обычной строке (или массиве char ). Синтаксис достаточно хорошо документирован на главной странице tcpdump.org; Я оставлю это вам на самостоятельное рассмотрение. Однако, мы будем использовать простые тестовые выражения, и, возможно, вы достаточно догадливы что бы самостоятельно вывести правила синтаксиса этих условий из приведенных примеров.

Это очень прямолинейно и просто. Первый аргумент — наш дескриптор сессии, второй — указатель на скомпилированную версию нашего фильтра (это должна быть та же переменная, что и в предыдущей функции pcap_compile() ).

Возможно этот пример поможет вам понять лучше:

Мы можете заметить, что предыдущий пример содержит функцию, о которой мы еще не говорили. pcap_lookupnet() — это функция которая, получая имя устройства возвращает IPv4 сетевой номер и соответствующую сетевую маску (сетевой номер — это адрес IPv4 ANDed с сетевой маской, поэтому он содержит только сетевую часть адреса). Это существенно, потому что нам нужно знать сетевую маску для применения фильтра.

По моему опыту, этот фильтр не работает в некоторых ОС. В моей тестовой среде я обнаружил, что OpenBSD 2.9 c ядром по умолчанию поддерживает этот тип фильтра, но FreeBSD 4.3 с ядром по умолчанию — нет. Ваш опыт может отличаться.

Реальный сниффинг

На текущем этапе мы узнали как определить устройство, приготовить его для захвата трафика, и применить фильтры. Теперь время захватить несколько пакетов. Есть два основных способа захватывать пакеты. Мы можем просто захватить один пакет, или мы можем войти в цикл, который выполняется пока не будет захвачено n пакетов. Мы начнем с того, что покажем, как можно захватить один пакет, и после рассмотрим методы использования циклов. Взглянем на прототип pcap_next() :

Первый аргумент — дескриптор сессии. Второй — указатель на структуру которая содержит общую информацию о пакете, конкретно — время в которое он был захвачен, длина пакета, и длина его определенной части (например, если он фрагментированный). pcap_next() возвращает u_char указатель на пакет, который описан в структуре. Мы поговорим о чтении пакетов позже.

Это демонстрация использования pcap_next() для захвата пакетов:

Второй способ захвата трафика — использование pcap_loop() или pcap_dispatch() (который в свою очередь сам использует pcap_loop() ). Что бы понять использование этих двух функций, нам нужно понять идею функции обратного вызова.

Функция обратного вызова (callback function) не является чем то новым, это обычная вещь в большом количестве API. Концепция, которая стоит за функцией обратного вызова очень проста. Предположим, что у есть программа которая ждет события определенного рода. Просто для примера, предположим что программа ждет нажатие клавиши. Каждый раз, когда пользователь нажимает клавишу, моя программа вызовет функцию, что бы обработать это нажатие клавиши. Это и есть функция обратного вызова. Эти функции используются в PCAP, но вместо вызова их в момент нажатия клавиши, они вызываются тогда, когда PCAP захватывает пакет. Использовать функции обратного вызова можно только в pcap_loop() и pcap_dispatch() которые очень похожи в этом плане. Каждая из них вызывает функцию обратного вызова каждый раз, когда попадется пакет который проходит сквозь фильтр (если конечно фильтр есть. Если нет, то все пакеты, которые были захвачены вызовут функцию обратного вызова).

Прототип pcap_loop() приведен ниже:

Но как можно использовать эту переменную (названную packet) в прототипе? Пакет содержит много атрибутов, так что, как можно предположить, это не строка, а набор структур (для примера, пакет TCP/IP содержит в себе Ethernet заголовок, IP заголовок, TCP заголовок, и наконец, данные). Этот u_char указатель указывает на сериализованную версию этих структур. Что бы начать использовать какую нибудь из них необходимо произвести некоторые интересные преобразования типов.

Первое, мы должны определить сами структуры, прежде чем мы сможем привести данные к ним. Следующая структура используется мной для чтения TCP/IP пакета из Ethernet.

Так как в итоге это все относится к PCAP и нашему загадочному u_char указателю? Эти структуры определяют заголовки, которые предшествуют данным пакета. И как мы в итоге можем разбить пакет? Приготовьтесь увидеть одно из самых практичных использований указателей (для всех новичков в С которые думают что указатели бесполезны говорю: это не так).

Опять же, мы будем предполагать, что мы имеем дело с TCP/IP пакетом Ethernet. Этот же метод применяется к любому пакету. Единственное различие — это тип структуры, которые вы фактически используете. Итак, давайте начнем с определения переменных и определения времени компиляции. Нам нужно будет деконструировать данные пакета.

И теперь мы делаем наше магическое преобразование типов:

Как это работает? Рассмотрим структуру пакета в памяти. u_char указатель — просто переменная содержащая адрес в памяти.

Аналогично, если у нас есть адрес этого заголовка, то адрес структуры после него — это сам адрес плюс длина этого заголовка. Заголовок IP, в отличие от заголовка Ethernet, не имеет фиксированной длины. Его длина указывается как количество 4-байтовых слов по полю заголовка IP. Поскольку это количество 4-байтных слов, оно должно быть умножено на 4, что бы указать размер в байтах. Минимальная длина этого заголовка составляет 20 байтов.

TCP заголовок так же имеет вариативную длину, эта длина указывается как число 4-байтных слов, в поле «смещения данных» заголовка TCP, и его минимальная длина так же равна 20 байтам.

Итак, давайте сделаем диаграмму:

VARIABLELOCATION(in bytes)
sniff_ethernetX
sniff_ipX + SIZE_ETHERNET
sniff_tcpX + SIZE_ETHERNET +
payloadX + SIZE_ETHERNET + +

Итак, на данном этапе мы знаем, как использовать функцию обратного вызова, вызвать ее и получить данные из полученного пакета. Здесь я приложу исходный код готового сниффера. Просто скачайте sniffer.c и попробуйте сами.

Завершение

На данном этапе вы должны быть способны написать сниффер используя PCAP. Вы изучили базовые концепты которые стоят за открытием PCAP сессии, узнали главные детали о сниффиге пакетов, применении фильтров, и использования функций обратного вызова. Теперь пришло время выйти и самостоятельно захватить трафик.

Тим Карстенс 2002. Все права защищены. Распространение и использование, с модификацией и без нее разрешены при соблюдении следующих условий:
Копия должна содержать вышеупомянутое уведомление об авторских правах и этот список условий:
Имя Тима Карстенса не может использоваться для одобрения или продвижения продуктов, полученных из этого документа, без специального предварительного письменного разрешения.

This document is Copyright 2002 Tim Carstens. All rights reserved. Redistribution and use, with or without modification, are permitted provided that the following conditions are met:
Redistribution must retain the above copyright notice and this list of conditions.
The name of Tim Carstens may not be used to endorse or promote products derived from this document without specific prior written permission.
/ Insert ‘wh00t’ for the BSD license here /

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *