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