Конференция "Сети" » Прокси в моей программе [D7, WinXP]
 
  • Sanprof (23.09.10 14:05) [0]
    Здравствуйте, пишу программу на делфи, стала надобность, чтобы программа работала через прокси-сервер, тоесть нужно в программу добавить настройку Прокси (ИП, Порт, Логин, Пароль).
    Ноги растут от того, что есть сервер(Имеет статический ИП) и есть клиент(работает в сети с выходом в интернет через прокси), нужно конектить сервер-клиент через сокеты(если и у клиента статический ИП, то все работает нормально, а через прокси-сервер нет)
  • Сергей М. © (23.09.10 21:37) [1]
    Хрень какая-то ...
    Клиенту статический адрес нафих не нужен. И прокси-серверу тоже безразлично статический ли у его клиента адрес.
  • Rouse_ © (23.09.10 22:27) [2]
    Вопрос то какой?
  • Slym © (24.09.10 05:34) [3]
    Протокол какой? не HTTP поди...
  • Sanprof (24.09.10 10:04) [4]

    > Протокол какой? не HTTP поди...

    Программы (сервер и клиент) написаны с помощью компонентов TServerSocket и TClientSocket, если у клинта статический ИП(Украина-Симферополь) и у сервера (домашняя машина имеет постоянный статический ИП-Украина-Харьков), то передача данных (текст, картинки и т.п.) между машинами идет нормально, тоесть через интернет все работает, но когда я запускаю клиента на машине с выходом в интернет через прокси, то естественно связь не устанавливается.
    Как обойти это дело???
    В интернете пишут, что может помочь Indy, но примеры везде для TwebBrowser-ов.
  • Sanprof (24.09.10 10:08) [5]
    Да и еще мне не требуется загрузка сайтов с сервера и все этой белеберды, мне нужно конкретно обмен текстом, картинка, музыкой и т.п. между, допустим, двумя клиентами в разных частях планеты через сервер (как я говорил компьютер-сервер со статическим ИП).
  • Сергей М. © (24.09.10 10:34) [6]

    > когда я запускаю клиента на машине с выходом в интернет
    > через прокси


    Не вижу абсолютно никакой связи между статичностью ip-адреса хоста клиента и работой через прокси.
    Вот как только прояснишь эту связь - тогда и рекомендации будут ..
  • DiamondShark © (24.09.10 10:45) [7]

    > Не вижу абсолютно никакой связи


    <mode telepat="ON">
    Тот хитрый клиент, похоже, к внешней сети вообще не подключён, а "выходом в интернет через прокси" здесь называется доступ к HTTP из внутренней сети через HTTP-прокси.
    </mode>

    В таком случае товарища спасёт NAT.

    Ну, или попробовать из него выпытать внятное описание конфигурации сети.
  • Сергей М. © (24.09.10 10:45) [8]
    Поддержка работы клиента через прокси-сервер сводится к реализации в приложении-клиенте протокола взаимодействия с тем или иным конкретным типом прокси.
    Т.е. ты должен научить свою клиентскую программу работать через как минимум HTTP(S)-, SOCKS4- и SOCKS5-прокси, с авторизацией или без нее.
  • Sanprof (24.09.10 11:14) [9]

    > Т.е. ты должен научить свою клиентскую программу работать
    > через как минимум HTTP(S)-, SOCKS4- и SOCKS5-прокси, с авторизацией
    > или без нее.

    А можно поподробнее с этого момента. Я запускаю клиента на работе, здесь всем раздали ип(мой внутренний 192.168.0.98), но выход в интернет через прокси сервер (у нас он 192.168.0.1) с авторизацией, как мне добавить или где почитать как добавить в программу-клиент HTTP(S)-, SOCKS4- и SOCKS5-прокси с авторизацией или без нее???
  • Sanprof (24.09.10 11:20) [10]

    > Не вижу абсолютно никакой связи между статичностью ip-адреса
    > хоста клиента и работой через прокси.

    Я так понял, что вы меня не правильно поняли, когда я говорил, что у клиента статический ИП, я подразумевал, что клиент со стат ИП работает не через прокси, а имеет прямой выход в интернет.
  • Anatoly Podgoretsky © (24.09.10 11:31) [11]
    > Sanprof  (24.09.2010 11:20:10)  [10]

    Чудо
  • Сергей М. © (24.09.10 11:48) [12]

    > Sanprof   (24.09.10 11:20) [10]


    Т.е. делаем вывод, что статику адреса ты упомянул всуе)


    > как мне добавить или где почитать


    Если не хочешь отказываться от TClientSocket, то гугли и штудируй все касаемое  протоколов SOCKS4, SOCKS5, HTTP(S)

    В противном случае я бы посоветовал использовать библ-ку Synapse - там поддержка различных типов прокси уже интегрирована.
  • Sanprof (24.09.10 11:59) [13]

    > В противном случае я бы посоветовал использовать библ-ку
    > Synapse - там поддержка различных типов прокси уже интегрирована.
    >

    ОК, я тогда почитаю по этому поводу, если че не пойму здесь отпишусь.
  • Sanprof (24.09.10 12:06) [14]
    а еще не подскачете, где можно найти хорошо написанную статейку по Indy по использованию прокси (только не для TWebBrowser-а)??? Думаю как вариант заменить TClientSocket на TIdTCPClient, а TServerSocket на TIdTCPServer. Indy же поддерживает работу через прокси или я ошибаюсь???
  • Сергей М. © (24.09.10 12:27) [15]
    Нафих тебе этот монстр - Indy ? Геморрой легко зарабатывается, но тяжело поддается лечению
    Бери на вооружение Synapse !
    Там все прокси-хозяйство реализовано изящно и интуитивно понятно.
  • Anatoly Podgoretsky © (24.09.10 12:30) [16]
    > Sanprof  (24.09.2010 12:06:14)  [14]

    Кроме информации на сайте авторов, практически негде. Статьи обычно не
    копируют, а по Инди в особенности.
    И когда ты говоришь прокси, то называй какой именно, может и не работает.
  • Sanprof (24.09.10 12:48) [17]

    > Anatoly Podgoretsky ©   (24.09.10 12:30) [16]
    >
    > И когда ты говоришь прокси, то называй какой именно, может
    > и не работает.

    Если честно, то я не знаю какой, а какой лучше подходит для соединения между ClientSocket и SeverSocket???
  • Сергей М. © (24.09.10 12:55) [18]
    > Если честно, то я не знаю какой

    Если не знаешь какой тип прокси даже у тебя на работе, то как же ты собрался поддерживать работу своего клиента через прокси с произвольного хоста ?

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

    > какой лучше подходит для соединения между ClientSocket и SeverSocket?

    Им по барабану. Они про прокси вообще ничего не знают, ибо работают на транспортном уровне. А ПРокси-протоколы - это уже прикладной уровень.
    В любом случае при использовании этих компонентов придется ручками реализоввать поддержку прокси.
  • Sanprof (24.09.10 13:16) [19]

    > Сергей М. ©   (24.09.10 12:55) [18]
    >
    > Если не знаешь какой тип прокси даже у тебя на работе

    А его как-то можно узнать без помощи администратора?
  • Сергей М. © (24.09.10 13:29) [20]

    > Sanprof   (24.09.10 13:16) [19]


    Ну зайди да посмотри, к примеру, в настройках своего браузера..
    HTTP(S)-прокси наверняка там фигурирует.
    А вот доступны ли SOCKS-прокси в вашей корп.сети - это уже вопрос к админу, если конечно же настройки сокс-прокси не фигурируют в кач-ве активных и используемых, к примеру, в разного рода мессенджерах типа аськи и т.п.
  • Sanprof (24.09.10 14:07) [21]
    короче на работе работает только HTTP(S).
    Значит Synapse мне в помощь?
  • Сергей М. © (24.09.10 14:26) [22]

    > Значит Synapse мне в помощь?


    Угу.
  • Slym © (27.09.10 15:03) [23]
    а при чем тут набор каких либо компонент?
    я спросил какой протокол! наиболее распространенный HTTP прокси заточен именно под HTTP протокол и ничего кроме не поддерживает (FTP не всчет)...
    Можно воспользоваться фичей HTTPS - Connect, но одмины не дураки и разрешено зачастую только на 443 и 8443 порты, т.к. в незакрытом состоянии это большая дыра...
    затачивать только SOCKS - глупо т.к. большинство HTTPProxy

    по сабжу: HTTPS Connect дописать на TClientSocket дело 5 мин...
  • Sanprof (28.09.10 11:32) [24]

    > Slym ©   (27.09.10 15:03) [23]
    >
    > по сабжу: HTTPS Connect дописать на TClientSocket дело 5
    > мин...

    Slym, не подскажите, где можно почитать, чтоб можно было за 5 мин...???
    Очень надо.
  • Сергей М. © (28.09.10 13:36) [25]
  • Sanprof (28.09.10 13:54) [26]
    Сергей М., спасибо за ссылку, только вот я так и не понял как мне реализовать тунелирование на делфи с помощью TClient~ServerSocket?
  • Сергей М. © (28.09.10 14:04) [27]
    Ну там же черным по белому написано - послать прокси-серверу то-то, принять от него ответ.. Если принято то-то, значит сё-то, иначе так-то ..

    Ну так вот твой TClientSocket как раз и нужен чтобы посылать прокси-серверу то-то и получать от него сё-то.

    А TServerSocket тут вообще не при делах.
  • Sanprof (28.09.10 14:45) [28]

    > Сергей М. ©   (28.09.10 14:04) [27]
    >
    > Ну там же черным по белому написано - послать прокси-серверу
    > то-то, принять от него ответ.. Если принято то-то, значит
    > сё-то, иначе так-то ..
    >
    > Ну так вот твой TClientSocket как раз и нужен чтобы посылать
    > прокси-серверу то-то и получать от него сё-то.
    >
    > А TServerSocket тут вообще не при делах.

    Ок, попробую может че и получится, если че сюда отпишусь.
  • Slym © (28.09.10 14:55) [29]
    надергал из разных месть так что выглядит довольно криво

    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, ScktComp, StdCtrls;

    type
     TForm1 = class(TForm)
       Button1: TButton;
       ClientSocket1: TClientSocket;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation
    uses WinSock,RTLConsts;
    {$R *.dfm}

    const
     LF = #10; CR = #13;
     EOL = CR + LF;
    const
     DefTimeout:Longint=60000;
     DefMaxLineLength:integer=MaxWord;

    function SockWaitForData(ASocket:TSocket; ATimeout: Longint): Boolean;
    var
     FDSet: TFDSet;
     TimeVal: TTimeVal;
    begin
     if ATimeout=-1 then ATimeout:=DefTimeout;
     TimeVal.tv_sec := ATimeout div 1000;
     TimeVal.tv_usec := (ATimeout mod 1000) * 1000;
     FD_ZERO(FDSet);
     FD_SET(ASocket, FDSet);
     Result := select(0, @FDSet, nil, nil, @TimeVal) > 0;
    end;

    function LCharPos(Str:PChar;char:char;Size:integer): Integer;
    asm  {Str - EAX, char - DL (EDX), Size - ECX}
           PUSH    EDI
           MOV     EDI, EAX { Point EDI to str}

           MOV     AL,DL        { AL = Search char}
           MOV     EDX,ECX   {remember Length}

           REPNE   SCASB
           JNE     @@fail
           MOV     EAX,EDX { Calc offset }
           SUB     EAX,ECX
           JMP     @@fin
    @@fail:
           XOR     EAX,EAX
    @@fin:
           POP     EDI
    end;

    function CharPos(const str:string;char:char): Integer;
    asm
           TEST    EAX, EAX
           JE     @@exit
           MOV     ECX, [EAX-4]
           call    LCharPos
    @@exit:
    end;

    function Fetch(var AInput:string;const ADelim:char):string;
    var LPos: Integer;
    begin
     LPos:=CharPos(AInput,ADelim);
     if LPos=0 then
     begin
       Result:=AInput;
       AInput:='';
     end else
     begin
       Result:=Copy(AInput,1,LPos-1);
       AInput:=Copy(AInput,LPos+1,MaxInt);
     end;
    end;

    function SockReadLn(ASocket:TSocket;ATerminator:char=LF;AMaxLineLength:integer=MaxWord;AT imeOut:Longint=0):string;
    var
     Buf:array[byte] of char;
     SizeBuf:integer;
     r,i:integer;
     s:string;
    begin
     if ATimeout=0 then ATimeout:=DefTimeout;
     SizeBuf:=SizeOf(Buf);
     result:='';
     while SockWaitForData(ASocket,ATimeOut) do
     begin
       r:=recv(ASocket, Buf, SizeBuf, MSG_PEEK);
       if r=0 then Break;
       if r=SOCKET_ERROR then Raise Exception.Create('recv');

       i:=LCharPos(@Buf,ATerminator,r);
       if i<>0 then r:=i;

       r:=recv(ASocket, Buf, r, 0);
       if r=0 then Break;
       if r=SOCKET_ERROR then Raise Exception.Create( 'recv');

       SetString(s,Buf,r);
       result:=result+s;
       if i<>0 then Break;
     end;
     if length(result)=0 then exit;
     i:=length(result)-1;
     if (ATerminator=LF) and (result[i]=CR) then Dec(i);
     SetLength(result,i);
    end;

    procedure WriteBuffer(ASocket:TSocket; const Buffer; Count: Longint;ATimeout:Longint=0);
    var
     Overlapped: TOverlapped;
     ErrorCode,Result: Integer;
    begin
     if ATimeout=0 then ATimeout:=DefTimeout;
     FillChar(OVerlapped,SizeOf(Overlapped),0);
     Overlapped.hEvent:=CreateEvent(nil,True,False,'');
     try
       if not WriteFile(ASocket, Buffer, Count, DWORD(Result),
         @Overlapped) and (GetLastError <> ERROR_IO_PENDING) then
       begin
         ErrorCode := GetLastError;
         raise ESocketError.CreateResFmt(@sSocketIOError, [sSocketWrite, ErrorCode,
           SysErrorMessage(ErrorCode)]);
       end;
       if WaitForSingleObject(Overlapped.hEvent, ATimeout)<>WAIT_OBJECT_0 then
         Result := 0
       else GetOverlappedResult(ASocket, Overlapped, DWORD(Result), False);
     finally
       CloseHandle(Overlapped.hEvent);
     end;
    end;

    procedure SockWriteLn(ASocket:TSocket;const AOut:string='');
    begin
     if Length(AOut)>0 then
       WriteBuffer(ASocket,Pointer(AOut)^, Length(AOut));
     WriteBuffer(ASocket,EOL,Length(EOL));
    end;

    const
     ProxyHost='192.168.14.2';
     ProxyPort=3128;

     RemoteHost='www.ya.ru';
     RemotePort=80;
     proxy=true;

    procedure TForm1.Button1Click(Sender: TObject);
    var
     s:string;
     Code,i:integer;
    begin
     ClientSocket1.ClientType:=ctBlocking;
     if proxy then
     begin
       ClientSocket1.Host:=ProxyHost;
       ClientSocket1.Port:=ProxyPort;
     end else
     begin
       ClientSocket1.Host:=RemoteHost;
       ClientSocket1.Port:=RemotePort;
     end;
     ClientSocket1.Open;
     if proxy then
     begin
       SockWriteLn(ClientSocket1.Socket.SocketHandle,format('CONNECT %s:%d HTTP/1.1'#13#10,[RemoteHost,RemotePort]));
       s:=SockReadLn(ClientSocket1.Socket.SocketHandle);
       if Length(s)=0 then raise Exception.Create('Bad HTTP respond');
       Fetch(s,' ');// to remove the http/1.0 or http/1.1
       Code:=StrToIntDef(Fetch(s,' '),200); // if invalid response then we assume it succeeded
       if Code<>200 then raise Exception.CreateFmt('Bad HTTP status code: %d %s',[Code,s]);
       i:=128;
       repeat dec(i) until
         (SockReadLn(ClientSocket1.Socket.SocketHandle) = '') or (i<=0);
       if i<=0 then
         raise Exception.Create('Too many headers or wrong protocol');
     end;

     DOWORK;

    end;

    end.


  • Sanprof (30.09.10 13:56) [30]
    1. вот руки у меня добрались до этого кода, Slym, хотелось бы знать, что каждая функция и процедура выполняет, если вас не затруднит хоть какое нибудь описание, я думаю будет полезным и для других, читающих эту тему (это ж как база знаний).
    2. Код отрабатывает все ок, получаю ответ от прокси (код 200). Если мне надо приконектиться к своей машине (как я уже и говорил статический ИП), на которой программа с настроенным TServerSocket (допустим Host - 109.87.123.1, Port - 7777), как мне это сделать, допустим отослать серверу текст "Hello", и получить ответ "Hello"??? Зарание спасибо.
  • Сергей М. © (30.09.10 14:14) [31]

    > Sanprof   (30.09.10 13:56) [30]


    > как мне это сделать, допустим отослать серверу текст "Hello",
    >  и получить ответ "Hello"?


    Точно так же как ты это делал до тех пор пока не озадачился работой через прокси.
    Только в случае с примером от Slym © место, где следует это делать, помечено как "DOWORK"
  • Sanprof (30.09.10 14:46) [32]

    > Сергей М. ©   (30.09.10 14:14) [31]
    >
    > Точно так же как ты это делал до тех пор пока не озадачился
    > работой через прокси.
    > Только в случае с примером от Slym © место, где следует
    > это делать, помечено как "DOWORK"

    Э-э-э-м немного не пойму, ведь я до этого в настройках TClientSocket вводил Address - 109.87.123.1, Host - 109.87.123.1, Port - 7777, а теперь как я понял в коде получается
    ClientSocket1.Host:=ProxyHost;
    ClientSocket1.Port:=ProxyPort;


    тоесть Host - 192.168.14.2, Port - 3128, как же мне тогда указать куда коннектиться???
  • Сергей М. © (30.09.10 15:47) [33]

    > как же мне тогда указать куда коннектиться???


    Вот строка, которую получает прокси:

    format('CONNECT %s:%d HTTP/1.1'#13#10,[RemoteHost,RemotePort]));

    в ней ты и указываешь прокси-серверу куда ему нужно коннектиться от твоего имени.
  • Sanprof (30.09.10 15:55) [34]
    только хотел отписаться по этому поводу, что мол вот же [RemoteHost,RemotePort], и как я мог это пропустить, просто банальность - этот кусок кода вылез за пределы редактора кода в делфи, вот я его и не заметил.
    :)Большое спасибо Slym © за код, и Сергей М. © за отзывчивость и помощь.:)
    Сегодня протестировать не получится, но завтра обязательно, о результате сюда отпишусь.
  • Slym © (01.10.10 06:19) [35]
    Sanprof   (30.09.10 13:56) [30]
    наиболее важная часть в [29] помечена жирным
    из неродного: SockWriteLn, SockReadLn и Fetch
    SockWriteLn, SockReadLn - понятно из названий
    Fetch - взят из Indy работа со строками, но заточен под поиск одного символа. Это связка pos и copy
    найти символ и вернуть часть строки до него, исходную строку урезать...

    остальной asm бред для работоспособности этих функций
  • Sanprof (01.10.10 10:05) [36]
    такой еще вопрос, у нас на работе доступ в интернет при помощи авторизации, код выше будет работать в такой ситуации, а то я получаю (Code = 200), дальше делаю как делал раньше ClientSocket1.Socket.SendText('служебный текст на подключение'), сервер в ответ должен выслать тоже определенный текст, но событие OnRead клиента даже не возникает, хотя сегодня утром проверял на одной машине работоспособность клиента и сервера. С работы мой комп пингуется, и в интернете проверил открыт ли порт, на котором сидит сервер - Открыт. Что не так не пойму.
  • Slym © (01.10.10 11:42) [37]
    читай Proxy-Authorization
    function BasicAuthentication(const Username,Password:string): String;
    begin
     with TIdEncoderMIME.Create do try
       Result := 'Basic ' + Encode(Username + ':' + Password); {do not localize}
     finally Free; end;
    end;

    SockWriteLn(ClientSocket1.Socket.SocketHandle,format('CONNECT %s:%d HTTP/1.1',[RemoteHost,RemotePort]));
    SockWriteLn(ClientSocket1.Socket.SocketHandle,format('Proxy-Authorization: %s'#13#10,[BasicAuthentication(Username,Password)]));

  • Sanprof (05.10.10 12:54) [38]
    Вобщем получилось следующее, достал на время ноутбук приконктил к пркси на моей машине(интернет и т.п. работает), и стал тестить, прописал ИП, порт прокси и ИП, порт удаленной машины, тоесть моей, прокси стоит 3proxy (там можно посмотреть лог отправки запросов с клиентов к прокси), так вот клиент открыл порт 11622 в логах посмотрел, и коннект к серверу на порт 5364 не происходил, потом я поменял порт на сервере с 5364 на 11622, при этом клиент законнектился к серверу, но я же не должен менять порт на сервере. Как обойти ситуацию не знаю???
  • Сергей М. © (05.10.10 13:28) [39]
    У тебя ошибка в программе.
  • Sanprof (05.10.10 14:43) [40]
    так без прокси же работает.
  • Сергей М. © (05.10.10 14:53) [41]
    И чего ?
    С прокси же не работает)
    Значит у тебя ошибка в программе.
  • Sanprof (05.10.10 15:06) [42]
    я так понимаю на клиенте настраивается ClientSocket на хост и порт прокси-сервера и указывается куда проксе делать редирект, тоесть на мой сервер(порт и хост), но чего-то когда я указываю в настройках соединения клиента хост и порт прикси-сервера, то открывается случайный не занятый порт между прокси и клиентом и по-моему каждый раз новый.
    Я ж так понимаю соединение не должен зависеть от типа прокси-сервера и настроен ли NAT или еще какая-нибудь...????
  • Сергей М. © (05.10.10 15:16) [43]

    > открывается случайный не занятый порт между прокси и клиентом
    > и по-моему каждый раз новый


    И что ?
    Это совершенно нормально..
  • Sanprof (05.10.10 17:14) [44]
    почему тогда у меня на сервере даже не возникают события ни OnConnect ни OnClientRead при использовании прокси, ведь я код использую тот, что товарищ Slim © дал. То где он писал DoWork я делаю ClientSocket1.Socket.SendText('0| ответь сервер'), а сервер должен прочитать код "0" и отослать данному соединению ответ, что и происходит без использования прокси-сервера.
  • Сергей М. © (05.10.10 17:52) [45]

    > почему тогда у меня на сервере даже не возникают события
    > ни OnConnect


    Потому что прокси не пытался коннектиться к твоему серверу
  • Slym © (05.10.10 18:19) [46]
    телепатор мне подсказывает что не хватает #13#10 в конце конект запроса...
    заметь:
    SockWriteLn(ClientSocket1.Socket.SocketHandle,format('CONNECT %s:%d  HTTP/1.1',[RemoteHost,RemotePort]));// один перевод строки

    SockWriteLn(ClientSocket1.Socket.SocketHandle,format('Proxy-Authorization: %s'#13#10,[BasicAuthentication(Username,Password)]));// два перевода строки
    или записать по другому
    SockWriteLn(ClientSocket1.Socket.SocketHandle,format('Proxy-Authorization: %s',[BasicAuthentication(Username,Password)]));// один перевод строки
    SockWriteLn('');// еще один перевод строки

  • Slym © (05.10.10 18:21) [47]
    последняя строка должна быть пустой... после этого прокси начинает конектится...
    иначе тупо висит и ждет
  • Slym © (05.10.10 18:30) [48]
    смотри в 3proxy в конфиге строку типа
    allow * * * 443,8443 HTTPS


    а должно быть
    allow * * * * HTTPS


    но это дыра
  • I_D © (23.05.13 18:29) [49]
    Доброго времени суток.
    Пишу свое первое сетевое приложение. Необходимо подклчиться к серверу через  прокси. Программа будет работать по сокетах. Нашел примеры на Synapse.
    Первый пример THTTPSend Demo (HTTP only) вроде как работает. Программа возвращает следующее:

    Attempting GET http://www.google.com/ ..
    Destination URL = http://www.google.com.ua/
    HTTP Result = 200
    HTTP Headers:
    HTTP/1.1 200 OK
    Proxy-Connection: Keep-Alive
    Connection: Keep-Alive

    Второй пример TTCPBlockSocket Demo 1 возвращает:

    Attempting connection..
    Error 10091 - Network subsystem is unusable
    502 - Proxy Error ( The specified Secure Sockets Layer (SSL) port is not allowed. ISA Server is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests.  )

    Интересовался у наших системщиков, какой тип прокси настроен - ответ - используется ISA (без каких либо дополнительных объяснений)

    У меня закрались смутные сомненья, что я не смогу работать по сокетах через наш прокси. Так ли это? Возможно ли как-то выйти из этой ситуации програмным путьем. Порт для доступа к внешнему серверу отличается от 443.

    В конечном итоге программа должна отправлять SMS по протоколу SMPP на сервер SMSС.

    Возможно вы подскажите какой либо сервер в инете, к которому можно подключится по сокетах по порту 443 (для проверки работы примера)
  • I_D © (23.05.13 18:51) [50]
    Пробовал пример протестить на mail.google.com
    Ответ :

    Attempting connection..
    Sock Error Desc = Network subsystem is unusable
    SSL Error Desc = SLL is not implemented!

    Стоит ли искать другие компоненты или проблема в доступе?
  • Anatoly Podgoretsky © (23.05.13 20:24) [51]
    Тебе/вам надо настроить ISA сервер, в ошибке четко сказано

    > 502 - Proxy Error ( The specified Secure Sockets Layer (SSL)
    > port is not allowed. ISA Server is not configured to allow
    > SSL requests from this port. Most Web browsers use port
    > 443 for SSL requests.  )

    Во втором сообщение у тебя вообще появляется какой то новый протокол SLL, не знаю такого. И как у вас сеть работает без SSL ведь ко многим сайтам доступ только через SSL

    P.S. нестандартные порты нужна особая конфигурация СОМ сервера. Ничего сложного, писать надо на VB
  • I_D © (24.05.13 11:46) [52]

    > И как у вас сеть работает без SSL ведь ко многим сайтам
    > доступ только через SSL

    Это то и меня настораживает. Я без проблем подключаюсь бровзером к этому же gmail.com, а он работает по SSL (если не ошибаюсь)

    Я больше склонен к тому, что у нас запрещен туннелинг.

    Подскажите, пожалуйста, возможно ли работать по сокетах через прокси без организации туннелинга?
  • Anatoly Podgoretsky © (24.05.13 13:05) [53]
    gmail работает по SSL есди его настроить на такую работу, иначе соединеие обычное.

    Я внимательно подумал, проблема в том, что порт нестандартный и он не сконфигурирован. Ищи в этом направление.
  • I_D © (24.05.13 13:21) [54]

    > Anatoly Podgoretsky

    Спасибо. Попробую по-общаться с системщиками.
  • Anatoly Podgoretsky © (24.05.13 14:06) [55]
    Вообще то это проблема программная, а не аппаратная
  • I_D © (24.05.13 18:51) [56]
    Если программная - то тогда даже не знаю за что зацепится. Я предполагал, что туннелинг, который создается методом CONNECT, в моем случае поддерживает только  443 порт на ISA Servere в виду настроек сделанными системщиками. Просмотрел код компонента - не увидел какую-то особую настройку по портам в сокетах.
    Ок . Буду дальше мучится :) Может что-то да и получится
  • Anatoly Podgoretsky © (24.05.13 20:37) [57]
    Я уже написал, что надо сделать - набисать скрипт на Бейсике и выполнить его в консоли. Никакой другой метод не поможет.
    Скрипт можно найти в Интернете, вроде бы на сайте ISA
  • Anatoly Podgoretsky © (24.05.13 20:50) [58]
    Вот случайно нашел скрипт, может в нем надо сделать поправки

    AddPort.vbs
    dim root
    dim tpranges
    dim newrange
    set root = createobject("FPC.Root")
    set tpranges = root.GetContainingArray.ArrayPolicy.WebProxy.TunnelPortRanges
    set newRange = tpRanges.AddRange("SSL 4433", 4433, 4433)
    tpRanges.Save


    Подробности ищи на сайте сам.
  • I_D © (25.05.13 15:08) [59]

    > Anatoly Podgoretsky

    Спасибо. Теперь начинаю понимать. :)
  • I_D © (25.05.13 15:08) [59]

    > Anatoly Podgoretsky

    Спасибо. Теперь начинаю понимать. :)
 
Конференция "Сети" » Прокси в моей программе [D7, WinXP]
Есть новые Нет новых   [134427   +34][b:0.001][p:0.006]