![](/img/trans.png)
[英]Using python socket.gethostbyname to accept multiple arguments in the command Prompt
[英]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.