Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтр пакетов, нужен хелп, не малый хелп .. 
:(
    Опции темы
XStrike
Дата 2.4.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 31.3.2006

Репутация: нет
Всего: нет



Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdThreadMgr, IdThreadMgrDefault, IdBaseComponent,
  IdComponent, IdTCPServer, IdMappedPortTCP, ExtCtrls;

type
  TITMAPPER = class(TForm)
    PORTSGROUP: TGroupBox;
    MAPPEDPORT: TEdit;
    DEFAULTPORT: TEdit;
    LabelMP: TLabel;
    LabelDP: TLabel;
    HOSTSGROUP: TGroupBox;
    MAPPEDHOST: TEdit;
    LabelMH: TLabel;
    FILESGROUP: TGroupBox;
    FILENAME: TEdit;
    LabelMF: TLabel;
    MAP: TIdMappedPortTCP;
    IdThreadMgrDefault1: TIdThreadMgrDefault;
    Button1: TButton;
    EXITBUTTON: TButton;
    procedure EXITBUTTONClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure MAPOutboundData(AThread: TIdMappedPortThread);
    procedure MAPExecute(AThread: TIdMappedPortThread);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ITMAPPER : TITMAPPER;
  FS       : TFileStream;
  Ini      : TStringList;


implementation

{$R *.dfm}

CONST
  IniFile='Mapper.ini';
  cnMAPPEDHOST='Host';
  cnMAPPEDPORT='Port';
  cnFILENAME='LogFile';
  cnDEFAULTPORT='DPort'; //constant for default port



procedure TITMAPPER.EXITBUTTONClick(Sender: TObject);
begin
CLOSE;
end;

procedure TITMAPPER.Button1Click(Sender: TObject);
begin
      IF MAP.Active THEN
        BEGIN //ShutDown Mapper
          MAP.Active := FALSE;
          DEFAULTPORT.Enabled :=TRUE;
          MAPPEDPORT.Enabled := TRUE;
          MAPPEDHOST.Enabled := TRUE;
          FILENAME.Enabled := TRUE;
          Button1.Caption := 'START';
          FS.Free;
        END
        ELSE
        BEGIN // Turn On Mapper
          MAP.MappedHost := MAPPEDHOST.Text;
          MAP.MappedPort := StrToInt(MAPPEDPORT.Text);
          MAP.DefaultPort := StrToInt(DEFAULTPORT.Text);
          FS := TFileStream.Create(FILENAME.Text, FMCreate); //Create&Open Log File
          DEFAULTPORT.Enabled := FALSE;
          MAPPEDPORT.Enabled := FALSE;
          MAPPEDHOST.Enabled := FALSE;
          FILENAME.Enabled := FALSE;
          MAP.Active := TRUE;
          Button1.Caption := 'STOP';
        END;

end;

procedure TITMAPPER.MAPOutboundData(AThread: TIdMappedPortThread);
begin //Outgoing Packets
        FS.Write(#13#10'<<<<<<'#13#10,8); //MARKER of OUTGOING PACKETS
        FS.Write(AThread.NetData[1], Length(AThread.NetData));
end;

procedure TITMAPPER.MAPExecute(AThread: TIdMappedPortThread);
begin //Outgoing Packets
        FS.Write(#13#10'>>>>>>'#13#10,8); //MARKER of OUTGOING PACKETS
        FS.Write(AThread.NetData[1], Length(AThread.NetData));
end;

function GetValue(Name, Def:String):String; //Work with ini
  BEGIN
    RESULT := ini.Values[Name];
    IF RESULT = '' THEN
      RESULT := Def;
  END;
procedure TITMAPPER.FormCreate(Sender: TObject);
  BEGIN
    INHERITED;
      ini := TStringList.Create; //Load From ini
      IF FileExists(iniFile) THEN
        ini.LoadFromFile(iniFile);
        MAPPEDHOST.Text  := GetValue(cnMAPPEDHOST, MAPPEDHOST.Text);
        MAPPEDPORT.Text  := GetValue(cnMAPPEDPORT, MAPPEDPORT.Text);
        DEFAULTPORT.Text := GetValue(cnDEFAULTPORT, DEFAULTPORT.Text);
        FILENAME.Text    := GetValue(cnFILENAME, FILENAME.Text);

  END;

procedure TITMAPPER.FormDestroy(Sender: TObject);
  BEGIN                               //Save to ini
      ini.Values[cnMAPPEDHOST] := MAPPEDHOST.Text;
      ini.Values[cnMAPPEDPORT] := MAPPEDPORT.Text;
      ini.Values[cnDEFAULTPORT] := DEFAULTPORT.Text;
      ini.Values[cnFILENAME] := FILENAME.Text;
      ini.SaveToFile(iniFile);
END;

end.


вот оно ... добавил настройку DefaultPort, немного видоизменил ... ну и конечно кнопка выключения smile
даже тестил на сервере ... протоколирует ... радует (даже учитывая лог размером в 5 кб за минуту, при одном юзере онлайнsmile ) ... еще раз спасибо Snowy smile
а далее требуется продолжение .... думаю будет это не проще чем до сих пор...

нужно к пакету приписывать айпи отправителя/получателя пакета (получатель - тот кому предназначен пакет идущий через сервер... но это не самое главное );

кстати ... если поймать пакет и получить его в HEX виде ... можно ли его обратно закодировать, и уже в таком виде запихнуть в программу как значение переменной/константы? .... ну а при проходе любого пакета сравнивать его с этой переменной/константой ... и при совпадении блокировать/перенаправлять/уничтожать ... ну в общем лучше начнем с айпи smile
PM MAIL   Вверх
Snowy
Дата 3.4.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(XStrike @ 2.4.2006, 23:36 Найти цитируемый пост)
нужно к пакету приписывать айпи отправителя/получателя пакета (получатель - тот кому предназначен пакет идущий через сервер... но это не самое главное );
Ничего не ясно. Куда прописывать? Как узнать, кому адресован пакет? Что считать пакетом?


Цитата(XStrike @ 2.4.2006, 23:36 Найти цитируемый пост)
сли поймать пакет и получить его в HEX виде ... можно ли его  обратно закодировать, и уже в таком виде запихнуть в программу как значение переменной/константы? .... ну а при  проходе любого пакета сравнивать его с этой переменной/константой ...
Конечно можно.
Только поймать будет сложнее.
Это же сплошной поток. Начала пакета может придти отдельно, а хвост отдельно.
PM MAIL   Вверх
XStrike
Дата 3.4.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 31.3.2006

Репутация: нет
Всего: нет



Цитата

Ничего не ясно. Куда прописывать? Как узнать, кому адресован пакет? Что считать пакетом?


значит у нас есть 2 пользователя соединенных(П1 и П2) через сервер ...

П1 отправляет какой-то запрос П2 -> клиентП1 отправляет на сервер зашифрованый пакет, за тем сервер его обрабатывает и послыает другой пакет(с тем-же запросом но уже адресованый не серверу а клиенту) второму пользователю клиентуП2. Мапер конечно ловит оба пакета(так как они идут оба по одному порту) и вписывает их в лог, один как входящий а второй как исходящий, в логе мы имеем примерно это:

>>>>>>
{ВХОДЯЩИЙ ПАКЕТ}
<<<<<<
{ИСХОДЯЩИЙ ПАКЕТ}



для начала достаточно получить в ЛОГе такое :


>>>>>>
"IP ОТПРАВИТЕЛЯ ПАКЕТА НА СЕРВЕР"
{ВХОДЯЩИЙ ПАКЕТ}
<<<<<<
"IP ПОЛУЧАТЕЛЯ ПАКЕТА ОТ СЕРВЕРА"
{ИСХОДЯЩИЙ ПАКЕТ}


просто далее надо будет сделать в программе проверку след. типа :

ЕСЛИ ПОЛЬЗОВАТЕЛЮ(IP) ПОЛУЧИЛ/ОТПРАВИЛ ПАКЕТ С ЗАПРОСОМ ТО В ТЕЧЕНИИ 8-и СЕКУНД НЕ ПРОПУСКАТЬ К НЕМУ/ОТ НЕГО ПАКЕТОВ С ЗАПРОСАМИ .... а перевод в хекс нужен именно для определения тех-самых пакетов
PM MAIL   Вверх
Snowy
Дата 3.4.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Код
s := #13#10'<<<<<<' + AThread.Connection.Socket.PeerIP + #13#10;
FS.Write(s[1], Length(s));

PM MAIL   Вверх
XStrike
Дата 3.4.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 31.3.2006

Репутация: нет
Всего: нет



немного конкретней ... как и куда это вписывать ?
PM MAIL   Вверх
Snowy
Дата 3.4.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Вместо FS.Write(#13#10'<<<<<<'#13#10,8);
Аналогично с исходящими.
PM MAIL   Вверх
XStrike
Дата 14.4.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 31.3.2006

Репутация: нет
Всего: нет



Код

procedure TITMAPPER.MAPOutboundData(AThread: TIdMappedPortThread);
begin //Outgoing Packets
        s := #13#10'<<<<<<' + AThread.Connection.Socket.PeerIP + #13#10;
        FS.Write(s[1], Length(s)); //MARKER of OUTGOING PACKETS
        FS.Write(AThread.NetData[1], Length(AThread.NetData));
end;

в этом случае он не понимает что такое PeerIP(Undeclared Identifier : 'PeerIP') ... где его задать?
PM MAIL   Вверх
Snowy
Дата 14.4.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Поправочка.
AThread.Connection.Socket.Binding.PeerIP
пропустил...
PM MAIL   Вверх
LeonW
Дата 4.2.2011, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 7.10.2005

Репутация: нет
Всего: нет



Здравствуйте! написал я 
Код

procedure IdMappedPortTCP1MAPOutboundData(AThread: TIdMappedPortThread);
begin //Outgoing Packets
        s := #13#10'<<<<<<' + 'proba' + #13#10;
        FS.Write(s[1], Length(s)); //MARKER of OUTGOING PACKETS
        FS.Write(AThread.NetData[1], Length(AThread.NetData));
end;

но ответ на сервер приходит такой же как с клиента отправляю? 
PM MAIL   Вверх
Coobick
Дата 1.4.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 16.8.2010
Где: Владимир

Репутация: 1
Всего: 1



Всё это прекрасно... но как подобное сделать на новой инди? Не откатываться же на старую каждый раз..   smile 
Например как "переварить" эту строчку на инди 10?  smile 
Код

AThread.NetData:=ReplaceSub(AThread.NetData,'Referer: http://'+Edit1.Text+'/','Referer: http://'+Edit3.Text+'/');

(например в IdMappedPortTCP1Execute)
Сколько не гуглю всюду этот AThread..  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.