Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Delphi и Proxy   Найти похожие ветки 

 
wasserman   (2006-06-28 11:45) [0]

Всем привет.

Облазил весь интернет в поисках материала по теме, как сделать прокси-сервер на Delphi. В большинстве случаев был предложен Alternative Proxy, но он меня не устраивает, т.к. работает с потоками памяти, а ещё хотелось бы заиметь кэш картинок и прочей дребедени...

Чур, тапками не бить - сам знаю, вопрос неоднократно поднимался. :)


 
Пусик ©   (2006-06-28 11:53) [1]

http://forum.sources.ru/index.php?showtopic=135857


 
wasserman   (2006-06-28 12:02) [2]

Просмотрел. Врубиться не могу - как его теперь биндануть к 192.168.0.1:3128?


 
wasserman   (2006-06-28 12:05) [3]

так. это разобрался...
но вот попа - яндекс он не распознаёт. вообще....


 
Пусик ©   (2006-06-28 12:19) [4]


> но вот попа - яндекс он не распознаёт. вообще....

Не Яндекс, а конкретно ya.ru

Тебе придется переписать в примере кусок, определяющий целевой хост и запрос, в случае, если в запросе используется протокол HTTP/1.0, заменить запрос таким образом, например:

GET http://myhost.ru/index.html HTTP/1.0 на
GET /myhost.ru/index.html HTTP/1.0


 
wasserman   (2006-06-28 12:24) [5]

да нет... я не про то
просто когда я пытаюсь выполнить поиск он полчаса грузит ../i/чего-то-там.gif а потом говорит Stack Owerflow

в mail.ru этого нет, зато съедает css...

И ещё деталька - я никак не могу понять в каком месте можно определить ip адрес клиента который сидит??


 
Пусик ©   (2006-06-28 12:30) [6]


> И ещё деталька - я никак не могу понять в каком месте можно
> определить ip адрес клиента который сидит??


Ну это тебе придется разбираться самому.
Детально разбирай и ищи.
Например, введи структуру дополнительно в классе TClient или в TIntenalClient,
в
procedure TAcceptThread.Execute; при акцептировании соединения определяй нужные параметры по полученному сокету.

Вот набросок:
  ClientSocket:=accept(FListenSocket, @FAddr, @Len);
  try
   GarbageCollect;
   if ClientSocket<>INVALID_SOCKET then
   begin
    InternalClient:=TInternalClient.Create;
    InternalClient.FSI.FType := tcInternal;
    Len1:=sizeof(FAddr);
    GetPeerName(ClientSocket,FAddrClient,Len1);
    InternalClient.FSI.FClientIP := Inet_ntoa(FAddrClient.sin_addr);
    he:=GetHostByName(PChar(InternalClient.FSI.FClientIP));
    if Assigned(he) then
    begin
     InternalClient.FSI.FClientHost := he^.h_name;
     InternalClient.FSI.FClientPort :=IntToStr(FAddrClient.sin_port);
    end;


 
Пусик ©   (2006-06-28 12:31) [7]

А лучше изучи пример, и напиши свой.
Автор, кстати - Polevi, периодически появляется здесь.


 
wasserman   (2006-06-28 12:33) [8]

Спасибо. Но я уже пробовал написать свой, чисто - с "нуля".  Там возникала проблема чтения из серверного сокета (делал на Internet"овских компонентах). То есть читает читает, раз - виснет на "пустой" строчке (типа там \r\n должно быть, только то ли нет, то ли я идиот...)


 
Пусик ©   (2006-06-28 12:35) [9]

Да, и не забудь, что пример написан в консольном приложении. Если нужно будет перенести в VCL-Application, придется досконально изучить код и поправить во избежание утечек памяти.


 
wasserman   (2006-06-28 12:38) [10]

В твоём примере FSI это что-то явно непонятное....


 
Пусик ©   (2006-06-28 12:44) [11]


> wasserman   (28.06.06 12:38) [10]
> В твоём примере FSI это что-то явно непонятное....


Да просто структура...

Описана так:
TSocketInfo=record
 FClientHost: String;
 FClientIP: String;
 FClientPort: String;
 FServerHost: String;
 FServerIP: String;
 FServerPort: String;
 FQuery: String;
 FRecvFromClient: Cardinal;
 FSentToServer: Cardinal;
 FRecvFromServer: Cardinal;
 FSentToClient: Cardinal;
 FType: TTypeClient;


Ну да это не имеет значения. Все равно свое будешь делать.


 
wasserman   (2006-06-28 12:49) [12]

у меня задача-то собственно была ограничить от использования и-нета челов, которые не работают с определёнными файлами некоторое время :)

пасиба.

а ещё можно узнать как можно залочить некоторые урлы типа neznakomka.ru?


 
Пусик ©   (2006-06-28 13:14) [13]


> а ещё можно узнать как можно залочить некоторые урлы типа
> neznakomka.ru?


Я думаю, что вот здесь - procedure TClient.Connect(ARequest: string);

Надо просто проверить имя удаленного хоста, либо запрос и добавить
строки:

try
 FAddr.sin_port := htons(StrToInt(ARemotePort));
               
 if (<Здесь проверка условия>) or (WinSock.connect(FSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR)
  then FSocket:=INVALID_SOCKET;

except
end;


 
wasserman   (2006-06-28 13:21) [14]

а как узнать допустим если хост не существует (404) либо если просто слетел инет чтобы не заставлять юзера ждать и кинуть его скажем на server:9320 где будет запущен локальный въёб-сервер?:)


 
Пусик ©   (2006-06-28 13:34) [15]


> а как узнать допустим если хост не существует (404)


В этом же методе
WinSock.connect(FSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR

здесь определить причину ошибки, изменить адрес хоста и запрос и подключиться уже к локальному хосту.


 
wasserman   (2006-06-28 14:00) [16]

Ты забыла что общаешься с чайником в области инет-технологий ;-)


 
wasserman   (2006-06-28 15:15) [17]

Промучался пару часов. Нашёл одно место , IP определяет. но мне надо не там, а где запрос странички идёт, дабы залогить злостного нарушителя!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
2-1151389275
Kain-Lord
2006-06-27 10:21
2006.07.16
Помогите с мерцанием!


2-1151047899
fun.exe
2006-06-23 11:31
2006.07.16
Колдовство с Opera


3-1147618940
Express
2006-05-14 19:02
2006.07.16
Ошибка «Не удается найти строку для обновления», MySQL


1-1149342991
malyar
2006-06-03 17:56
2006.07.16
ПОСЫЛКА СООБЩЕНИЯ КОМПОНЕНТУ LISTVIEW


2-1151240219
Gizza
2006-06-25 16:56
2006.07.16
Панель управления





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский