Главная страница
    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.008 c
6-1141329303
Aven
2006-03-02 22:55
2006.07.16
Сокеты без окон


2-1151213766
prodeximus
2006-06-25 09:36
2006.07.16
Сортировка по полю


15-1150270198
Prohodil Mimo
2006-06-14 11:29
2006.07.16
Можно ли в макросе Excela добавить строку, содержащую юникоды?


2-1151154509
Skazi
2006-06-24 17:08
2006.07.16
Проблема с TTable?


2-1151330730
bulavkin
2006-06-26 18:05
2006.07.16
DelphX --- Отобразить спрайт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский