Перейти к содержанию
Fire Monkey от А до Я

Volt-

Пользователи
  • Постов

    11
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Volt-

  1. 9 минут назад, Евгений Корепов сказал:

    Вот посмотрите, просто и красиво TSimpleDNSServer    http://www.delphipraxis.net/87433-dns-server-mit-indys-tiddnsserver-%3D-verwirrung.html

    Спасибо, я раньше находил эту статью, но по ней ещё больше вопросов.
    Пытался воспроизвести у себя, но ругается на WriteToBytes, WordToBytes, LongWordToBytes, ToBytes, BitsToByte, BytesToWord, ReadFromBytes, ByteToBits.

  2. Попробовал сделать через idDNSServer, но ответ так и не приходит в командную строку.
    Выкладываю исходник. DNS2.rar
    Запускаете его, заходите в командную строку и набираете nslookup google.ru 127.0.0.1 и увидите что в неё (командную строку) не придет ответ от нашего сервера DNS.
    Вопрос в том, как правильно сформировать ответ что бы он дошел до командной строки.
    Если у кого получиться добиться получения ответа в командно строке, напиши пожалуйста. Очень хочется разобраться в вопросе.

  3. Пример приложил.
    Запускаете его, заходите в командную строку и набираете nslookup google.ru 127.0.0.1 и увидите что в неё (командную строку) не придет ответ от нашего сервера DNS.
    Вопрос в том, как правильно сформировать ответ что бы он дошел до командной строки.

    DNS.rar

  4. А как сформировать эти данные для отправки в IdDNSResolver1?
    Уже всю голову сломал. =(
     

    procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    begin
    form1.IdDNSResolver1.Resolve('google.ru');
     
    ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort,form1.IdDNSResolver1.ГдеХранитсяОтветВФорматеTBytes);
    end;

    Я не могу понять как мне сделать пакет для отправки ответа. Как TBytes сформировать.
    Или я чего то не так понимаю?

  5. Теперь проблема в следующем. Получив запрос DNS я его отправляю через idDNSResolve и ответ отправить обратно в командную строку.

    procedure TForm1.UDPBeforeQuery(ABinding: TIdSocketHandle;
      ADNSHeader: TDNSHeader; var ADNSQuery: TIdBytes);
    begin
    form1.IdDNSResolver1.Resolve('google.ru');
    
    form1.IdDNSResolver1.DNSHeader.AA:=ADNSHeader.AA;
    form1.IdDNSResolver1.DNSHeader.ANCount:=ADNSHeader.ANCount;
    form1.IdDNSResolver1.DNSHeader.ARCount:=ADNSHeader.ARCount;
    form1.IdDNSResolver1.DNSHeader.BitCode:=ADNSHeader.BitCode;
    form1.IdDNSResolver1.DNSHeader.ID:=ADNSHeader.ID;
    form1.IdDNSResolver1.DNSHeader.NSCount:=ADNSHeader.NSCount;
    form1.IdDNSResolver1.DNSHeader.Qr:=1;
    form1.IdDNSResolver1.DNSHeader.OpCode:=ADNSHeader.OpCode;
    form1.IdDNSResolver1.DNSHeader.QDCount:=ADNSHeader.QDCount;
    form1.IdDNSResolver1.DNSHeader.RA:=ADNSHeader.RA;
    form1.IdDNSResolver1.DNSHeader.RCode:=ADNSHeader.RCode;
    form1.IdDNSResolver1.DNSHeader.RD:=ADNSHeader.RD;
    form1.IdDNSResolver1.DNSHeader.TC:=ADNSHeader.TC;
    
    ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,form1.IdDNSResolver1.DNSHeader.GenerateBinaryHeader);
    end;

    Но в командной строке ответ не отображается. Как правильно его отправить?

  6. Добрый день.

    Кинул на форму idUDPServer1 и Memo1
    В событии idUDPServer1.OnUDPRead написал:

    procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    begin
    Memo1.Lines.Add(BytesToString(AData,13));
    end;

    в событии Form1.OnCreate написал:

    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     idUDPServer1.DefaultPort:=53;
     idUDPServer1.Active:=True;
    end;  

    Запускаю проект.
    Захожу в командную строку Windows и набираю команду:
    nslookup google.ru 127.0.0.1

    В Memo1 появляется DNS запрос, но что то не так с кодировкой.

    Первая строчка должна выглядеть так "1.0.0.127.in-addr.arpa" а вторая и последующие так "google.ru"

    Безымянный1111.jpg

    Как поправить?
     

×
×
  • Создать...