С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 2

Libcurl + socks proxy + IPv6

04.09.2016, 14:09. Показов 3461. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня есть прокси (3proxy) сервер с поднятым socks прокси. При этом я к прокси-серверу обращаюсь в ipv4 сети,а его внешний адрес находится в ipv6 сети.
Онлайн-чекер говорит, что прокси работает.
Проблема в том, что не могу наладить работу с помощью Libcurl через socks прокси.

Через http прокси страничка vk.com грузится успешно. А через сокс не хочет. Заглянул в логи сервера и увидел следующее:
160903173357.998 2004 00000 root 83.220.239.150:40264 2a00:bdc0:2:18:1:0:213:17:80 69 307 0 GET http://vk.com HTTP/1.1
160903173409.917 2005 00013 root 83.220.239.150:60107 ::ffff:95.213.11.148:80 0 0 0 CONNECT ::ffff:95.213.11.148:80

Первая строчка - работа с http прокси. Вторая - с socks.
Адрес vk.com в IPv4 95.213.11.148 (как я понял, может быть и иной, в зависимости от того, откуда пингую).
Адрес vk.com в IPv6 2a00:bdc0:2:18:1:0:213:17.
Ошибка №13, из документации к 3proxy, означает "сбой подключения connect()".
83.220.239.150 - адрес компьютера, с которого обращаюсь

Посмотрел на это и решил, что, похоже, во втором случае обращение происходит по неверному адресу. Ведь сервер к vk.com должен обращаться в IPv6, и адрес должен быть иной.
Подскажите, почему в первом случае адрес vk.com определился верно, а во втором нет? Правильно понимаю, что это проблема в обращении к серверу, а не в работе сервера? Как сделать, чтобы работало?

Мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
bool proxy::check(char typeproxy,QString site){
    bool good=false;
    //необходимые CURL объекты
    CURL *curl;
    CURLcode result;
    //инициализируем curl
    curl = curl_easy_init();
    //проверяем результат инициализации
    if (curl)
    {
      //задаем все необходимые опции
      //определяем, куда выводить ошибки
      curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
      //задаем опцию - получить страницу по адресу
      curl_easy_setopt(curl, CURLOPT_URL, site.toStdString().c_str());
      //указываем прокси сервер
      curl_easy_setopt(curl, CURLOPT_PROXY, (adr.getstring()+":"+QString().setNum(port)).toStdString().c_str());
      if (typeproxy==0) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
      else curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
      curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD , (login+":"+pass).toStdString().c_str());
      //задаем опцию отображение заголовка страницы
      curl_easy_setopt(curl, CURLOPT_HEADER, 1);
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
      //запускаем выполнение задачи
      result = curl_easy_perform(curl);
      //проверяем успешность выполнения операции
      if (result == CURLE_OK){
          if (buffer!="") good=true;
      }
      else{
        //выводим сообщение об ошибке
          emit out(QString("Ошибка! ")+QString(errorBuffer));
      }
  }
  //завершаем сессию
  curl_easy_cleanup(curl);
  return good;
}
Писал с использованием QT, но думаю, здесь это не очень важно.
По libcurl c IPv6 наяндексилась только фраза "libcurl свободна, потокобезопасна, совместима с IPv6...".

Спасибо.

Добавлено через 1 час 34 минуты
Нашёл пост по теме
Отсюда:
Собственно для того и выкладываю, что если кто то будет искать причину почему не работает socks5 поверх IPv6 – проблема не в сервере, а в клиенте. Тут надо заметить, что по манускриптам, поддержка SOCKS5 в IPv6 работает именно с оговоркой, т.к прохождение пакета требует специальной конфигурации пакета на стороне клиента.
Собственно, вопрос, как это реализовать?

Добавлено через 13 часов 51 минуту
Проверил, если сервер будет v4->v4, а не v4->v6, то всё пашет норм. Но в моём случае пока не всё понятно.

Добавлено через 1 час 13 минут
Написал Заразе (автору 3proxy). Вот его ответ:

Ты запрашиваешь через SOCKS адрес IPv4. Адрес IPv4 не доступен напрямую по IPv6, 3proxy в режиме -6 переводит его в адресацию IPv4 over IPv6 в надежде что кто-то сумеет такой адрес отшлюзовать. Либо запрашивай адрес IPv6 либо делай запрос по имени, тогда при опции -64 или -6 3proxy будет сам разрешать его в IPv6 адрес.
В libcurl для этого достаточно использовать CURLOPT_PROXYTYP со значением CURLPROXY_SOCKS5_HOSTNAME
Поменял CURLPROXY_SOCKS на CURLPROXY_SOCKS5_HOSTNAME и, вроде, заработало.
Всем спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2016, 14:09
Ответы с готовыми решениями:

Libcurl + QT Creator - Какую версию libcurl качать для Windows
Пытаюсь подружить Curl и QT Creator Подскажите пожалуйста какую версию libcurl качать для Windows и как вообще их подружить :) ...

Socks сервер с поддержкой IPv6 + BASH
Здравствуйте комрады! Подскажите пожалуйста аналог Socks сервера 3PROXY (3APA3A), но с поддержкой IPv6. Сервер хочу настроить на VPN с...

TWebbrowser + Proxy (SOCKS)
Доброго времени суток, есть процедура для работы webbrowser с прокси.. procedure proxy(text:string); var PIInfo:...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2016, 14:09
Помогаю со студенческими работами здесь

Socks Proxy Server
Нужно написать проксификатор(Socks 5) В интернете мало информации на эту тему, единственное что нашел в приложениях,и то даже не...

Есть ли возможность использовать HttpWebRequest с socks proxy?
Есть ли возможность использовать HttpWebRequest с socks proxy?

DHCP IPv6, тунелирование IPv6 в Cisco
Здравствуйте! у меня диплом на тему:маршрутизация IPv6: DHCP,тунелирование. Мне интересна эта тема и я хотел бы научиться настраивать сети....

LWP proxy ошибка Error: 407 Proxy authentication required
Есть скрипт: #!/usr/bin/perl use LWP::UserAgent; $ua = LWP::UserAgent->new; $ua->agent('Mozilla/9.0'); $ua->proxy('http'...

Proxy - выдает ошибку HTTP/1.0 407 PROXY AUTHENTICATION REQUIRED
что не так :angry: ? IdHTTP1.ProxyParams.ProxyServer :='прокси'; IdHTTP1.ProxyParams.ProxyPort :=порт; IdHTTP1.GET('URL'); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru