Пример кода:
#!/usr/bin/python
import socks
import socket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "127.0.0.1", 9050, True)
socket.socket = socks.socksocket
print urllib2.urlopen("http://almien.co.uk/m/tools/net/ip/").read()
TOR запускает прокси SOCKS на порту 9050 (по умолчанию). Запрос проходит через TOR, всплывая по IP-адресу, отличному от моего. Однако консоль TOR выдает предупреждение:
"Feb 28 22: 44: 26.233 [warn] Ваш приложение (с использованием socks4 до порта 80) дает Tor только IP-адрес. Приложения, разрешающие DNS сами могут утечка информации. Рассмотрите возможность использования Socks4A (например, через privoxy или socat). Для большего информации, см. https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS.
то есть. DNS-запросы не проходят через прокси-сервер. Но то, что должен сделать 4-й параметр setdefaultproxy, не так ли?
Из http://socksipy.sourceforge.net/readme.txt:
setproxy (proxytype, addr [, port [, rdns [, username [, password]]]])
rdns - это логический флаг, чем изменяет поведение DNS разрешения. Если для него установлено значение Истина, DNS разрешение будет выполнено заранее, на сервере.
Тот же эффект с выбранными PROXY_TYPE_SOCKS4 и PROXY_TYPE_SOCKS5.
Он не может быть локальным DNS-кешем (если urllib2 даже поддерживает это), потому что это происходит, когда я изменяю URL-адрес домена, который этот компьютер никогда не посещал раньше.