私はDNS用のPythonプロキシを持っています。 DNSリクエストを受け取ったら、元のソースに代わってdansguardianにhttpリクエストを渡す必要があります。リクエストに何が起きたのかを判断し、結果を得て、dansguardianからの応答に基づいてクライアントを別の場所にリダイレクトします。Python proxy - > dansguardian:元のソースIPを送信するには?
網状骨格はこのようなものです:、
Client -> DNS Proxy -> DG -> Privoxy -> Web.
クライアントがA
を要求DNSプロキシインターセプト、の答えを取得、クライアントの代わりにDGを尋ねる:1. DGがそれをフィルタ処理した場合、プロキシはローカルIPアドレスを送信A
質問の実際のIPの代わりに。 2. DGがフィルタリングしなかった場合、DNSプロキシはクライアントのネットが自然に流れるようにします。ここで
は、私が試したサンプルPythonコードです:
data,addr = sock.recvfrom(1024)
OriginalDNSPacket = data
# I get OriginalDNSPacket from a socket
# to which iptables redirected all port 53 packets
UDPanswer = sendQues(OriginalDNSPacket, '8.8.8.8')
proxies = {'http': 'http://127.0.0.1:8080'} # DG Port
s = requests.Session()
d = DNSRecord.parse(UDPanswer)
print d
ques_domain = str(d.questions[0].get_qname())[:-1]
ques_tld = tldextract.extract(ques_domain)
ques_tld = "{}.{}".format(ques_tld.domain, ques_tld.suffix)
print ques_tld
for rr in d.rr:
try:
s.mount("http://"+ques_tld, SourceAddressAdapter(addr[0])) # This was a silly try, I know.
s.proxies.update(proxies)
response = s.get("http://"+ques_tld)
print dir(response.content)
print response.content
if "Access Denied" in response.content:
d.rr = []
d.add_answer(*RR.fromZone(ques_domain + " A " + SERVER_IP))
d.add_answer(*RR.fromZone(ques_domain + " AAAA fe80::a00:27ff:fe4a:c8ec"))
print d
socket.sendto(d.pack(), addr)
return
else:
socket.sendto(UDPanswer, addr)
return
except Exception, e:
print e
pass
REQはクライアントから来ている、のような質問は、私はDGに要求を送信する方法であり、それをだましますか?
http://stackoverflow.com/help/mcve – boardrider
ありがとうございます。@ボードライダーがそれを指摘してくれてありがとうございます。これまでに試したことのコードを少し追加しました。この質問は主にdansguardianとプロキシに関するものです。そのため、ここにコードを投稿する必要はないと思います。なぜなら、どうにか関係がなくなるからです。 – mtndesign
いくつかのHTTPヘッダー(クライアントを識別する)を追加して、サーバーを欺くことはできませんか? – boardrider