Ну, изначально приписывать версию протокола это ошибка (как это было сделано в прошлом "решении").
схема описания прокси проще:
[<protocol>=][<scheme>://]<proxy>[:<port>]
то есть, например так:
HTTP=HTTP://proxyserver:port FTP=FTP://proxyserver:port GOPHER=HTTP://proxyserver:port SOCKS=proxyserver:port
Socks4 отличается от socks5 только тем, что возможна авторизация.
Проверить работу с socks5 временно не могу, поэтому толькопредполагаю что проблема решается соответствующими опциями:
InternetSetOption() -> INTERNET_OPTION_PROXY_USERNAME, INTERNET_OPTION_PROXY_PASSWORD
> Опять преждевременно закрыл тему :((. > То решение, о котором я говорил в прошлой теме (приписать > socks4= к IP адресу) оказывается не работает. Я сейчас > попробовал приписать туда "jkls2=" и соединение к моему > большому удивлению было установлено! Оказывается функция > InternetOpen игнорирует строку с прокси, если она задана не > коректно. Также она себя повела и с предыдущей строкой > ("socks4="), а я по своей наивности подумал, что > действительно соединение через прокси прошло. > > Так как же всё-таки мне выходить в интернет через сокс > прокси?
Опять преждевременно закрыл тему :((.
То решение, о котором я говорил в прошлой теме (приписать socks4= к IP адресу) оказывается не работает. Я сейчас попробовал приписать туда "jkls2=" и соединение к моему большому удивлению было установлено! Оказывается функция InternetOpen игнорирует строку с прокси, если она задана не коректно. Также она себя повела и с предыдущей строкой ("socks4="), а я по своей наивности подумал, что действительно соединение через прокси прошло.
Так как же всё-таки мне выходить в интернет через сокс прокси?
Спасибо всем откликнувшимся! Я разобрался со своей проблемой...26.09.09 10:00 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 26.09.09 10:49 Количество правок: 5
Спасибо всем откликнувшимся! Я разобрался со своей проблемой на приемлемом уровне. Всё заработало. Только мне стало интересно, есть ли библиотеки для работы с Интернет, которые работают быстрее, чем Wininet.
В сети нашёл библиотеку libcurl, о которой прочитал в двух местах (ссылки ниже). Переписал свою программу под неё, и оказалось, что она существенно быстрее WinInet. Если WinInet загружала мой трафик на 25-30% и грузила процессор на 100%, то с libcurl моя программа стала загружать трафик на 40-45% и грузить процессор на 80%.
Но вот проблема... Почему-то тот вариант библиотеки, который я скачал (версия 7.19.6, ссылка на неё внутри текста первой статьи + SDK для MSVC версия 7.15., ссылка внутри второй статьи), умеет работать только с SOCKS5. Когда я говорю ей работать с SOCKS4 (задаю CURLOPT_PROXYTYPE значение CURLPROXY_SOCKS4), то, при попытке загрузить страницу, библиотека ругается: "unknown proxytype option given". С SOCKS5 всё работает.
Но! Хоть с SOCKS5 всё и работает, но библиотека продолжает возвращать ошибки (видимо, не критические, поэтому и работает дальше). Вопрос: если я соединяюсь с четвёртыми соксами с использованием опции CURLPROXY_SOCKS5, то может ли это быть причиной ошибок?
Чем вообще SOCKS4 от SOCKS5 отличается, кроме того, что последний требует авторизации?
У меня на интернет канале в 2 мегабит wininet работает когда я не вижу что проц грузит хотя бы на 10%, причём функции дёргаются из-под виртуальной смоллток-машины ;)27.09.09 19:03 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 27.09.09 19:04 Количество правок: 1
Ты чего там, по байтам чтоли инфу принимаешь-отсылаешь? ;)
Код, что плохо работал с вининетом, можно "в студию"?
У меня тоже виртуалка стоит. У тебя 2 мегабита полностью загружаются? Я параллельно 1000 потоков запускаю.27.09.09 19:30 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Ух, заработало! Помог такой рецепт: dll-ки от библиотеки 7.19.6, а SDK от 7.19.3. Кто-нибудь знает, такое враварство случайно боком ни где не вылезет в будущем?26.09.09 11:42 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Ну, изначально приписывать версию протокола это ошибка (как это было сделано в прошлом "решении").
схема описания прокси проще:
[<protocol>=][<scheme>://]<proxy>[:<port>]
то есть, например так:
HTTP=HTTP://proxyserver:port FTP=FTP://proxyserver:port GOPHER=HTTP://proxyserver:port SOCKS=proxyserver:port
Socks4 отличается от socks5 только тем, что возможна авторизация.
Проверить работу с socks5 временно не могу, поэтому толькопредполагаю что проблема решается соответствующими опциями:
InternetSetOption() -> INTERNET_OPTION_PROXY_USERNAME, INTERNET_OPTION_PROXY_PASSWORD
> Опять преждевременно закрыл тему :((. > То решение, о котором я говорил в прошлой теме (приписать > socks4= к IP адресу) оказывается не работает. Я сейчас > попробовал приписать туда "jkls2=" и соединение к моему > большому удивлению было установлено! Оказывается функция > InternetOpen игнорирует строку с прокси, если она задана не > коректно. Также она себя повела и с предыдущей строкой > ("socks4="), а я по своей наивности подумал, что > действительно соединение через прокси прошло. > > Так как же всё-таки мне выходить в интернет через сокс > прокси?
И ещё один вопрос в догонку.22.09.09 17:53 Автор: Vedrus <Serokhvostov Anton> Статус: Member
После вызова InternetOpen идёт вызов InternetConnect. В последней, в числе прочего есть параметр INTERNET_PORT nServerPort, который может принимать (в том числе) такие значения:
INTERNET_DEFAULT_HTTP_PORT
INTERNET_DEFAULT_SOCKS_PORT
Так вот он вопрос: нужно ли здесь тоже ставить "соксовую" константу, или нужно оставить http-шную?
Ты чего такой несамостоятельный? -))23.09.09 08:49 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 23.09.09 09:01 Количество правок: 1
Залазь на MSDN и не вылазь оттуда, пока всё не заработает! -))
Вот тебе рабочий пример работы с вининетом.
Правда, метод используется PUT, и прокси не юзает. Но так всё похоже.
Извини за языг программирования, но разобраться можно, я надеюсь -))
Так вот в том-то всё и дело, что без прокси всё работает, а с прокси не хочет. из msdn'а и так не вылажу, но он информацией по поводу socks-proxy особо не балует23.09.09 09:06 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 23.09.09 09:09 Количество правок: 1
В InternetConnect уже ничего не должно быть проксячего, всё делает InternetOpen, если вернутсья к твоему вопросу ;)23.09.09 10:07 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 23.09.09 10:30 Количество правок: 1
Данную схему я тоже уже в MSDN видел. Комбинация "socks=" была у меня первой. Авторизация на моём прокси не требуется (он к IP привязан). Например, в Fire Fox я прописываю только адрес и порт. Моя же программа не хочет работать.
Ещё я в MSDN вычитал, что socks поддерживается библиотекой WinInet только в том случае, если socsks поддерживается Internet Explorer'ом. И ещё там говорится, что если Internet Explorer поддерживает socks, то в системе должна присутствовать библиотека Wsock32n.dll.
SOCKS в Internet Explorer у меня работает, а вот библиотеки такой нету, как это понимать?
[win32] работающий пример socks4 внутри, а с пятым - сам в ступоре: error_internet_incorrect_handle_type22.09.09 19:09 Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 22.09.09 19:13 Количество правок: 4
---
Но если после InternetOpen.. добавить пару строк типа
result = InternetSetOption(hInternet,INTERNET_OPTION_PROXY_USERNAME,user,sizeof(user));
if (!result) cout << "Error #"<< GetLastError() << endl;
---
вывалится сообщение об ошибке #12018, которая является константой ERROR_INTERNET_INCORRECT_HANDLE_TYPE -- The type of handle supplied is incorrect for this operation.
Резюме:
Носки 4-го размера, устанавливаются InternetOpen("UserAgent", INTERNET_OPEN_TYPE_PROXY, "socks=address:port",...);
Носки пятого размера надеть я не смог. Предполагаю, что IE не совместим с ними, хотя это только предположение.
> Данную схему я тоже уже в MSDN видел. Комбинация "socks=" > была у меня первой. Авторизация на моём прокси не требуется > (он к IP привязан). Например, в Fire Fox я прописываю > только адрес и порт. Моя же программа не хочет работать. > > Ещё я в MSDN вычитал, что socks поддерживается библиотекой > WinInet только в том случае, если socsks поддерживается > Internet Explorer'ом. И ещё там говорится, что если > Internet Explorer поддерживает socks, то в системе должна > присутствовать библиотека Wsock32n.dll. > > SOCKS в Internet Explorer у меня работает, а вот библиотеки > такой нету, как это понимать?
Спасибо, с InternetOpenURL у меня тоже заработало. Но мне...23.09.09 05:26 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Спасибо, с InternetOpenURL у меня тоже заработало. Но мне нужно ещё и данные POST передавать. InternetOpenUrl позволяет делать это? Если нет, то мне надо надеть носки на комбинацию InternetConnect/HttpOpenRequest/HttpSendRequest. Пока этого мне сделать не удалось (возвращается пустой ответ сервера), причём что с вашим IP, что и с моим (соксовым), который реально работает.
Функция InternetReadCompleteFile - моя собственная, которая построена на базе InternetReadFile (она рабочая 100%).
Может быть нужно поиграться с константами INTERNET_DEFAULT_HTTP_PORT и INTERNET_SERVICE_HTTP? Я пробовал их менять на другие, но результата это не дало.
Кстати, только сейчас заметил: здесь функция HttpOpenRequest...23.09.09 09:09 Автор: Vedrus <Serokhvostov Anton> Статус: Member