首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -通过代理使用socket.gethostbyname

Python -通过代理使用socket.gethostbyname
EN

Stack Overflow用户
提问于 2013-12-12 04:47:10
回答 2查看 4.4K关注 0票数 7

我正在使用TOR代理连接,但是在通过socket.gethostbyname("www.yahoo.com")代理DNS查找时遇到了困难--我了解到它不是通过使用wireshark嗅探流量来通过代理发送DNS流量。这是我正在使用的代码的副本

代码语言:javascript
复制
import StringIO
import socket
import socks  # SocksiPy module
import stem.process
from stem.util import term

SOCKS_PORT = 7000

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)

socket.socket = socks.socksocket

def getaddrinfo(*args):
    return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
socket.getaddrinfo = getaddrinfo

socket.gethostbyname("www.yahoo.com") <--- This line is not sending traffic via proxy

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2014-01-20 10:24:58

您将在socket模块中调用gethostbyname。它对您的SOCKS套接字一无所知;它只是与您的操作系统的名称解析机制交互。设置socket.socket = socks.socksocket可能会影响通过socket模块建立的网络连接,但该模块不会直接连接到socket.socket服务器以执行名称解析,因此替换socket.socket不会对此行为产生影响。

如果只使用主机名调用socks.socksocket对象上的connect(...)方法,则代理将通过SOCKS执行名称解析

代码语言:javascript
复制
s = socks.socksocket()
s.connect(('www.yahoo.com', 80))

如果您真的想通过SOCKS连接执行原始DNS查询,则需要找到一个Python DNS模块,您可以向该模块提供您的socksocket对象。

票数 6
EN

Stack Overflow用户

发布于 2014-02-23 01:47:22

如果你自己用Socks5解析域名系统,你可能会泄露关于你自己计算机的信息。取而代之的是尝试使用Proxifier建立隧道,然后使用Tor。或者,您可以使用SocksiPy的Socks4A扩展。这将确保信息不会泄露。

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

https://stackoverflow.com/questions/20529589

复制
相关文章

相似问题

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