用Python中的套接字发送DNS请求

用Python中的套接字发送DNS请求,python,sockets,dns,Python,Sockets,Dns,以下是我试图做的: 我发送了一个DNS请求(用dig或其他什么),然后用python中的套接字拦截它。然后,我想向网关发送相同的请求,并等待网关的响应 import socket #I redirected all DNS requests from port 53 to port 2525 so I am listening here port = 2525 ip = '127.0.0.1' sock = socket.socket(socket.AF_INET, socket.SOCK_

以下是我试图做的:

我发送了一个DNS请求(用dig或其他什么),然后用python中的套接字拦截它。然后,我想向网关发送相同的请求,并等待网关的响应

import socket

#I redirected all DNS requests from port 53 to port 2525 so I am listening here
port = 2525
ip = '127.0.0.1'

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((ip, port))

#Gateway part
gateway = '192.168.1.1' 
port_gateway = 9090

sock_gateway = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_gateway.connect((gateway, port_gateway))

while 1:
    data, addr = sock.recvfrom(512)

    print(data)
    #send the request from User to the gateway :
    sock_gateway.sendto(data, (gateway, 53))

    reply = sock_gateway.recv(512)

    print(reply)
以下是输出:
b'7\xa3\x01\x00\x01\x00\x00\x00\x00\x00\x01\x06google\x03com\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\n\x00\x08\x9b+\xc1\xfa\xf4\xbc\x1c\x14'

这是我发出的DNS请求中的数据,但是,我想将其转发到网关,并侦听响应,但它没有得到任何响应


我该怎么做呢?

我建议首先使用已经构建和调试的工具。
我使用的DNS查找工具是

您必须通过请求获取所需数据(通常是服务器名称)的请求扫描,然后使用DNS库启动新请求

试图在不改变原始数据的情况下转发请求通常是行不通的

import dns.resolver as dns
gateway = '192.168.1.1' 
port_gateway = 9090

sock_gateway = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_gateway.connect((gateway, port_gateway))

while 1:
    data, addr = sock.recvfrom(512)

    ## extract the request 
    request = extract_the_request_data_Fucntion(data)

    gateway_reponse = dns.query(request, source=gateway_server_ip, source_port=port_gateway)

   ## construct responds code goes here
   ##function to parse the responds and send it back to the client

编写转发器不仅仅是从UDP数据包中提取数据并进行转发,它几乎总是需要额外的更改

当您自己用一些DNS查询包手动查询网关时会发生什么?此外,除了学习,您获取DNS查询并“转发”它们的目的是什么?为什么不直接使用一个已经存在并正确使用的工具,比如
dnsmasq