![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, возникла необходимость перенаправлять пакеты одного приложения на другой адрес.
Есть программа, которая подключается к серверу (по IP xx.xx.xx.xx, к порту 80). Программа отправляет определённый пакет и получает в ответ другой пакет. Я напишу эмулятор сервера, но вот как перенаправить отосланный приложением пакет на нужный IP/порт? |
|
#2
|
||||
|
||||
|
Адрес задан статически в программе? Тогда можно модифицировать эту программу вручную при помощи любого HEX-редактора и, если понадобится, дизассемблера для анализа. По мне - было бы самым простым и надёжным решением.
В теории можно сделать че-нить по типу сниффера, но эту тему я почти не шарю. |
|
#3
|
|||
|
|||
|
Программа запакована с помощью Themida. Вряд ли удастся найти там IP и заменить его
Нужно именно отлавливать и перенаправлять пакеты) |
|
#4
|
||||
|
||||
|
Можно попробовать отснифать айпи, куда посылается пакет. Потом пошалить в хостс, и вот вам перенаправление. Только вот порт вряд ли получится изменить...
|
|
#5
|
|||
|
|||
|
Цитата:
Да, перенаправление нужно на конкретный адрес и конкретный порт. |
|
#6
|
||||
|
||||
|
Ну вы погуглите, может возможно и порт через хостс перенаправить.
|
|
#7
|
|||
|
|||
|
Всё же это не будет полным решением, даже если я смогу настроить такое перенаправление через hosts. Мне нужно перенаправлять пакеты конкретной одной программы, а не всех.
|
|
#8
|
|||
|
|||
|
Ап теме, всё ещё требуется помощь в написании сниффера на Delphi.
|
|
#9
|
||||
|
||||
|
На счет сниффера:
Код:
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.
|