在过去的几天里,我一直在拔头发寻找一个好的解决方案来防止在socks4/5代理上发生DNS泄漏.
我查看了SocksiPy(-branch)模块,并尝试包装了许多内容(urllib,urllib2,dnstools),但它们似乎仍然泄漏了DNS请求.pyCurl也是如此.
我知道proxychains/proxyresolv可以通过socks4/5代理抛出DNS请求,并且它通过一些LD_PRELOAD库完成所有它的神奇功能来修补套接字的功能,就像SocksiPy一样,但我似乎无法弄清楚为什么它不通过socks4或socks5代理发送DNS.
我想对于Linux我可以使用libproxychains.so的CType来做我的解决方案,但我正在寻找多平台的东西,所以我认为猴子修补套接字模块是要走的路.
有没有人想出一个解决这个问题的好方法?为了便携性,我想在代码中完成所有操作,并且我不想诉诸于运行另一个代理服务器!
谢谢!
Fit*_*lip 17
好吧我明白了.您需要在开始使用套接字之前设置默认代理(例如,在导入使用套接字的任何内容之前).你还需要monkeypatch socket的getaddrinfo部分,然后一切正常.
import socks
import socket
# Can be socks4/5
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4,'127.0.0.1', 9050)
socket.socket = socks.socksocket
# Magic!
def getaddrinfo(*args):
return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
socket.getaddrinfo = getaddrinfo
import urllib
Run Code Online (Sandbox Code Playgroud)
这可以通过您导入的任何模块代替urllib来处理和代理所有DNS请求.希望它可以帮助那里的人!
编辑:您可以在我的博客上找到更新的代码和内容
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |