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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.06.2011, 20:19
ZXCCXZ ZXCCXZ вне форума
Прохожий
 
Регистрация: 10.05.2011
Сообщения: 12
Репутация: 10
По умолчанию Перенаправить пакет приложения

Здравствуйте, возникла необходимость перенаправлять пакеты одного приложения на другой адрес.

Есть программа, которая подключается к серверу (по IP xx.xx.xx.xx, к порту 80).

Программа отправляет определённый пакет и получает в ответ другой пакет. Я напишу эмулятор сервера, но вот как перенаправить отосланный приложением пакет на нужный IP/порт?
Ответить с цитированием
  #2  
Старый 19.06.2011, 21:38
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Адрес задан статически в программе? Тогда можно модифицировать эту программу вручную при помощи любого HEX-редактора и, если понадобится, дизассемблера для анализа. По мне - было бы самым простым и надёжным решением.
В теории можно сделать че-нить по типу сниффера, но эту тему я почти не шарю.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 19.06.2011, 22:04
ZXCCXZ ZXCCXZ вне форума
Прохожий
 
Регистрация: 10.05.2011
Сообщения: 12
Репутация: 10
По умолчанию

Программа запакована с помощью Themida. Вряд ли удастся найти там IP и заменить его Нужно именно отлавливать и перенаправлять пакеты)
Ответить с цитированием
  #4  
Старый 19.06.2011, 22:06
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

Можно попробовать отснифать айпи, куда посылается пакет. Потом пошалить в хостс, и вот вам перенаправление. Только вот порт вряд ли получится изменить...
__________________
Gravitas
Ответить с цитированием
  #5  
Старый 19.06.2011, 22:13
ZXCCXZ ZXCCXZ вне форума
Прохожий
 
Регистрация: 10.05.2011
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от Gravitas.
Можно попробовать отснифать айпи, куда посылается пакет. Потом пошалить в хостс, и вот вам перенаправление. Только вот порт вряд ли получится изменить...

Да, перенаправление нужно на конкретный адрес и конкретный порт.
Ответить с цитированием
  #6  
Старый 19.06.2011, 22:15
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

Ну вы погуглите, может возможно и порт через хостс перенаправить.
__________________
Gravitas
Ответить с цитированием
  #7  
Старый 19.06.2011, 22:46
ZXCCXZ ZXCCXZ вне форума
Прохожий
 
Регистрация: 10.05.2011
Сообщения: 12
Репутация: 10
По умолчанию

Всё же это не будет полным решением, даже если я смогу настроить такое перенаправление через hosts. Мне нужно перенаправлять пакеты конкретной одной программы, а не всех.
Ответить с цитированием
  #8  
Старый 22.06.2011, 03:24
ZXCCXZ ZXCCXZ вне форума
Прохожий
 
Регистрация: 10.05.2011
Сообщения: 12
Репутация: 10
По умолчанию

Ап теме, всё ещё требуется помощь в написании сниффера на Delphi.
Ответить с цитированием
  #9  
Старый 22.06.2011, 07:10
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

На счет сниффера:
Код:
program Project2; 
{C@T}

{$APPTYPE CONSOLE} 
 
uses
   Windows,WinSock; 
 
Function GetLocalIP : String;//получаем свой локальный IP
Var WSAData: TWSAData;
     P: PHostEnt;
     Name: array[0..$FF] of Char;
Begin
   WSAStartup($0101, WSAData);
   GetHostName(Name, $FF);
   P := GetHostByName(Name);
   Result := inet_ntoa(PInAddr(P.h_addr_list^)^);
   WSACleanup;
End; 
 
procedure DoSnifer;
var
   S:TSocket;
   Adr:TSockAddr;
   W:WSAData;
   flag,count:integer;
   a:array[0..262144] of byte;
   f:Cardinal;
   nw:Cardinal; 
 
begin 
 
 WSAStartup(MakeWord(2,2),W);
 S:=socket(AF_INET,SOCK_RAW,IPPROTO_IP);//создаем сырой сокет
 ZeroMemory(@Adr,sizeof(Adr));
 Adr.sin_family:=AF_INET;//заполняем структуру адреса
 Adr.sin_addr.S_addr:=inet_addr(pchar(GetLocalIP));//выбираем сетевой интерфейс который будем слушать
 bind(S,Adr,sizeof(Adr));//стартуем сервер
 flag:=1;
 ioctlsocket(S,$98000001,flag);//убираем блокировку сокета 
 
 f := CreateFile('Log.txt',GENERIC_ALL,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);//создаем файл 
 
While true do
   begin
     count:=recv(S,A,sizeof(A),0);//получаем пакет данных
     if count > 0 then
       WriteFile(f,a,count,nw,0);//сохраняем эти данные в файл
   end;
 CloseHandle(f);
 closesocket(S);
 WSACleanup;
end; 
 
var
    id:cardinal;
    thr:Cardinal;
begin
   thr := BeginThread(nil,0,Addr(DoSnifer),nil,0,id);//запускаем сниффер в отдельном потоке чтобы не висла прога, и можно было выйти
   Writeln('Press Enter To Exit');
   readln;
end.
  
Но это без перенаправления.
__________________
Gravitas
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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