🗊Презентация Основные функции библиотеки pcap

Категория: Образование
Нажмите для полного просмотра!
Основные функции библиотеки pcap, слайд №1Основные функции библиотеки pcap, слайд №2Основные функции библиотеки pcap, слайд №3Основные функции библиотеки pcap, слайд №4Основные функции библиотеки pcap, слайд №5Основные функции библиотеки pcap, слайд №6Основные функции библиотеки pcap, слайд №7Основные функции библиотеки pcap, слайд №8Основные функции библиотеки pcap, слайд №9Основные функции библиотеки pcap, слайд №10Основные функции библиотеки pcap, слайд №11Основные функции библиотеки pcap, слайд №12Основные функции библиотеки pcap, слайд №13Основные функции библиотеки pcap, слайд №14Основные функции библиотеки pcap, слайд №15Основные функции библиотеки pcap, слайд №16

Вы можете ознакомиться и скачать презентацию на тему Основные функции библиотеки pcap. Доклад-сообщение содержит 16 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Основные функции библиотеки pcap, слайд №1
Описание слайда:

Слайд 2


Основные функции библиотеки pcap, слайд №2
Описание слайда:

Слайд 3


Основные функции библиотеки pcap, слайд №3
Описание слайда:

Слайд 4


Основные функции библиотеки pcap, слайд №4
Описание слайда:

Слайд 5


Основные функции библиотеки pcap, слайд №5
Описание слайда:

Слайд 6





int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) 

Используется для занесения в структуру bpf_program строки, заданной 3им аргументом, в которой 
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) 

Используется для занесения в структуру bpf_program строки, заданной 3им аргументом, в которой 
записано регулярное выражение в стиле bpf (Berkley Packet Filter). Данная возможность позволяет достаточно легко задавать свои правила фильтрации захватываемых пакетов, без того, чтобы писать самому сложные условия обработчика пакетов. 
Пример третьего аргумента на следующем слайде
Четвертый аргументом в функции выглядит так: 1, если оптимизировать код, 0, если нет. Следует добавить, что при оптимизации программа ест гараздо больше ресурсов.
Описание слайда:
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) Используется для занесения в структуру bpf_program строки, заданной 3им аргументом, в которой int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) Используется для занесения в структуру bpf_program строки, заданной 3им аргументом, в которой записано регулярное выражение в стиле bpf (Berkley Packet Filter). Данная возможность позволяет достаточно легко задавать свои правила фильтрации захватываемых пакетов, без того, чтобы писать самому сложные условия обработчика пакетов. Пример третьего аргумента на следующем слайде Четвертый аргументом в функции выглядит так: 1, если оптимизировать код, 0, если нет. Следует добавить, что при оптимизации программа ест гараздо больше ресурсов.

Слайд 7





Например нам нужно, чтобы в нашу программу попадали только пакеты по протоколу TCP, идущие на порт 21: 

ip proto TCP and port 21 

Или например я хочу получать только пакеты с адреса 192.168.0.1 на адрес 192.168.0.2 по протоколу icmp 

src 192.168.0.1 and dst 192.168.0.2 and ip proto ICMP 

Хотим видеть весь траффик, исключая TCP-траффик на 22 порт: proto TCP and not port 22 

Показывать пакеты по протоколу ICMP или UDP пакеты на порт 31337: ip proto ICMP or ip proto UDP and port 31337 

Пакеты идущие с хоста www.gov.ru: 
Например нам нужно, чтобы в нашу программу попадали только пакеты по протоколу TCP, идущие на порт 21: 

ip proto TCP and port 21 

Или например я хочу получать только пакеты с адреса 192.168.0.1 на адрес 192.168.0.2 по протоколу icmp 

src 192.168.0.1 and dst 192.168.0.2 and ip proto ICMP 

Хотим видеть весь траффик, исключая TCP-траффик на 22 порт: proto TCP and not port 22 

Показывать пакеты по протоколу ICMP или UDP пакеты на порт 31337: ip proto ICMP or ip proto UDP and port 31337 

Пакеты идущие с хоста www.gov.ru: 
src host www.gov.ru 

Для получения более подробной информации по регулярным выражениям bpf, читайте tcpdump(1). 
/* встриваем фильтр на IPv4 TCP порт 21 */
  if ((pcap_compile(fd, &bpf_fil, "ip proto TCP and port 21", 1, mask)) < 0)
  {
     pcap_perror(fd, "pcap_compile ");
     pcap_close(fd);
     exit(0);
  }
Описание слайда:
Например нам нужно, чтобы в нашу программу попадали только пакеты по протоколу TCP, идущие на порт 21: ip proto TCP and port 21 Или например я хочу получать только пакеты с адреса 192.168.0.1 на адрес 192.168.0.2 по протоколу icmp src 192.168.0.1 and dst 192.168.0.2 and ip proto ICMP Хотим видеть весь траффик, исключая TCP-траффик на 22 порт: proto TCP and not port 22 Показывать пакеты по протоколу ICMP или UDP пакеты на порт 31337: ip proto ICMP or ip proto UDP and port 31337 Пакеты идущие с хоста www.gov.ru: Например нам нужно, чтобы в нашу программу попадали только пакеты по протоколу TCP, идущие на порт 21: ip proto TCP and port 21 Или например я хочу получать только пакеты с адреса 192.168.0.1 на адрес 192.168.0.2 по протоколу icmp src 192.168.0.1 and dst 192.168.0.2 and ip proto ICMP Хотим видеть весь траффик, исключая TCP-траффик на 22 порт: proto TCP and not port 22 Показывать пакеты по протоколу ICMP или UDP пакеты на порт 31337: ip proto ICMP or ip proto UDP and port 31337 Пакеты идущие с хоста www.gov.ru: src host www.gov.ru Для получения более подробной информации по регулярным выражениям bpf, читайте tcpdump(1). /* встриваем фильтр на IPv4 TCP порт 21 */ if ((pcap_compile(fd, &bpf_fil, "ip proto TCP and port 21", 1, mask)) < 0) { pcap_perror(fd, "pcap_compile "); pcap_close(fd); exit(0); }

Слайд 8





int pcap_setfilter(pcap_t *p, struct bpf_program *fp) 

Данная функция используется для применения фильтра, встроенного функцией pcap_compile в структуру bpf_program. 
Функция возвращает -1 при ошибке, и 0 при удачном выполнении функции. 

int pcap_setfilter(pcap_t *p, struct bpf_program *fp) 

Данная функция используется для применения фильтра, встроенного функцией pcap_compile в структуру bpf_program. 
Функция возвращает -1 при ошибке, и 0 при удачном выполнении функции. 

struct  bpf_program bpf_fil;   /* структура для фильтра */
 /* применяем фильтр */
  if ((pcap_setfilter(fd, &bpf_fil)) < 0)
  {
     pcap_perror(fd, "pcap_setfilter ");
     pcap_close(fd);
     exit(0);
  }

char *pcap_geterr(pcap_t *p) 

Вернёт строку ошибки и будет использована для получения информации об ошибках, в таких функциях как: 

pcap_setfilter(), pcap_compile(), pcap_loop() и др. Первым аргументом прописывается дескриптор открытого интерфейса.
Описание слайда:
int pcap_setfilter(pcap_t *p, struct bpf_program *fp) Данная функция используется для применения фильтра, встроенного функцией pcap_compile в структуру bpf_program. Функция возвращает -1 при ошибке, и 0 при удачном выполнении функции. int pcap_setfilter(pcap_t *p, struct bpf_program *fp) Данная функция используется для применения фильтра, встроенного функцией pcap_compile в структуру bpf_program. Функция возвращает -1 при ошибке, и 0 при удачном выполнении функции. struct bpf_program bpf_fil; /* структура для фильтра */ /* применяем фильтр */ if ((pcap_setfilter(fd, &bpf_fil)) < 0) { pcap_perror(fd, "pcap_setfilter "); pcap_close(fd); exit(0); } char *pcap_geterr(pcap_t *p) Вернёт строку ошибки и будет использована для получения информации об ошибках, в таких функциях как: pcap_setfilter(), pcap_compile(), pcap_loop() и др. Первым аргументом прописывается дескриптор открытого интерфейса.

Слайд 9


Основные функции библиотеки pcap, слайд №9
Описание слайда:

Слайд 10





int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) 
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) 

Третий аргумент - имя callback-функции (только имя, без скобок) 
Прототип нашей callback-функции должен быть таким: 
void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); 

Первое - функция возвращает пустое значение (void). 
Первый аргумент совпадает с последним аргументом pcap_loop(). 
Второй аргумент - заголовок pcap, который содержит информацию о том, когда был перехвачен пакет, его размер и т.д. 
Последний аргумент callback-функции содержит, собственно, весь пакет, перехваченный с помощью pcap_loop(). 
void handler(char *, struct pcap_pkthdr *, u_char *); /* обработчик пакетов */
  process = (pcap_handler) handler; // получаем указатель на функцию обработчик
  if (pcap_loop(fd, -1, process, NULL))
 {
    pcap_perror(fd, "pcap_loop ");
    pcap_close(fd);
    exit(0);
  }
Описание слайда:
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) Третий аргумент - имя callback-функции (только имя, без скобок) Прототип нашей callback-функции должен быть таким: void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); Первое - функция возвращает пустое значение (void). Первый аргумент совпадает с последним аргументом pcap_loop(). Второй аргумент - заголовок pcap, который содержит информацию о том, когда был перехвачен пакет, его размер и т.д. Последний аргумент callback-функции содержит, собственно, весь пакет, перехваченный с помощью pcap_loop(). void handler(char *, struct pcap_pkthdr *, u_char *); /* обработчик пакетов */ process = (pcap_handler) handler; // получаем указатель на функцию обработчик if (pcap_loop(fd, -1, process, NULL)) { pcap_perror(fd, "pcap_loop "); pcap_close(fd); exit(0); }

Слайд 11





#include <stdio.h>
#include <stdio.h>
#include <pcap.h>

  #define MAXLEN 1500
  #define TIMEOUT 500
  #define IP_H sizeof(struct ip)
  #define ETH_H 14
  #define TCP_H sizeof(struct tcphdr)

pcap_t *fd;

int main(int argc, char **argv)
{
  struct bpf_program bpf_fil;
  char err[PCAP_ERRBUF_SIZE];
  char *device;
  bpf_u_int32 net, mask;
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <pcap.h> #define MAXLEN 1500 #define TIMEOUT 500 #define IP_H sizeof(struct ip) #define ETH_H 14 #define TCP_H sizeof(struct tcphdr) pcap_t *fd; int main(int argc, char **argv) { struct bpf_program bpf_fil; char err[PCAP_ERRBUF_SIZE]; char *device; bpf_u_int32 net, mask;

Слайд 12





device=pcap_lookupdev(err);
device=pcap_lookupdev(err);
 printf("Using device: %s\n", device);

 if((fd=pcap_open_live(device, MAXLEN, 1, TIMEOUT, err))==NULL){
         printf("Cant open device %s\n",err);
         exit(0);
         }

  if((pcap_lookupnet(device,&net,&mask, err))<0)
    { 
      printf("pcap_lookupnet error: %s\n", err);
      pcap_close(fd);
      exit(0); 
     } 
    printf("Net number: %s\n", inet_ntoa(net));
    printf("Mask: %s\n", inet_ntoa(mask)); 
  return 0;
}
Описание слайда:
device=pcap_lookupdev(err); device=pcap_lookupdev(err); printf("Using device: %s\n", device); if((fd=pcap_open_live(device, MAXLEN, 1, TIMEOUT, err))==NULL){ printf("Cant open device %s\n",err); exit(0); } if((pcap_lookupnet(device,&net,&mask, err))<0) { printf("pcap_lookupnet error: %s\n", err); pcap_close(fd); exit(0); } printf("Net number: %s\n", inet_ntoa(net)); printf("Mask: %s\n", inet_ntoa(mask)); return 0; }

Слайд 13





#include <pcap.h>
#include <pcap.h>
...
pcap_t *handle;       		         // хэндл сессии
char dev[] = "eth0";                  // интерфейс, на котором мы будем слушать
char errbuf[PCAP_ERRBUF_SIZE];    // Строка с ошибкой
struct bpf_program filter;       // Скомпилированное выражение для фильтра
сhar filter_app[] = "port 23";                 // Выражение для фильтра
bpf_u_int32 mask;                                // Сетевая маска нашего интерфейса
bpf_u_int32 net;                                    // IP адрес нашего интерфейса
pcap_lookupnet(dev, &net, &mask, errbuf);
handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);
pcap_compile(handle, &filter, filter_app, 0, net);
pcap_setfilter(handle, &filter);
Описание слайда:
#include <pcap.h> #include <pcap.h> ... pcap_t *handle; // хэндл сессии char dev[] = "eth0"; // интерфейс, на котором мы будем слушать char errbuf[PCAP_ERRBUF_SIZE]; // Строка с ошибкой struct bpf_program filter; // Скомпилированное выражение для фильтра сhar filter_app[] = "port 23"; // Выражение для фильтра bpf_u_int32 mask; // Сетевая маска нашего интерфейса bpf_u_int32 net; // IP адрес нашего интерфейса pcap_lookupnet(dev, &net, &mask, errbuf); handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf); pcap_compile(handle, &filter, filter_app, 0, net); pcap_setfilter(handle, &filter);

Слайд 14





#include <pcap.h> 
#include <pcap.h> 
#include <stdio.h> 
int main() 
{ 
pcap_t *handle;                                    // хэндл сессии 
char *dev;                                             // устройство, на котором будем                   
                                                               // перехватывать траффик 
char errbuf[PCAP_ERRBUF_SIZE];   // строка с описанием ошибки
struct bpf_program filter;                     // скомпилированный фильтр 
char filter_app[] = "port 23";                 // фильтр 
bpf_u_int32 mask;                                 // наша сетевая маска
bpf_u_int32 net;                                     // наш ip адрес 
struct pcap_pkthdr header;                   // заголовок пакета,  
                                                                  // который заполнит pcap 
const u_char *packet;                            // сам пакет
Описание слайда:
#include <pcap.h> #include <pcap.h> #include <stdio.h> int main() { pcap_t *handle; // хэндл сессии char *dev; // устройство, на котором будем // перехватывать траффик char errbuf[PCAP_ERRBUF_SIZE]; // строка с описанием ошибки struct bpf_program filter; // скомпилированный фильтр char filter_app[] = "port 23"; // фильтр bpf_u_int32 mask; // наша сетевая маска bpf_u_int32 net; // наш ip адрес struct pcap_pkthdr header; // заголовок пакета, // который заполнит pcap const u_char *packet; // сам пакет

Слайд 15





// определим интерфейс 
// определим интерфейс 
dev = pcap_lookupdev(errbuf);

 // получим сетевой адрес и маску интерфейса 
pcap_lookupnet(dev, &net, &mask, errbuf); 

// откроем сессию перехвата в promiscuous режиме 
handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);

 // скомпилируем и применим пакетный фильтр 
pcap_compile(handle, &filter, filter_app, 0, net); 
pcap_setfilter(handle, &filter); 
// перехватим пакет 
packet = pcap_next(handle, &header); 
// выведем его длину в консоль 
printf("Jacked a packet with length of [%d]\n", header.len); 
// закроем сессию 
pcap_close(handle); 
return(0); 
}
Описание слайда:
// определим интерфейс // определим интерфейс dev = pcap_lookupdev(errbuf); // получим сетевой адрес и маску интерфейса pcap_lookupnet(dev, &net, &mask, errbuf); // откроем сессию перехвата в promiscuous режиме handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf); // скомпилируем и применим пакетный фильтр pcap_compile(handle, &filter, filter_app, 0, net); pcap_setfilter(handle, &filter); // перехватим пакет packet = pcap_next(handle, &header); // выведем его длину в консоль printf("Jacked a packet with length of [%d]\n", header.len); // закроем сессию pcap_close(handle); return(0); }

Слайд 16


Основные функции библиотеки pcap, слайд №16
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию