Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2011, 11:54   #1
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию просмотр содержимого udp пакета

приветствую! задача собственно следующая: нужно поймать содержимое всех udp пакетов от определённого порта. как отфильтровать пакеты от других, получить длину, назначение и тд я знаю... а вот как посмотреть содержимое? заранее спасибо за ответы.
frommars вне форума Ответить с цитированием
Старый 08.08.2011, 12:12   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
а вот как посмотреть содержимое?
Получили пакет, прочитали заголовок удп, получили смещение данных и размер, читайте байты... все
p51x вне форума Ответить с цитированием
Старый 08.08.2011, 12:38   #3
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Получили пакет, прочитали заголовок удп, получили смещение данных и размер, читайте байты... все
не могли бы подробнее на вот этом коде?
PHP код:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#define MAX_PACKET_SIZE    0x10000
#define SIO_RCVALL         0x98000001

char Buffer[MAX_PACKET_SIZE];
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

  
WSAStartup(MAKEWORD(2,2), &wsadata);
  
socketAF_INETSOCK_RAWIPPROTO_IP );
  
gethostname(namesizeof(name));
  
phe gethostbynamename );
  
ZeroMemory( &sasizeof(sa) );
  
sa.sin_family AF_INET;
  
sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
  
bind(s, (SOCKADDR *)&sasizeof(SOCKADDR));
  
ioctlsocket(sSIO_RCVALL, &flag);
  
bool wrk true;
  while(
wrk)
  {
    
int count;
    
count recvsBuffersizeof(Buffer), );
    if( 
count >= sizeof(IPHeader) )
    {
      
IPHeaderhdr = (IPHeader *)Buffer;
      if(
hdr->iph_protocol == IPPROTO_UDP)
    {
    
strcpy(src,"Пакет: ");
    
CharToOem(src,dest);
    
printf(dest);
    
printf("From ");
    
sa1.s_addr hdr->iph_src;
    
printf(inet_ntoa(sa1));
    
printf(" To ");
    
sa1.s_addr hdr->iph_dest;
    
printf(inet_ntoa(sa1));
    
printf(" Prot: ");
    
printf("UDP ");
    
printf("Size: ");
    
lowbyte hdr->iph_length>>8;
    
hibyte hdr->iph_length<<8;
    
hibyte hibyte lowbyte;
    
printf("%u",hibyte);
    
printf(" TTL:%u",hdr->iph_ttl);
    
printf("\n");
    }
    }
  }

  
closesocket);
  
WSACleanup();

тут как видно всё слушается и разбивается на TCP и UDP, в связи с чем появляется ещё один вопрос: а как выбрать определённый порт?
winpcap не предлагайте использовать - нельзя.

взято с http://www.rsdn.ru/article/net/sniffer.xml

Последний раз редактировалось frommars; 08.08.2011 в 13:09.
frommars вне форума Ответить с цитированием
Старый 08.08.2011, 13:58   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://ru.wikipedia.org/wiki/UDP

Почитайте... Там есть описание структуры пакета.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение пакета Alexandr555 Работа с сетью в Delphi 2 26.03.2011 00:47
фрагментация IP пакета... Женя_88 C/C++ Сетевое программирование 8 15.11.2010 23:57
Полином для расчёта crc16 udp пакета. ATAMAN200 Общие вопросы C/C++ 4 04.10.2010 10:00
Запретить просмотр содержимого папки AidarBik Общие вопросы Delphi 2 19.12.2007 17:57