微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python – 通过代理使用socket.gethostbyname

我正在使用TOR代理连接,但是通过socket.gethostbyname(“www.yahoo.com”)代理DNS查询时遇到了困难 – 我了解到它并没有通过使用wireshark嗅探流量来通过代理发送DNS流量.这是我正在使用的代码的副本

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

任何帮助是极大的赞赏!

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

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

s = socks.socksocket()
s.connect(('www.yahoo.com',80))

如果您确实想要通过SOCKS连接执行原始DNS查询,则需要找到可以提供socksocket对象的Python DNS模块.

原文地址:https://www.jb51.cc/python/439682.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐