Отправить запрос DNS с сокетом в Python - PullRequest
0 голосов
/ 11 ноября 2019

Вот что я пытаюсь сделать:

Я посылаю DNS-запрос (с копанием или чем-то еще), и я перехватываю его с сокетом в 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\x01\x00\x01\x00\x00)\x10\x00\x00\x00\x00\x00\x00\x0c\x00\n\x00\x08\x9b+\xc1\xfa\xf4\xbc\x1c\x14'

Это данные изDNS-запрос, который я сделал, но затем я хочу перенаправить его на шлюз и прослушать ответ, но он не получает никакого ответа.

Как я могу это сделать?

1 Ответ

0 голосов
/ 11 ноября 2019

Я предлагаю сначала использовать инструменты, которые уже созданы и отлажены.
Используемый мной инструмент поиска DNS: DNS python

Вам потребуется захватить запрос при помощи запроса. для данных обычно требуется имя сервера, а затем запустите новый запрос с использованием библиотеки 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 и их пересылка, это почти всегда требуетдополнительные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...