首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DNS over proxy?

DNS over proxy?
EN

Stack Overflow用户
提问于 2012-11-02 03:32:58
回答 1查看 6.9K关注 0票数 14

在过去的几天里,我一直在努力寻找一个好的解决方案来防止socks4/5代理上的DNS泄漏。

我研究了SocksiPy(-branch)模块,并尝试包装了许多东西(urllib、urllib2、dnstools),但它们似乎都仍然泄漏DNS请求。pyCurl也是如此。

我知道proxychains/proxyresolv可以通过socks4/5代理抛出DNS请求,它可以像SocksiPy一样用一些LD_PRELOAD库神奇地修补套接字的函数,但我似乎不明白它为什么不通过socks4或socks5代理发送DNS。

我想对于linux我可以使用CTypes和libproxychains.so来做我的解析,但是我正在寻找一种多平台的东西,所以我认为对套接字模块进行简单的修补是可行的。

有没有人想出一个好办法来解决这个问题?为了可移植性,我想在代码中完成所有这些工作,并且我不想求助于运行另一个代理服务器!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-04 06:40:54

好吧,我想通了。您需要在开始使用套接字之前设置默认代理(例如,在导入任何使用它的内容之前)。您还需要monkeypatch的getaddrinfo部分套接字,然后一切正常。

代码语言:javascript
复制
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

这将通过您导入的任何模块代替urllib工作并代理所有DNS请求。希望它能帮助到外面的人!

编辑:你可以在我的blog上找到更新的代码和东西

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13184205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档