Анализатор трафика

  • Автор темы opium star
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

opium star

#1
Здрасте! )

Вот вопрос на счет трафика... Короче делаю анализатор трафика. Как входящий посчитать все понятно и ясно, но вот как быть с исходящим? Подскажите плиз B)

зы: была на этом форуме такая темка, но ее грохнули и я не успел туда заглянуть (

ззы: заранее признателен
 
O

opium star

#3
Прости, но я не понял :( Можно по подробней? :( Я очень начинающий )))

И есче 2 вопроса:

1. че у меня стопорится проект на строке включения сокета в режим прослушивания (ioctlsocket(s, SIO_RCVALL, &flag) ) ???

2. sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr - это строка с примера! Вот зачем все так сложно? Зачем так все запутанно? Я так понял это здесь выбирается ИП адрес хоста, который связывается с прослушивающим сокетом (ИП адрес моей машины). Почему нельзя просто присвоить 0 и принимать пакеты на все ИП? Вот здесь у меня пробел, который хотелось бы заполнить.


Посмотрите плиз исходник и скажите, хоть в правильном направлении я иду?

Код:
void CTraficatorDlg::OnBnClickedStart()
{
iSS = 1;

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;	 // IP-адрес отправителя
ULONG  iph_dest;	 // IP-адрес назначения
} IPHeader;

WSADATA	 wsadata;  
char		name[128]; 
HOSTENT*	phe;	  
SOCKADDR_IN sa;		
IN_ADDR sa1;		
unsigned long		flag = 1; // Flag PROMISC On/Off.

unsigned short lowbyte;
unsigned short hibyte;

char Buffer[0x10000]; //64 Kb

char chInfo[64];
char *sizePack;

CWnd *pStatic = GetDlgItem(IDC_ERRORS);

if (WSAStartup(0x0202, &wsadata)) 
{
MessageBox("WSAStartup error !", NULL, 0);
WSACleanup();
}
else pStatic->SetWindowTextA("Winsock initial OK !");


if (gethostname(chInfo,sizeof(chInfo)))
{
MessageBox("Not local host", 0, 0);
exit(1);
}
else
{	
pStatic->SetWindowTextA(chInfo);
}

phe = gethostbyname( name );

s = socket(AF_INET, SOCK_RAW, IPPROTO_IP );
if (s == INVALID_SOCKET) 
{
MessageBox("Error create socket", 0, 0);
exit(1);
}

sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr*)phe->h_addr_list[0])->s_addr;

if (bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)))
{
MessageBox("Error bind", 0, 0);
exit(1);
}
else pStatic->SetWindowTextA("Bind OK !!!");

// Enable promiscuous mode.
ioctlsocket(s, SIO_RCVALL, &flag);

pStatic->SetWindowTextA("Promiscuous mode is enable!!!");

while (iSS == 1)
{
int count;
count = recv( s, Buffer, sizeof(Buffer), 0 );

if( count >= sizeof(IPHeader) )
{
IPHeader* hdr = (IPHeader *)Buffer;

lowbyte = hdr->iph_length>>8;
hibyte = hdr->iph_length<<8;
hibyte = hibyte + lowbyte;
sizePack = itoa(hibyte,"",10);
pStatic->SetWindowTextA(sizePack);
}
}
}
 
Статус
Закрыто для дальнейших ответов.