Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.12.2008, 13:35
malan malan вне форума
Прохожий
 
Регистрация: 14.12.2008
Сообщения: 2
Репутация: 10
По умолчанию Программа-перехватчик (перехват траффика через выбранный порт)

Хочу написать программу на Delphi 2007: программа должна устанавливаться на компьютере и перехватывать весь трафик идущий в сеть/из сети через выбранный порт, а также иметь возможность модифицировать этот трафик.

Вопрос в том как лучше всего это реализовать, какие функции и библиотеки использовать, сам принцип перехвата?

Буду рад любой помощи

P.S. любителей посылать на гугл, прошу не беспокоить.
Ответить с цитированием
  #2  
Старый 05.08.2009, 16:05
dr.5y51em dr.5y51em вне форума
Прохожий
 
Регистрация: 04.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

Сам уже неделю бьюсь головой в гугл (безуспешно), перечитав гору материала, понял что нужно делать хук wsock32.dll, там функции перехвата пакетов send и recv, затем нужно выделить первый заголовок пакета, он как раз будет нести информацию о сайте с которого пришёл или куда отправлен пакет и метод отправки, POST\GET. Если появиться информация, прошу отписаться, а то форумы превратились непонятно во что, авторы находят решение и сваливают. Некрасиво, можно было и кодом поделиться.
Ответить с цитированием
  #3  
Старый 06.08.2009, 04:37
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вот тут у Розыча есть пример сниффера.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 06.08.2009, 10:12
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,553
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Еще пример: http://www.delphisources.ru/pages/so...e-sniffer.html
Ответить с цитированием
  #5  
Старый 06.08.2009, 11:47
dr.5y51em dr.5y51em вне форума
Прохожий
 
Регистрация: 04.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

Это всё не то, смотрите, получаем пакет, смотрим именно заголовок, куда он пошёл. Если запрещённый url. Пакет отсекаем, именно так. Потому что вот эти сниферы показывают на какой IP пакет пошёл, а если я работаю через прокси, то этими сниферами ничего кроме проксика не видно. Поправьте если ошибаюсь.
Ответить с цитированием
  #6  
Старый 07.08.2009, 13:43
dr.5y51em dr.5y51em вне форума
Прохожий
 
Регистрация: 04.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

Почитал книгу Михаила Флёнова "Delphi в шутку и в серьез что умеют хакеры". Там был пример фаерволла, основанного на Paket Filtering (система фильтрация пакетов от мелкомягких), который доступен начиная с Windows 2000. Так вот, я взял его пример, откомпилил, добавил в фильтр IP начал пинговать, он один фиг пингуеться... Я в печали

Вот исходник его юнита:
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, fltdefs, winsock, StdCtrls;

type
  PIpBytes       =  ^TIpBytes;
  TIpBytes       =  Array [0..3] of Byte;

type
  TFirewallForm = class(TForm)
    btStartFilter: TButton;
    btStopFilter: TButton;
    procedure btStartFilterClick(Sender: TObject);
    procedure btStopFilterClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    hIF : INTERFACE_HANDLE;
    ipLocal : TIpBytes;
    function StrToIp(lpszIP: PChar; lpipAddr: PIpBytes): PIpBytes;
    function GetLocalIPAddr(lpipAddr: PIpBytes): Boolean;
    procedure AddFilter(inP: Boolean; lpszRemote: PChar; protoType: DWORD; lpszPort: PChar);
  end;

var
  FirewallForm: TFirewallForm;

implementation

{$R *.dfm}

function TFirewallForm.StrToIp(lpszIP: PChar; lpipAddr: PIpBytes): PIpBytes;
var
 lpszStr : Array [0..63] of Char;
 dwPos : Integer;
 lpPos : PChar;
begin
 StrLCopy(@lpszStr, lpszIP, SizeOf(lpszStr));
 lpszStr[Pred(SizeOf(lpszStr))]:=#0;

 ZeroMemory(lpipAddr, SizeOf(TIpBytes));

 dwPos:=Pred(SizeOf(TIpBytes));
 lpPos:=StrRScan(lpszStr, '.');
 while Assigned(lpPos) do
  begin
   lpPos^:=#0;
   Inc(lpPos);
   lpipAddr^[dwPos]:=StrToIntDef(lpPos, 0);
   Dec(dwPos);

   if (dwPos = 0) then
    break;

   lpPos:=StrRScan(lpszStr, '.');
  end;
 lpipAddr^[dwPos]:=StrToIntDef(lpszStr, 0);

 result:=lpipAddr;
end;

function TFirewallForm.GetLocalIPAddr(lpipAddr: PIpBytes): Boolean;
var
 lpszLocal:  Array [0..255] of Char;
 pheAddr:    PHostEnt;
begin
 if (gethostname(lpszLocal, SizeOf(lpszLocal)) = 0) then
  begin
   pheAddr:=gethostbyname(lpszLocal);
   if Assigned(pheAddr) then
    begin
     Move(pheAddr^.h_addr_list^^, lpipAddr^, 4);
     result:=True;
    end
   else
    result:=False;
  end
 else
  result:=False;
end;

procedure TFirewallForm.AddFilter(inP: Boolean;
  lpszRemote: PChar; protoType: DWORD; lpszPort: PChar);
var
 ipFlt : PF_FILTER_DESCRIPTOR;
 dwPort : Integer;
 ipDest : TIpBytes;
 ipSrcMask : TIpBytes;
 ipDstMask :TIpBytes;
begin
 ZeroMemory(@ipFlt, SizeOf(ipFlt));

 ipFlt.dwFilterFlags:=FD_FLAGS_NOSYN;
 ipFlt.dwRule:=0;
 ipFlt.pfatType:=PF_IPV4;
 ipFlt.fLateBound:=0;

 ipFlt.dwProtocol:=protoType;

 if Assigned(lpszPort) then
  dwPort:=StrToIntDef(lpszPort, FILTER_TCPUDP_PORT_ANY)
 else
  dwPort:=FILTER_TCPUDP_PORT_ANY;

 if inP then
  begin
   ipFlt.wDstPort:=FILTER_TCPUDP_PORT_ANY;
   ipFlt.wDstPortHighRange:=FILTER_TCPUDP_PORT_ANY;
   ipFlt.wSrcPort:=dwPort;
   ipFlt.wSrcPortHighRange:=dwPort;
  end
 else
  begin
   ipFlt.wDstPort:=dwPort;
   ipFlt.wDstPortHighRange:=dwPort;
   ipFlt.wSrcPort:=FILTER_TCPUDP_PORT_ANY;
   ipFlt.wSrcPortHighRange:=FILTER_TCPUDP_PORT_ANY;
  end;

 StrToIP('255.255.255.0', @ipSrcMask);
 StrToIP('255.255.255.0', @ipDstMask);

 if inP then
  begin
   if Assigned(lpszRemote) then
    begin
     ipFlt.SrcAddr:=PByteArray(StrToIp(lpszRemote, @ipDest));
     ipFlt.SrcMask:=@ipSrcMask;
    end
   else
    begin
     ipFlt.SrcAddr:=PByteArray(StrToIp('0.0.0.0', @ipDest));
     StrToIP('0.0.0.0', @ipSrcMask);
     ipFlt.SrcMask:=@ipSrcMask;
    end;
   ipFlt.DstAddr:=@ipLocal;
   ipFlt.DstMask:=@ipDstMask;
   PfAddFiltersToInterface(hIF, 1, @ipFlt, 0, nil, nil);
  end
 else
  begin
   ipFlt.SrcAddr:=@ipLocal;
   ipFlt.SrcMask:=@ipSrcMask;
   if Assigned(lpszRemote) then
    begin
     ipFlt.DstAddr:=PByteArray(StrToIp(lpszRemote, @ipDest));
     ipFlt.DstMask:=@ipDstMask;
    end
   else
    begin
     ipFlt.DstAddr:=PByteArray(StrToIp('0.0.0.0', @ipDest));
     StrToIP('0.0.0.0', @ipDstMask);
     ipFlt.DstMask:=@ipDstMask;
    end;
   PfAddFiltersToInterface(hIF, 0, nil, 1, @ipFlt, nil);
 end;
end;


procedure TFirewallForm.btStartFilterClick(Sender: TObject);
var
 wsaData:       TWSAData;
begin
 if (WSAStartup(MakeWord(1, 1), wsaData) <> 0) then
  begin
   ShowMessage('Îøèáêà Winsock');
   exit;
  end;

 if not GetLocalIPAddr(@ipLocal) then
  exit;

 //Ñîçäàíèå èíòåðôåéñà
 PfCreateInterface(0, PF_ACTION_FORWARD, PF_ACTION_FORWARD, False, True, hIF);

 // Äîáàâëåíèå íåñêîëüêèõ ôèëüòðîâ
 AddFilter(true, '192.168.1.1', FILTER_PROTO_TCP, nil);
 AddFilter(true, '192.168.8.57', FILTER_PROTO_TCP, '21');
 AddFilter(false, '192.168.1.3', FILTER_PROTO_ANY, '7');
 AddFilter(true, '192.168.1.4', FILTER_PROTO_UDP, '1024');

 // Áëîêèðîâêà ëþáûõ èñõîäÿùèõ îáðàùåíèé ê 80-ìó ïîðòó
 AddFilter(false, nil, FILTER_PROTO_TCP, '21');

 // Ïðèâÿçàòü èíòåðôåéñ ê ëîêàëüíîìó àäðåñó
 PfBindInterfaceToIPAddress(hIF, PF_IPV4, @ipLocal);

 btStopFilter.Enabled:=true;
end;

procedure TFirewallForm.btStopFilterClick(Sender: TObject);
begin
 PfUnBindInterface(hIF);
 PfDeleteInterface(hIF);

 WSACleanup;
 btStopFilter.Enabled:=false;
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025