Python, реализующий поддержку прокси для приложения на основе сокетов (не urllib2)

Я немного в тупике: у меня есть простая клиентская программа для обмена сообщениями (чистый python, сокеты), и я хотел добавить поддержку прокси (http/s, socks), однако я немного запутался, как это сделать. Я предполагаю, что соединение на уровне сокета будет выполнено с прокси-сервером, после чего заголовки должны содержать CONNECT + IP-адрес назначения (сервера чата) и аутентификацию (если этого требует прокси), однако остальное немного выше меня. Как обрабатывается последующее соединение, в частности чтение/запись и т. д.?

Существуют ли какие-либо руководства по реализации поддержки прокси для программирования на основе сокетов (tcp) в Python?

Спасибо


person Terry Felkrow    schedule 15.04.2010    source источник


Ответы (3)


Возможно, используйте что-то вроде SocksiPy, который сделает за вас всю информацию о протоколе и позволит вам подключаться через прокси-сервер SOCKS как ты бы без него?

person Vin-G    schedule 26.04.2010
comment
Это хорошо работает. Мне удалось все интегрировать, и код SocksiPy точно показывает, что происходит при туннелировании HTTP/SOCKS. Я очень удивлен, что не нашел его раньше, спасибо! - person Terry Felkrow; 29.04.2010

Это довольно просто - после того, как вы отправляете HTTP-запрос: CONNECT example.com:1234 HTTP/1.0\r\nHost: example.com:1234\r\n<additional headers incl. authentication>\r\n\r\n, сервер отвечает HTTP/1.0 200 Connection established\r\n\r\n, а затем (после окончания двойной строки) вы можете общаться так же, как вы общались бы с портом 1234 example.com без прокси (как я понимаю, вы часть взаимодействия клиент-сервер уже выполнена).

person Messa    schedule 26.04.2010
comment
Спасибо за этот ответ, очень признателен. Однако мне пришлось согласиться с предыдущим плакатом, потому что я смог довольно легко интегрировать его решение, и код даже демонстрирует обработку SOCKS4/5 в дополнение к туннелированию HTTP. - person Terry Felkrow; 29.04.2010

Взгляните на stunnel.

Stunnel может позволить вам защитить демоны и протоколы, не поддерживающие SSL (такие как POP, IMAP, LDAP и т. д.), за счет того, что Stunnel обеспечивает шифрование, не требуя изменений в коде демона.

person Anurag Uniyal    schedule 26.04.2010