Конференция "Сети" » аутефикация на прокси [D7, WinXP]
 
  • Kav (19.01.08 13:01) [0]
    Перерыл исходники прокси-серверов, но ни в каком нет примера аутефикации пользователей
    есть ли такие исходнки или описание как это сделать
  • DVM © (19.01.08 15:11) [1]
    В заголовке запроса должно быть 'Proxy-Authorization: Basic ' + EncodeBase64(ProxyUserName + ':' + ProxyPassword)
  • Kav (19.01.08 16:22) [2]
    DVM , у меня есть прокси на него коннектятся пользователи и мне надо им либо дать интерет либо нет
    и куда мне это нужно примостить 'Proxy-Authorization: Basic ' + EncodeBase64(ProxyUserName + ':' + ProxyPassword)
  • DVM © (19.01.08 16:44) [3]

    > Kav   (19.01.08 16:22) [2]

    Ты делаешь сам прокси или клиентскую программу, которая должна работать через прокси?
  • Kav (19.01.08 17:32) [4]
    DVM,
    Делаю сам прокси :)
  • DVM © (19.01.08 18:09) [5]
    Если ты делаешь HTTP прокси, то должен знать принцип его работы. Клиент делает HTTP запрос к прокси, прокси разбирает запрос и делает почти такой же, но уже от своего имени запрос к HTTP серверу.

    Если нужен прокси с HTTP Basic авторизацией, то необходимым условием для работы клиента через такой прокси будет особым образом построенный HTTP запрос. В нем будут следующие изменения:

    1) Вот обычный запрос безо всяких прокси, направленный непосредственно HTTP серверу:


         FRequest := 'GET ' + Path + ' HTTP/' + HTTPVersion + CRLF +
                     'Accept: */*' + CRLF +
                     'Pragma: no-cache' + CRLF +
                     'Cache-Control: no-cache' + CRLF +
                     'User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Win32)' + CRLF +
                     'Host: ' + Host + ':' + inttostr(Port) + CRLF;
                     'Authorization: Basic ' + EncodeBase64(UserName + ':' + Password) + CRLF +
                     'Connection: Keep-Alive' + CRLFCRLF;



    2) А вот так запрос будет выглядеть если он направляется проки серверу.


         FRequest := 'GET http://' + Host + ':' + inttostr(Port) + Path + ' HTTP/' + HTTPVersion + CRLF +
                     'Accept: */*' + CRLF +
                     'Pragma: no-cache' + CRLF +
                     'Cache-Control: no-cache' + CRLF +
                     'User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Win32)' + CRLF +
                     'Host: ' + Host + ':' + inttostr(Port) + CRLF +
                     'Authorization: Basic ' + EncodeBase64(UserName + ':' + Password) + CRLF +
                     'Proxy-Authorization: Basic ' + EncodeBase64(ProxyUserName + ':' + ProxyPassword) + CRLF +
                     'Connection: Keep-Alive' + CRLFCRLF;

  • DVM © (19.01.08 18:10) [6]
    Причем в первом случае надо устанавливать соединение с самим сервером, а во втором с прокси сервером.
  • Kav (22.01.08 10:09) [7]
    DVM,
    я не очень сильно понимаю работу прокси сервера, я взял
    исходник http://www.delphisources.ru/pages/sources/internet/2005_year/alt_http_proxy.html
    и хотел его переделать под себя, но не знаю даже с какой стороны к нему подбираться
    P.S. сразу скажу в Delphi я хорошо разбираюсь просто не когда не работал с сетью.
  • DiamondShark © (22.01.08 10:33) [8]

    > я не очень сильно понимаю работу прокси сервера

    так пойми. почитай RFC.

    А то ты сейчас в ситуации вроде: "Мужики, я не очень умею ездить, куда тут ключ зажигания вставлять?"
  • Slym © (22.01.08 10:42) [9]
    код ужасный, писал наверно сиплюсоид
    найди строку if Authenticate(MS) <> -1 и раскоментируй ее...
  • Slym © (22.01.08 10:48) [10]
    Slym ©   (22.01.08 10:42) [9]
    код ужасный

    не просто ужастный, а никчемный... месиво из 3х!!! сокетных компонент
  • Kav (22.01.08 10:51) [11]
    DiamondShark,
    RFC - что такое и где взять ? вв яндексе куда-то не туда послали :)
    Slym,
    Окей попробую
  • Kav (22.01.08 10:52) [12]
    >> не просто ужастный, а никчемный... месиво из 3х!!! сокетных компонент
    а есть исходники попроще ?
  • DiamondShark © (22.01.08 12:10) [13]

    > вв яндексе куда-то не туда послали


    http://www.yandex.ru/yandsearch?text=RFC+http+proxy+authentication&rpt=rad
  • Slym © (22.01.08 13:20) [14]
  • Kav (22.01.08 16:53) [15]
    Slym
    спасибо щас буду смотреть
  • Kav (24.01.08 10:01) [16]
    А вот еще один вопрос:  можно ли  сделатьтак  что если юзер авторизировался,  его пароль держался бы пока он не завершит свой сеанс в Windows ?
  • Slym © (24.01.08 10:12) [17]
    Разобрался в моем коде?
    Kav   (24.01.08 10:01) [16]
    держался

    держался где?
    В рамках 1 сеанса браузера с сервером пароль хранится в памяти браузера... Можно поставить "галку" сохранить пароль тогда он сохраняется гдето в системе...
  • Kav (24.01.08 10:39) [18]
    Slym, чуть-чуть разобрался (просто времени свободного не было),
    У меня проблема такая компы у меня как бы общие т.е. любой сотрудник организацию за него может сеть и поработать ( и мне нужно всети статиску сколько они мегабайт затратили на интернет и на каких сайтах побывали),
    И в них есть учетная запись - читатель каждый входит в компьютер под ней
    если поставить галку сохранить пароль, то при следущем входе в систему
    он уже будет как бы введен, так что это не подходит
    P.S.  много уйдет времени если делать еще  поддержку HTTPS ?
  • Slym © (24.01.08 11:15) [19]
    готовое не проще взять? этих считалок проксей как китайцев на планете... к томуже с кэшированием... и "умным" рефрешем
    Kav   (24.01.08 10:39) [18]
    P.S.  много уйдет времени если делать еще  поддержку HTTPS ?

    15 мин... она там практически реализована...
  • Slym © (24.01.08 11:40) [20]
       try
         FRemoteSocket.Open(RemoteHost,'','',RemotePort);
         if AnsiStartsText('CONNECT', Query.Strings[0]) then
         begin
           ClientSocket.SendLn('HTTP/1.0 100 Continue');
           ClientSocket.SendLn('');
         end else
         begin
           for i:=0 to Query.Count-1 do
           begin
             if not FRemoteSocket.Connected then break;
             if Query.ValueFromIndex[i]='' then Continue;
             FRemoteSocket.SendLn(Query.Strings[i]);
           end;
           FRemoteSocket.SendLn('');
         end;
         DoTunneling(ClientSocket,FRemoteSocket);
       finally
         FRemoteSocket.Close;
       end;

  • Slym © (24.01.08 13:20) [21]
    Slym ©   (24.01.08 11:40) [20]
    ClientSocket.SendLn('HTTP/1.0 100 Continue');

    сори...
    ClientSocket.SendLn('HTTP/1.0 200 OK');

  • Kav (25.01.08 10:16) [22]
    окей, попробую :)
  • Kav (25.01.08 11:03) [23]
    Есть одна проблема, нельзя на yandex зайти в свой почтовый ящик через web интерфейс, с чем это может быть связано ?
  • Kav (26.01.08 09:02) [24]
    имеется в виду через прокси
  • XakeP (27.01.08 00:36) [25]
    О! Я вижу, что нашел интересующую меня тему. Мне тоже нужна программка, но немного по круче. Я хочу сделать со своего кома прокси-сервер. Пробовал использовать разные программы, но так и не нашел такой, которая обеспечила бы все, что мне нужно. Может, кто поможет написать такую.
    Итак, что мне надо:
    1)   аутентификация пользователей, включая их IP
    2)   возможность ограничения для каждого пользователя скорости входящего и исходящего потоков отдельно, а также смена этих значений в зависимости от количества подключенных пользователей и их активности
    3)   форма где можно будет увидеть кто с кокой скоростью в данный момент качает/отдает данные и сколько скачал/отдал за текущие сутки/месяц. + сохранить это в файл.
  • XakeP (27.01.08 00:36) [26]
    Удалено модератором
    Примечание: дубль
  • ketmar © (27.01.08 13:02) [27]
    2хацкер: почесать репу; потом купить старую железяку за смешное количество долларов; воткнуть туда, например, Linux; настроить iptables и squid; наслаждаццо. писать ничего не надо, честно.
  • XakeP (27.01.08 14:33) [28]
    Не-е-е. Я в линуксе вообще ноль. Мне надо бы что-то под ХР.
    Прогу которую подарил Slym © думаю можно немного усовершенствовать для этих целей. Я вчера пробовал немного разобраться с ней. Оказалось, что менеджер закачек не качает. Выдает ошибку:
    HTTP/1.0 407 Proxy Authentication Required
    Proxy-Authenticate: Basic realm="ALTERNATIVE PROXY"
    Это можно исправить?
  • ketmar © (27.01.08 14:46) [29]
    натурально, авторизацию включить. ежели оная там верно реализована.

    или всё-таки брать инструменты под задачу, а не пытаться придать задаче форму кактуса.
  • XakeP (27.01.08 15:08) [30]
    Сори, не досмотрел :)
    Выдает socket error=10053
  • ketmar © (27.01.08 15:10) [31]
    >[30] XakeP(27.01.08 15:08)
    логично. ты не представился — тебя отстрелили в стратосферу.
  • XakeP (27.01.08 15:15) [32]
    Неа. Что-то не так. Я в менеджере задал имя пользователя и пароль!
  • XakeP (27.01.08 15:31) [33]
    и сам прокси в этом месте

    raise ESocketError.CreateResFmt(@sWindowsSocketError,


    выдает ошибку
  • ketmar © (27.01.08 15:53) [34]
    ты будешь смеяться, но raise — оно для того и сделано, чтобы исключение кидать.

    а что ты там и где задал — это только одна сторона. я ж сказал: корректность должна быть с обеих сторон. я лично код прокси не читал, но всё равно осуждаю.
  • XakeP (27.01.08 16:06) [35]
    Ну, если кто-то удосужился прочитать код – плиз хелп!
  • XakeP © (27.01.08 23:06) [36]
    а что можете сказать об этом:
    _http://www.delphisources.ru/pages/sources/internet/2005_year/alt_http_proxy.html ?
  • Slym © (28.01.08 05:35) [37]
    XakeP   (27.01.08 14:33) [28]
    Прогу которую подарил Slym © думаю можно немного усовершенствовать для этих целей.

    Совершенствуй :)... Этот пример был накидан за пару -тройку 15мин. пауз между работой... Это только пример! т.к. в нем замечен баг который позволяет работать только в рамках "быстрой" сети:
    r:=Peer1.ReceiveBuf(Buf,Length(Buf));
    if r=0 then exit;
    s:=Peer2.SendBuf(Buf,r);
    if r<>s

    then exit;
    а должен терпеливо ждать для досыла и не истерично рвать соединение
  • ketmar © (28.01.08 07:38) [38]
    да там, наверняка, и работа с заголовками вовсе отсутствует. я не читал, но сильно это подозреваю. %-)
  • Kav (28.01.08 09:41) [39]
    Сейчас скачал squid под Windows, посмотреля на него и она мне не понравилась.
  • ketmar © (28.01.08 09:44) [40]
    мне сквид и не под винду не нравится. он, как бы это помягче сказать… не для дома.
  • Anatoly Podgoretsky © (28.01.08 15:24) [41]
    > ketmar  (28.01.2008 09:44:40)  [40]

    А аутефикация она как бы тоже не для дома.
  • Kav (29.01.08 08:46) [42]
    Мне аутефикация на работе к примеру нужна, мне каждый квартал нужно будет сдавать отчет по каждому пользователи сколько он в нете пробыл, по какие самы посещаемые сайты были и т.д. а в распорежении только один Windows Server 2003
    Какие есть бестланые прокси, но и чтоб у них интерфейс присутствовал, и они могли сохранять отчеты по использованию интернет
  • Slym © (29.01.08 09:04) [43]
    Обычно разделяют отчеты и коммуникации: прокси + анализатор логов
    http://www.redline-software.com/rus/products/iam/?r1=softportal&r2=opisanie
  • Kav (29.01.08 09:23) [44]
    Вот, вот а бесплатного опять ничего нету ...
  • SpellCaster (04.02.08 19:33) [45]
    3proxy поковыряй, он правда консольный, но довольно прост в освоении, по крайней мере, если у тебя нет специфических задач. И лог-анализатор имеется.
  • ketmar © (04.02.08 19:46) [46]
    >[44] Kav (29.01.08 09:23)
    squid. бесплатнее некуда.
  • SpellCaster (05.02.08 11:17) [47]
    3proxy попроще, хотя с кальмаром я дела не имел, но подозреваю, что, подобно большинству никсовых тулз, это тот еще изврат))
  • ketmar © (05.02.08 12:46) [48]
    >[47] SpellCaster (05.02.08 11:17)
    да, 3ара3а проще. и в настройке, и в прожористости, и вообще. сквид — тот ещё монстр.

    только я не уверен, что 3ара3а умеет http-авторизацию. по ip фильтровать точно умеет, а вот http auth — фиг помнит.
  • SpellCaster (05.02.08 14:16) [49]
    Ммм... не знаю как насчет именно хттп, но авторизация там имеется по паролю, и в настройках ИЕ я это настраивал. А вот хттп или не хттп - это хрен хнает, но поскольку ИЕ умеет лазить только через хттп-прокси, логично предположить, что и авторизация такая же.
    Плюс, сейчас через плугин можно делать виндовскую авторизацию, по учетной записи виндов.
  • kernel © (08.02.08 18:34) [50]
    Чтобы новую ветку не создавать, напишу тут :)

    В общем, на основе TIdHTTPProxyServer сделал что-то вроде:

    MyProxy:=TIdHTTPProxyServer.Create;
    MyProxy.DefaultPort:=3128;
    MyProxy.Bindings.DefaultPort:=3128;
    MyProxy.OnConnect:=MyProxyServer.MOnQuery;
    MyProxy.OnHTTPDocument:=MyProxyServer.MHTTPDocument;
    MyProxy.Active:=true;



    В надежде словить какие-нибудь входящие данные с AContext в  TMyProxyServer.MOnQuery прописал:

    procedure TMyProxyServer.MOnQuery(AContext: TIdContext);
    begin
      Writeln(AContext.Connection.IOHandler.ReadLn);
    {  ^^^ в консольном  }
    end;



    И тут натыкаюсь на первые грабли - в консольку полученные от AContext данные вырисовываются нормально, НО после чего клиент (в данном случае браузер) в ожидании получения данных (т.е. страницы) "застывает".

    Вопрос: что я делаю не так?
  • ketmar © (08.02.08 18:58) [51]
    >[50] kernel © (2008-02-08 18:34:00)
    >что я делаю не так?

    наверное, документ не отдаёшь?

    ---
    Understanding is not required. Only obedience.
  • kernel © (08.02.08 19:41) [52]

    > ketmar ©   (08.02.08 18:58) [51]
    > ...
    > наверное, документ не отдаёшь?


    Ну так IdHTTPProxyServer сам же должен выдавать нужный документ?! Без AContext.Connection.IOHandler.ReadLn все работает. Или если я забираю IOHandler, то дальше мне самому что-ли нужно управлять выдачей документа?
  • ketmar © (08.02.08 20:27) [53]
    а хрен его знает. я не зря вопрос поставил. жди, пока кто-то с опытом индейского секса придёт.

    ---
    Understanding is not required. Only obedience.
  • Kav (09.02.08 12:21) [54]
    установил 3proxy
    а он не хочет запускаться пишет что-то про лицензию
    3proxy tiny proxy server 3proxy-0.6b-devel (080207011317)
    (c)2000-2007 3APA3A, Vladimir Dubrovin & 3proxy.ru
    Documentation and sources: http://3proxy.ru/
    Please read license agreement in 'copying' file.
    You may not use this program without accepting license agreement
    Как мне с этой лицензией согласиться ?!
  • ketmar © (09.02.08 12:28) [55]
    >[54] Kav (2008-02-09 12:21:00)
    а ты подумай немного. доки почитай. оно полезно.

    хинт: конфиги, батенька, конфиги. написать и скормить. а то плохо работает.

    ---
    Understanding is not required. Only obedience.
  • kernel © (09.02.08 17:15) [56]

    > kernel ©   (08.02.08 18:34) [50]


    Проблему решил использованием IOHandler.Capture.
  • Kav (11.02.08 09:08) [57]
    ketmar
    Там все почти на аглийском мне тяжело разобраться!
    Ну кто-нибудь подскажите
  • SpellCaster (11.02.08 13:20) [58]
    > [57] Kav   (11.02.08 09:08)

    Семь слоев матрешки, или Настройка 3proxy для чайников
    http://3proxy.ru/doc/html/fordummies.html

    потом ступай в ФАК, а потом уже и до мануала доберешься.
  • Kav (11.02.08 13:46) [59]
    http://3proxy.ru/doc/html/fordummies.html
    это я читао ни слова там нету о лицензии
  • ketmar © (11.02.08 15:46) [60]
    >[59] Kav (2008-02-11 13:46:00)
    найми админа, не занимайся с нами церебральным сексом. тебе буквами по форуму написали, что конфиг надо. какие буквы вызывают затруднение?

    ---
    Understanding is not required. Only obedience.
 
Конференция "Сети" » аутефикация на прокси [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0.001][p:0.004]