Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-58718
AndyGee
2003-09-08 08:40
2003.09.18
Запуск внешнего приложения и его мониторинг


1-58681
mfender
2003-09-04 17:12
2003.09.18
Как программе указать, потомком чего является компонент.


14-58841
TButton
2003-08-31 19:34
2003.09.18
IE


14-58896
KaPaT
2003-08-28 16:32
2003.09.18
Бортовые компьютеры автомобилей (BMW, Mercedes и т.д.)


1-58774
Я
2003-09-05 16:19
2003.09.18
Как определить, выходной сегодня или будний день?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский