Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Как перехватывать пакеты из сети?   Найти похожие ветки 

 
Melcor   (2003-07-03 08:41) [0]

Извините за ламерский вопрос (или не ламерский 8-\ ) Но как можно перехватывать пакеты идущие по сети?


 
Polevi ©   (2003-07-03 09:55) [1]

зачем


 
SergeyKatruk ©   (2003-07-03 13:35) [2]


Хотя бы для подсчета трафика и выявления наиболее нагруженого узла( например кто выделенку занял, роутер грузит - наболело :( )


 
Melcor   (2003-07-07 05:10) [3]

Так идеи есть?
Помогите плз.


 
Evgeny V ©   (2003-07-07 05:23) [4]

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <winsock2.h>
#include <mstcpip.h>
#define MAX_PACKET_SIZE 0x10000
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef struct _IPHeader
{
unsigned char verlen; // версия и длина заголовка
unsigned char tos; // тип сервиса
unsigned short length; // длина всего пакета
unsigned short id; // Id
unsigned short offset; // флаги и смещения
unsigned char ttl; // время жизни
unsigned char protocol; // протокол
unsigned short xsum; // контрольная сумма
unsigned long src; // IP-адрес отправителя
unsigned long dest; // IP-адрес назначения
}IPHeader;

static BYTE Buffer[MAX_PACKET_SIZE];
WSADATA wsadata; // Инициализация WinSock.
SOCKET s; // Cлущающий сокет.
char name[128]; // Имя хоста (компьютера).
HOSTENT* phe; // Информация о хосте.
SOCKADDR_IN sa; // Адрес хоста
unsigned long flag = 1; // Флаг PROMISC Вкл/выкл.
bool ens;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s1;
if(Button1->Tag==1)
{
Button1->Tag=0;
flag=0;
ioctlsocket(s, SIO_RCVALL, &flag);
closesocket( s );
WSACleanup();
ens=false;
Button1->Caption="Start";
return;
}
Memo1->Lines->Clear();
Button1->Tag=1;
Button1->Caption="Stop";
ens=true;
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));
s1.sprintf("%s",name);
Memo1->Lines->Add(s1);
s1="";
Memo1->Lines->Add(s1);
// Включение promiscuous mode.
flag=1;
ioctlsocket(s, SIO_RCVALL, &flag);

// Приём IP-пакетов.
while( ens )
{
int count;
count = recv( s, Buffer, sizeof(Buffer), 0 );
// обработка IP-пакета
if( count >= sizeof(IPHeader) )
{
IPHeader* hdr = (IPHeader *)Buffer;
s1.sprintf("ver=%X tos=%X len=%X id=%X off=%X ttl=%X prot=%X xsum=%X src=%X dst=%X",
hdr->verlen,hdr->tos,hdr->length,hdr->id,hdr->offset,
hdr->ttl,hdr->protocol,hdr->xsum,hdr->src,hdr->dest);
( s1) #include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <winsock2.h>
#include <mstcpip.h>
#define MAX_PACKET_SIZE 0x10000
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef struct _IPHeader
{
unsigned char verlen; // версия и длина заголовка
unsigned char tos; // тип сервиса
unsigned short length; // длина всего пакета
unsigned short id; // Id
unsigned short offset; // флаги и смещения
unsigned char ttl; // время жизни
unsigned char protocol; // протокол
unsigned short xsum; // контрольная сумма
unsigned long src; // IP-адрес отправителя
unsigned long dest; // IP-адрес назначения
}IPHeader;

static BYTE Buffer[MAX_PACKET_SIZE];
WSADATA wsadata; // Инициализация WinSock.
SOCKET s; // Cлущающий сокет.
char name[128]; // Имя хоста (компьютера).
HOSTENT* phe; // Информация о хосте.
SOCKADDR_IN sa; // Адрес хоста
unsigned long flag = 1; // Флаг PROMISC Вкл/выкл.
bool ens;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s1;
if(Button1->Tag==1)
{
Button1->Tag=0;
flag=0;
ioctlsocket(s, SIO_RCVALL, &flag);
closesocket( s );
WSACleanup();
ens=false;
Button1->Caption="Start";
return;
}
Memo1->Lines->Clear();
Button1->Tag=1;
Button1->Caption="Stop";
ens=true;
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));
s1.sprintf("%s",name);
Memo1->Lines->Add(s1);
s1="";
Memo1->Lines->Add(s1);
// Включение promiscuous mode.
flag=1;
ioctlsocket(s, SIO_RCVALL, &flag);

// Приём IP-пакетов.
while( ens )
{
int count;
count = recv( s, Buffer, sizeof(Buffer), 0 );
// обработка IP-пакета
if( count >= sizeof(IPHeader) )
{
IPHeader* hdr = (IPHeader *)Buffer;
s1.sprintf("ver=%X tos=%X len=%X id=%X off=%X ttl=%X prot=%X xsum=%X src=%X dst=%X",
hdr->verlen,hdr->tos,hdr->length,hdr->id,hdr->offset,
hdr->ttl,hdr->protocol,hdr->xsum,hdr->src,hdr->dest);
Memo1->Lines->Add(s1);
Application->ProcessMessages();
//что-то делаем с пакетом...
}
}

}
Кратко, проверил, у меня ловит, код на с++ bulder:-))


 
Evgeny V ©   (2003-07-07 05:54) [5]

Пытался найти ссылку на статью откуда все это скатал, не получилось, поищи сам на королевстве дельфи

Сниффер: щит и меч.

Автор: Константин Максимов
Опубликовано: 10.10.2002
Версия текста: 1.0
Принцип работы сниффера.

Основы передачи данных в сети Ethernet.

Структура программы для прослушивания сети.



 
Melcor   (2003-07-14 02:28) [6]

Спасиба! Тока у меня еще (немного по-пожже) возникнет вопрос. Как эти пакеты посылать. Надо послать тот же пакет который пришел (точь в точь такой)


 
panov ©   (2003-07-14 03:11) [7]

Спасиба! Тока у меня еще (немного по-пожже) возникнет вопрос. Как эти пакеты посылать. Надо послать тот же пакет который пришел (точь в точь такой)

А вот это для чего?


 
Melcor   (2003-07-18 04:49) [8]

Для анализа и отправки дальше.... например. И есл не секрет, есть ли какие либо компоненты для отправки (и вообще работы с сетями, кроме стандартных)

Заранее благодарен!



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-58632
Bezpal
2003-09-05 13:21
2003.09.18
Как сделать круглую или треугольную форму или форму - звезду


14-58870
napil
2003-08-29 09:46
2003.09.18
mail


14-58911
Карлсон
2003-08-28 19:17
2003.09.18
лето подходит к концу.


14-58872
iNew
2003-09-01 09:40
2003.09.18
Вопрос по SoftIce 4.05


7-58939
Ricky-Ticky-Tavy
2003-07-06 13:08
2003.09.18
Надо запусть прогу перед тем как запустится WinME