SITE LOGO
Среда, 2024-05-01, 08:04:13
Меню сайта
Категории каталога
Мои статьи [4]
Наш опрос
Оцените мой сайт

[ Результаты · Архив опросов ]

Всего ответов: 206
Начало » Статьи » Мои статьи

Снифер на Дельфи
Сниффер - это программа которая нужна любому хакеру также как и сканер портов и т.п. Я думаю что у тебя уже есть пара программ с таким названием . Но настоящий хакер или программист должен сам создать своего боевого друга . Именно этим мы сейчас и займемся ...

Сниффер , что это ?

Cниффер – это программа которая принимает и сохраняет пакеты из сети . Если ты не понял то я перевожу . Эта программка создана для получения информации . Она чем-то напоминает трояна.

Смысл работы .

Сидение в чате , заливка патчей и т.п. - это работа с сетью т.е. обмен информацией. Она пакуется в пакеты и может (если надо ) фрагментироваться . К пакетам добавляется заголовок который содержит сведения о его доставке и отправляется по какому-либо IP адресу. Я думаю что ты понял что делает эта программа и поэтому можно начинать кодить!

Сетевые функции.

function PacketGetAdapterNames(
pAdapterDescs: PChar;
nAdapterDescs: USLONG;
pnAdapterDescsMax: PUINT
): BOOL; stdcall;
В этой функции описывается список доступных сетевых адаптеров. Если все получается хорошо то функция возвращает True . А если ничего не получается то естественно False .
PAdapterDescs - после того как эта функция будет вызвана сюда будут записаны имена и адреса доступных сетевых адаптеров.
NAdapterDescs – тут указывается длина массива .
pnAdapterDescsMax – а здесь записывается сколько всего адаптеров в компьютере

function PacketOpenAdapter(
AdapterName: LPSTR
): DWORD; stdcall;

Открывается инсталерованный адаптер. В качестве параметра нужно указать имя которое ты получил после вызова функции PacketGetAdapterNames .

function PacketAllocatePacket(
AdapterObject: LPADAPTER
): DWORD; stdcall;

Эта функция занимается распределением пакета. AdapterObject – указатель на адаптер , который ты получил после функции PacketAllocatePacket.

procedure PacketFreePacket(
plpPacket: LPPACKET
); stdcall;

Функция уничтожает пакет .

procedure PacketInitPacket(
plpPacket: LPPACKET;
Buffer: PChar;
Length: USLONG); stdcall;

Связывает с пакетом буфер обмена под получаемые данные.
PlpPacket - пакет созданный с помощью функции PacketAllocatePacket
Buffer- буфер обмена.
Length- длина буфера .
function PacketReceivePacket(
AdapterObject: LPADAPTER;
plpPacket: LPPACKET;
Sync: Boolean;
BytesReceived: PULONG
): Boolean; stdcall;

Это самое интересное - получение пакета.
AdapterObject - указатель на адаптер.
PlpPacket - полученный пакет .
Sync - режим получения пакета .
BytesReceived - сколько байт получили .
Если ты будешь использовать асинхронный режим, то тебе придется еще пользоваться функцией PacketWaitPacket для ожидания пакета. Для нас это лишнее усложнение задачи, поэтому мы эти заниматься не будем.
procedure PacketCloseAdapter(
AdapterObject: LPADAPTER
); stdcall;
Эта функция закрывает открытый адаптер.
С основными функциями покончено. Этого достаточно для написания простейшего сниффера. Как видишь, ни в одной из функций нет указаний на IP адреса или порт. Как ты думаешь, почему? Как же тогда отправляются пакеты? Да очень просто. Мы здесь работаем на самом низком из возможного сетевом уровне, а здесь порты не нужны. Все это ты должен ручками обрабатывать в структуре LPPACKET.

Визуальная часть программы .

Придумывай что хочешь , но главное что бы были такие компоненты : 4 компнонента Label, два компонента edit и пара Butto'ов. Теперь свойства у этих компонентов :
Label1: Свойство Caption='Всего байт'.
Label2: Свойство Caption='0'.
Label3: Свойство Caption='Файл лога:'.
Label4: Свойство Caption='Используемый адаптер:'.
Button1: Свойство Caption='Старт'.
Button2: Свойство Caption='Стоп'.
Визуальная часть программы на этом закончена .

Кодинг .

После слов private { Private declarations } вставьте такие переменные:

NumPack,NumByt: integer;
FAdapterDescs: array[0..4-1] of ADAPTER_DESC;
FAdapterName: String;
NADO: Boolean;
FhAdapter: DWORD;
FpPacket: LPPACKET;
FuBuffer: Array [0..1520] oF ChaR;
Bytes: DWord;
LogF: TFileStream;
Теперь опишем процедуру FormCreate :
var
FadapterCount:Integer;
begin
PacketGetAdapterNames(@FAdapterDescs, 4, @FAdapterCount); //Получим доступные адаптеры
FAdapterName:= StrPas (@FAdapterDescs[0].SzAdapterDesc); //Получим имя адаптера
Edit2.Text:= FAdapterName; //Расскажем о нашем адаптере
Button2.Enabled:= FalsE;
NumPack:=0; NumByt:= 0; //Пакетов нет, всего байт=0
Самый большой код будет описан в процедуре Button1Click . Эта процедура кнопки старт. А вот и сам код :
var
i: integer;
FuMac: array[0..5] of UCHAR;
begin
Button2.Enabled:= true;
Button1.Enabled:= false;
FhAdapter:= PacketOpenAdapter(FAdapterDescs[0].szAdapterName);
IF FhAdapter=0 then
begin
MessageDlg ('Не могу открыть адаптер.',mtError,[mbIgnore],0);
exit;
end;

PacketAdapterDesc(LPADAPTER(FhAdapter), @FuBuffer[0], sizeof(FuBuffer), @i);
PacketGetAddress(LPADAPTER(FhAdapter), @FuMac[0], 6, @i);
PacketSetFilter(LPADAPTER(FhAdapter), NDIS_PACKET_TYPE_PROMISCUOUS);

FpPacket := LPPACKET( PacketAllocatePacket(LPADAPTER(FhAdapter)) );
IF (FpPacket= Nil) then
begin
MessageDlg ('Облом',mtError,[mbNo],0);
PacketCloseAdapter(LPADAPTER(FhAdapter));
HALT;
end;

//Пора определить буфер и его размер
PacketInitPacket(FpPacket, @FuBuffer[0], 1520);
{==Ну, полетела душа в рай...будем хапать==}
LogF:= TFileStream.Create(Edit1.Text,fmCreate oR fmOpenWrite);
Nado:= True; //Переменная надобности ;)

While Nado= TRUE do
begin
Application.ProcessMessages;
PacketReceivePacket(LPADAPTER(FhAdapter), FpPacket, true, @Bytes);
if Bytes>0 then
LogF.Write(FuBuffer,Bytes);//запишем полученное
NumByt:= NumByt+Bytes;
Label2.Caption:= IntToStr (NumByt);
Application.ProcessMessages;
end;
LogF.Free; //Закроем логфайл

Процедура Button2Click (кнопка "Стоп") . У нее самый короткий код :
Button1.Enabled:= true;
Button2.Enabled:= false;
Nado:= False;

Конец задания .

Я думаю чтоты понимаешь - это сырой вариант программы. Тут приведен минимум непосредственной работы с сетью . Если ты уже давно кодишь на Delphi то ты сможешь очень сильно улучшить этот снифер . Если же ты новичок то посети мой сайт www.Delphi.clan.su , там есть много интересного . И кем бы ты не был новичком, опытным программером или просто пользователем я желаю тебе удачи !

Автор : Jeton (Жихарев А.С.)
Сайт : www.Delphi.clan.su
Мыло : Scrat@Xaker.ru

Категория: Мои статьи | Добавил: aftergod (2006-06-24) | Автор: Бог
Просмотров: 3668 | Комментарии: 1 | Рейтинг: 0.0

Всего комментариев: 1
1 DimaN  
0
Спасибо !!! Очень помогло... Побольше бы таких статей !

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск по каталогу
Друзья сайта
Друзья сайта
Все для вебмастера
Графика для UcoZ
Разработка логотипов
Статистика
Copyright MyCorp © 2006