Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.213.27] |
|
Сообщ.
#1
,
|
|
|
Добрый день.
Помогите понять, почему не работает. Для доступа в интернет я использую прокси сервер(Калина), который использует NTLM авторизацию. 1 случай: Броузер на прямую настраиваю на прокси(Калина), прохожу авторизацию, работаю(+) 2 случай: Для контроля трафика Использую локальный просик(Fiddler). Схема такая Броузер-Fiddler-Калина. Авторизируюсь, работаю. !3! случай: В цепочку вставляю свой проксик(Мой), который(теперь) просто ретранслирует данные. Схема: Броузер-Мой-Фиддлер-Калина. !!!Не могу пройти авторизацию..... Запросы проходят как надо... Калина просто не пропускает просит, авторизоваться. Я просто в шоке!!!! Я думал, что я что то лишнее передаю, или не передаю, но все данные которые я отсылаю во ввсех случая одинаковые, я проверял... Я не могу понять по чем он меня бокопорит? Сам кусок кода в котором я реализирую пересылку.... Спасибо. TcpClient toPHP = new TcpClient(); toPHP.Connect("хост", "порт"); int read = 0; do { byte[] buffer = new byte[bufferSize]; read = clientSocket.Receive(buffer); if (read < bufferSize) Array.Resize<byte>(ref buffer, read); toPHP.Client.Send(buffer); } while (read != 0 && read == bufferSize); // read = 0; do { byte[] buffer = new byte[bufferSize]; read =toPHP.Client.Receive(buffer); if (read < bufferSize) Array.Resize<byte>(ref buffer, read); clientSocket.Send(buffer); } while (read != 0 && read == bufferSize); // toPHP.Close(); clientSocket.Close(); |
Сообщ.
#2
,
|
|
|
Скорее всего напрасно закрываешь сокет. По идее сокеты надо держать открытыми, пока оба (браузер и фиддлер) не договорятся и сами не закроют сокеты.
|
Сообщ.
#3
,
|
|
|
Uncle_Bob, Пробывал результат тот же.
Люди, у кого есть возможности посмотрите пожалуйста исходники и протэстируйте на сети NTLM авторизацией. Там всего-лишь два класса, ничего лишнего, никаких дополнительных фич... Взгляните на дампы сессии авторизации.... Вроде бы всё проходит, но не пускает... Спасибо. Прикреплённый файлProxyServerSmall_081709.zip (161.48 Кбайт, скачиваний: 80) |
Сообщ.
#4
,
|
|
|
Дампы сессий.
Good Сессия которая удачно загружает изображение(случай 2). Bad Неудачная сессия(случай 3). Прикреплённый файлsessions.rar (4.94 Кбайт, скачиваний: 83) |
Сообщ.
#5
,
|
|
|
Цитата Flanker @ Uncle_Bob, Пробывал результат тот же. clientSocket.Close(); В коде сокет по-прежнему закрываешь |
Сообщ.
#6
,
|
|
|
Uncle_Bob, Если я закрываю clientSocket.Close();
То что то долго они расходятся, то есть браузер чего-то ждёт.... clientSocket - Сокет между Броузер->Мой(прокси) Когда закрываю toPHP, то без тормозов, но тот же самый эффект, просит авторизации. toPHP- Сокет между Мой(прокси)->Калина(прокси) Спасибо. |
Сообщ.
#7
,
|
|
|
по-моему ты внутри своего Run должен код обернуть в цикл
while (браузер или прокся не закрыли сокет) { ... } |
Сообщ.
#8
,
|
|
|
Спасибо.
Смогу попробовать только завтра на работе... О результатах доложу. |
Сообщ.
#9
,
|
|
|
Пробывал, ничего хорошего...
Ничего не получилось, после возвращения ответа, Броузер сам закрывает соединение, С фиддлером приходится закрывать самому, а если пытаюсь отослать, какуе-то чепуху, он сразу разрывает соединение.... Спасибо. Может NTLM авторизация проходит через один сеанс, тремя посылками запрос-ответ? reuseable=true; Socket.Disconnect(reuseable); Ну а как же мне тогда, следующий запрос броузера засунуть именно в тот сокет? Сам понимаю, что это чепуха.... Спасибо. |