gpt4 book ai didi

TOR上的Python urllib?

转载 作者:IT老高 更新时间:2023-10-28 21:10:08 31 4
gpt4 key购买 nike

示例代码:

#!/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 在端口 9050(默认)上运行 SOCKS 代理。该请求通过 TOR,出现在我自己以外的 IP 地址上。但是,TOR 控制台会发出警告:

"Feb 28 22:44:26.233 [warn] Your application (using socks4 to port 80) is giving Tor only an IP address. Applications that do DNS resolves themselves may leak information. Consider using Socks4A (e.g. via privoxy or socat) instead. For more information, please see https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS."

即DNS 查找不通过代理。但这就是 setdefaultproxy 的第四个参数应该做的,对吧?

来自 http://socksipy.sourceforge.net/readme.txt :

setproxy(proxytype, addr[, port[, rdns[, username[, password]]]])

rdns - This is a boolean flag than modifies the behavior regarding DNS resolving. If it is set to True, DNS resolving will be preformed remotely, on the server.

选择 PROXY_TYPE_SOCKS4 和 PROXY_TYPE_SOCKS5 时效果相同。

它不可能是本地 DNS 缓存(如果 urllib2 甚至支持的话),因为它发生在我将 URL 更改为这台计算机以前从未访问过的域时。

最佳答案

问题是 httplib.HTTPConnection 使用 socket 模块的 create_connection在连接套接字之前通过通常的 getaddrinfo 方法执行 DNS 请求的辅助函数。

解决方案是在导入 urllib2 之前制作自己的 create_connection 函数并将其猴子修补到 socket 模块中,就像我们一样使用 socket 类。

import socks
import socket
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)

# patch the socket module
socket.socket = socks.socksocket
socket.create_connection = create_connection

import urllib2

# Now you can go ahead and scrape those shady darknet .onion sites

关于TOR上的Python urllib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148589/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com