Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502

Не работает сниффер на С++

14.11.2016, 20:56. Показов 3165. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пытаюсь разобраться с написанием сниффера.
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <process.h>
 
#define SIO_RCVALL         0x98000001
using namespace std;
 
 
typedef struct IPHeader
{
    unsigned char  ip_header_len:4;  // 4-bit header length (in 32-bit words) normally=5 (Means 20 Bytes may be 24 also)
    unsigned char  ip_version   :4;  // 4-bit IPv4 version
    unsigned char  ip_tos;           // IP type of service
    unsigned short ip_total_length;  // Total length
    unsigned short ip_id;            // Unique identifier 
    unsigned char  ip_frag_offset   :5;        // Fragment offset field
    unsigned char  ip_more_fragment :1;
    unsigned char  ip_dont_fragment :1;
    unsigned char  ip_reserved_zero :1;
    
    unsigned char  ip_frag_offset1;    //fragment offset
    
    unsigned char  ip_ttl;           // Time to live
    unsigned char  ip_protocol;      // Protocol(TCP,UDP etc)
    unsigned short ip_checksum;      // IP checksum
    unsigned int   ip_srcaddr;       // Source address
    unsigned int   ip_destaddr;      // Source address
};
 
 
int main(int argc, char *argv[])
{
    cout<<"Start...\n";
    WSAData WSData;
    WSAStartup(0x202,&WSData);
    WSADATA     wsadata;  
    SOCKET      s;         
    char        name[128];
    HOSTENT*    phe;      
    SOCKADDR_IN sa;        
    IN_ADDR sa1;        
    unsigned long        flag = 1;  
    //создаем сокет
    s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
    //получаем имя нашего локального хоста
    gethostname(name, sizeof(name));
    phe = gethostbyname( name );
    ZeroMemory( &sa, sizeof(sa) );
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
    //привязать локальный адрес к нашему сокету
    bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
    
    //включение режима promiscuous
    ioctlsocket(s, SIO_RCVALL, &flag);
    
 
    
    while( 1 )
    {
        int count=0;
        char Buffer[1024];
        count = recv( s, Buffer, sizeof(Buffer), 0 );
 
        if( count >= sizeof(IPHeader) )
        {
            IPHeader* hdr = (IPHeader *)Buffer;
      
            sa1.s_addr = hdr->ip_srcaddr;
            cout<<"Src:";
            printf(inet_ntoa(sa1));
            cout<<endl;
            cout<<"Dest:";
            sa1.s_addr = hdr->ip_destaddr;
            printf(inet_ntoa(sa1));
            cout<<endl;
            if(hdr->ip_protocol == IPPROTO_TCP) printf("TCP ");
            if(hdr->ip_protocol == IPPROTO_UDP) printf("UDP ");
 
        }
    }
 
 
    WSACleanup ();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вроде ничего сложного не должно быть. В цикле пытаюсь ловить все входящие пакеты и выводить информацию по ним.
Но при запуске получаю следующие ( рис.1).

Подключил Wireshark, там пакеты поступают.

В чем может быть проблема? Помогите, пожалуйста . Заранее спасибо!
Миниатюры
Не работает сниффер на С++   Не работает сниффер на С++  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2016, 20:56
Ответы с готовыми решениями:

Как работает сниффер
Как работает сниффер. Обычно для работы с COM- портом используется API-функция CreateFile, которая позволяет получить монопольный...

Неправильно работает I2C сниффер
Доброго времени суток всем! Нужна помощь. Понадобился мне I2C сниффер, собрал его по http://we.iosyitistromyss.ru/AVR/sniffe ......

Сниффер
Привет форумчане! Вкратце опишу суть вопроса. Нужно написать прогу которая будет ловить приходящие пакеты с сервера и исходя из данных в...

5
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
14.11.2016, 21:43  [ТС]
Немного изменен текст:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <process.h>
 
using namespace std;
 
 
#define MAX_PACKET_SIZE    0x10000
#define SIO_RCVALL         0x98000001
 
char Buffer[MAX_PACKET_SIZE]; // 64 Kb
 
 
 
typedef struct IPHeader {
  UCHAR   iph_verlen;   
  UCHAR   iph_tos;      
  USHORT  iph_length;   
  USHORT  iph_id;      
  USHORT  iph_offset;   
  UCHAR   iph_ttl;      
  UCHAR   iph_protocol; 
  USHORT  iph_xsum;     
  ULONG   iph_src;      
  ULONG   iph_dest;    
} IPHeader;
 
char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;
 
void main()
{
  WSADATA     wsadata;   
  SOCKET      s;         
  char        name[128]; 
  HOSTENT*    phe;       
  SOCKADDR_IN sa;       
  IN_ADDR sa1;       
  unsigned long        flag = 1;  // Флаг PROMISC Вкл/выкл.
 
  // инициализация
  WSAStartup(MAKEWORD(2,2), &wsadata);
  s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
  gethostname(name, sizeof(name));
  phe = gethostbyname( name );
  ZeroMemory( &sa, sizeof(sa) );
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
  bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
 
  ioctlsocket(s, SIO_RCVALL, &flag);
 
  while(1)
  {
    int count;
    count = recv( s, Buffer, sizeof(Buffer), 0 );
    if( count >= sizeof(IPHeader) )
    {
      IPHeader* hdr = (IPHeader *)Buffer;
            sa1.s_addr = hdr->iph_src;
            cout<<"Src:";
            printf(inet_ntoa(sa1));
            cout<<endl;
            cout<<"Dest:";
            sa1.s_addr = hdr->iph_dest;
            printf(inet_ntoa(sa1));
            cout<<endl;
            if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP ");
            if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP ");
    printf("\n");
    Sleep(1000);
    }
  }
  closesocket( s );
  WSACleanup();
}
Теперь постоянно выдает 0.0.0.0
0
 Аватар для SmilingDog
3 / 3 / 2
Регистрация: 13.02.2015
Сообщений: 43
15.11.2016, 19:45
Лучший ответ Сообщение было отмечено NNN7 как решение

Решение

Я Вам не скажу за всю Одессу . Но на моей семерке второй код работает .
Возможно у тебя он слушает неправильный интерфейс . Или , возможно , это запретно в другой версии windows .
Миниатюры
Не работает сниффер на С++  
1
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
15.11.2016, 19:56  [ТС]
Странно. А Вы как-то предварительно генерировали трафик?
0
 Аватар для SmilingDog
3 / 3 / 2
Регистрация: 13.02.2015
Сообщений: 43
15.11.2016, 20:09
Лучший ответ Сообщение было отмечено NNN7 как решение

Решение

Ноуп . Просто запустил код . Трафик сам по себе ходит .
Проверьте для начала , есть ли у Вас вообще поддержка SOCK_RAW
https://msdn.microsoft.com/ru-... s.85).aspx
netsh winsock show catalog

И вообще что возвращает
socket( AF_INET, SOCK_RAW, IPPROTO_IP )
Может там изначально ошибка .
1
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
15.11.2016, 20:25  [ТС]
Да, там , к сожалению, выявилась ошибка 10013 - отказано в доступе (
еще более усложнилась задача

Добавлено через 8 минут
Заработало) Нужно было всего лишь запускать под Администратором)
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2016, 20:25
Помогаю со студенческими работами здесь

Сниффер
Пытаюсь научиться работать с сокетами. Пишу этакий мини-сниффер. Полазил по примерам, все дела.. Более-менее что-то понятно. Не забегая...

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

Сниффер си/си++/си#
Помогите пожалуйста написать &quot;простенький&quot; сниффер на языке си/си++/си#!

Сниффер
У кого нибудь есть сниффер например как nas-ru Или обьясните пожалуйста как написать

Сниффер
Всем привет! Собственно интересует вопрос как узнать какие параметры отправляются на сайт?? Слышал что это делается при помощи сниффера и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru