簡體   English   中英

Python - 通過代理使用socket.gethostbyname

[英]Python - Using socket.gethostbyname through proxy

我正在使用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

任何幫助是極大的贊賞!

您在socket模塊中調用gethostbyname 它對SOCKS套接字一無所知; 它只是與您的操作系統的名稱解析機制進行交互。 設置socket.socket = socks.socksocket可能會影響通過socket模塊建立的網絡連接,但模塊不會直接連接到DNS服務器以執行名稱解析,因此替換socket.socket對此行為沒有影響。

如果只是使用主機名在socks.socksocket對象上調用connect(...)方法,代理將通過SOCKS執行名稱解析:

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

如果您確實想要通過SOCKS連接執行原始DNS查詢,則需要找到可以提供socksocket對象的Python DNS模塊。

如果您使用Socks5自行解決DNS,則可能會泄露有關您自己計算機的信息。 而是嘗試使用Proxifier進行隧道傳輸,然后嘗試使用Tor。 或者,您可以使用SocksiPy的Socks4A擴展。 這將確保信息不會泄露。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM