AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

IP nach Hostname

Ein Thema von DelTurbo · begonnen am 14. Mär 2019 · letzter Beitrag vom 17. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2   
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.003 Beiträge
 
Delphi 2007 Architect
 
#1

IP nach Hostname

  Alt 14. Mär 2019, 15:04
Hi,
ich suche nun schon den ganzen Tag. Leider finde ich nix was Funktioniert. Ich möchte mit dem DNSResolver von Indy mit einer IP den Hostnamen erfragen. Leider weiß ich nicht was ich im QueryType einstellen muss. So sieht meine abfrage aus. Stelle ich qtPTR ein, läuft es zwar aber ich bekomme nur die IP zurück. Nehme ich qtA dann meint er "Der DNS-Server meldet einen Fehler im Abfragenamen." Was muss ich machen/einstellen damit ich den Hostnamen zurückbekomme?

Vielen dank im Voraus

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i :Integer;
begin
    IdDNSResolver1.Resolve('192.168.0.2');
    for i := 0 to IdDNSResolver1.QueryResult.Count-1 do begin
      Memo1.Lines.Add(IdDNSResolver1.QueryResult[i].Name);

    end;
end;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.682 Beiträge
 
Delphi 2009 Professional
 
#2

AW: IP nach Hostname

  Alt 14. Mär 2019, 16:24
Ist der DNS Server denn zugewiesen?

Die fritz.box kann ich mit diesem Code finden:

Delphi-Quellcode:
var
  R: TIdDNSResolver;
  I: Integer;
begin
  R := TIdDNSResolver.Create;
  try
    R.QueryType := [qtPTR];
    R.Host := '192.168.178.1';
    try
      R.Resolve('192.168.178.20'); //

      for I := 0 to R.QueryResult.Count - 1 do
        // WriteLn(BytesToString(R.QueryResult[I].RData));
        WriteLn(R.QueryResult[I].Name);

    except
      on E: Exception do WriteLn(E.Message);
    end;
  finally
    R.Free;
  end;
end;
Ergebnis:
Code:
20.178.168.192.in-addr.arpa
20.178.168.192.in-addr.arpa
fritz.box
Michael Justin
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.003 Beiträge
 
Delphi 2007 Architect
 
#3

AW: IP nach Hostname

  Alt 15. Mär 2019, 08:52
Hi,
diese ausgabe bekomme ich auch. Aber in der letzen Zeile steht der DNS Server mit Namen. Nicht der gesuchte Host. Das ist meine ausgabe. Ich habe hier einen eigenen DNS laufen (Debian/bind9). Zu deiner Frage: Ja, DNS ist eingetragen und bei QueryType qtPTR auf True.

Code:
2.0.168.192.in-addr.arpa
0.168.192.in-addr.arpa
dns-server.lan.int
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
983 Beiträge
 
Delphi 7 Professional
 
#4

AW: IP nach Hostname

  Alt 15. Mär 2019, 09:18
Schau bitte mal, ob Du aus diesem Quelltextfragment schlau wirst (hab' ich in 'nem alten Delphi-7-Programm gefunden):
Delphi-Quellcode:
// DNS = TIdDNSResolver
    s := 'www.delphipraxis.net'; // oder eine IP
    DNS.Host := Reg.NameServer; // Dein DNS-Server
    DNS.ClearInternalQuery;
    DNS.QueryType := [qtA]; // Liefert einen A- und einen Name-Record - hier auch mal die anderen möglichen Varianten probieren z. B. qtName
    Reg.WriteAppInfoLog(Format('DNS-Abfrage: Host = %s',[s]));
    Try
      DNS.Resolve(s);
      Reg.WriteAppInfoLog('DomainName: %s',[DNS.QueryResult.DomainName]);
      if DNS.QueryResult.Count > 0 then begin
      for i := 0 to DNS.QueryResult.Count - 1 do begin
        case DNS.QueryResult.Items[I].RecType of
          qtA: begin
                 if Trim(TARecord(DNS.QueryResult.Items[I]).IPAddress) = 'then begin
                   Reg.WriteAppInfoLog('IP: %s', [GetIPFromRData(DNS.QueryResult.Items[I].RData)]);
                 end else begin
                   Reg.WriteAppInfoLog('IP: %s',[TARecord(DNS.QueryResult.Items[I]).IPAddress]);
                 end;
              end;
          qtNS: Reg.WriteAppLog(' ' + TNSRecord(DNS.QueryResult.Items[I]).HostName);
          qtMD: Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
          qtMF: Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
          qtName: Reg.WriteAppLog(' ' + TNAMERecord(DNS.QueryResult.Items[I]).HostName);
          qtSOA: begin
                   Reg.WriteAppLog(' Primary: ' + TSOARecord(DNS.QueryResult.Items[I]).Primary);
                   Reg.WriteAppLog(' ResponsiblePerson: ' + TSOARecord(DNS.QueryResult.Items[I]).ResponsiblePerson);
                   Reg.WriteAppLog(' Serial: ' + IntToStr(TSOARecord(DNS.QueryResult.Items[I]).Serial));
                   Reg.WriteAppLog(' Refresh: ' + IntToStr(TSOARecord(DNS.QueryResult.Items[I]).Refresh));
                   Reg.WriteAppLog(' Retry: ' + IntToStr(TSOARecord(DNS.QueryResult.Items[I]).Retry));
                   Reg.WriteAppLog(' Expire: ' + IntToStr(TSOARecord(DNS.QueryResult.Items[I]).Expire));
                   Reg.WriteAppLog(' MinimumTTL: ' + IntToStr(TSOARecord(DNS.QueryResult.Items[I]).MinimumTTL));
                 end;
          qtMB: Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
          qtMG: Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
          qtMR: Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
          qtWKS: begin
                   Reg.WriteAppLog(' ' + TWKSRecord(DNS.QueryResult.Items[I]).IPAddress);
                   Reg.WriteAppLog(' ' + IntToStr(TWKSRecord(DNS.QueryResult.Items[I]).Protocol));
                 end;
          qtPTR: Reg.WriteAppLog(' ' + TPTRRecord(DNS.QueryResult.Items[I]).HostName);
          qtHINFO: begin
                     Reg.WriteAppLog(' ' + THINFORecord(DNS.QueryResult.Items[I]).CPU);
                     Reg.WriteAppLog(' ' + THINFORecord(DNS.QueryResult.Items[I]).OS);
                   end;
          qtMINFO: begin
                     Reg.WriteAppLog(' ' + TMINFORecord(DNS.QueryResult.Items[I]).ResponsiblePersonMailbox);
                     Reg.WriteAppLog(' ' + TMINFORecord(DNS.QueryResult.Items[I]).ErrorMailbox);
                   end;
          qtMX: Reg.WriteAppLog(' ' + TMXRecord(DNS.QueryResult.Items[I]).ExchangeServer+',' + IntToStr(TMXRecord(DNS.QueryResult.Items[I]).Preference));
          qtTXT: Reg.WriteAppLog(TTextRecord(DNS.QueryResult.Items[I]).Text.Text);
          else
            Reg.WriteAppLog('?:');
            Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).Name);
            Reg.WriteAppLog(' ' + TResultRecord(DNS.QueryResult.Items[I]).RData);
          end;
        end;
      end else begin
        Reg.WriteAppErrorLog('Kein Ergebnis erhalten.');
      end;
      DNS.Disconnect;
    except
      on e : Exception do begin
        Reg.WriteAppInfoLog('DNS-Abfrage: ' + e.Message);
        try
          DNS.Disconnect;
        except
        end;
      end;
    end;

...

function GetIPFromRData(RData : TIDBytes) : String;
var
  s : String;
  i : Integer;
begin
  s := BytesToString(RData);
  if Length(s) = 4 then begin
    Result := '';
    for i := 1 to Length(s) do Result := Result + IntToStr(Ord(s[i])) + '.';
    Result := Copy(Result,1,Length(Result) - 1);
  end else begin
    Result := s;
  end;
end;
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.682 Beiträge
 
Delphi 2009 Professional
 
#5

AW: IP nach Hostname

  Alt 15. Mär 2019, 10:24
Hi,
diese ausgabe bekomme ich auch. Aber in der letzen Zeile steht der DNS Server mit Namen. Nicht der gesuchte Host. Das ist meine ausgabe. Ich habe hier einen eigenen DNS laufen (Debian/bind9). Zu deiner Frage: Ja, DNS ist eingetragen und bei QueryType qtPTR auf True.

Code:
2.0.168.192.in-addr.arpa
0.168.192.in-addr.arpa
dns-server.lan.int
Der Gegencheck mit ping -a <adresse> liefert das erwartete Ergebnis?
Michael Justin
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.003 Beiträge
 
Delphi 2007 Architect
 
#6

AW: IP nach Hostname

  Alt 15. Mär 2019, 10:36
Hi,
ja. Auch nslookup liefert das richtige zurück.

nslookup 192.168.0.2
Server: dns-server.lan.int
Address: 192.168.0.254

Name: mainpc.lan.int
Address: 192.168.0.2
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.682 Beiträge
 
Delphi 2009 Professional
 
#7

AW: IP nach Hostname

  Alt 15. Mär 2019, 10:44
Hi,
ja. Auch nslookup liefert das richtige zurück.
Ok. Ist es eine aktuelle Indy Version (10.6.2)?

Wird nur für diese Adresse ein Fehler zurückgemeldet oder funktioniert es generell mit keiner Adresse?
Michael Justin
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.003 Beiträge
 
Delphi 2007 Architect
 
#8

AW: IP nach Hostname

  Alt 15. Mär 2019, 13:12
Ups, ich wollte die IndyVersion bei schreiben. Habe es aber wohl vergessen. Es ist Version 10.6.2.0.
Nein, es geht mit keiner IP.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: Region Bern CH
276 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: IP nach Hostname

  Alt 15. Mär 2019, 22:36
Hallo DelTurbo,

du hast irgendwo vor dem Resolve(..) den von dir gewünschten DNS Server angegeben?

In deinem Fall:

IdDNSResolver1.Host := '192.168.0.254'; // Dein DNS Server

Und wenn das auch nicht klappen sollte, hast du "ICS Overbyte" (via GetIt installierbar)? Dort gibt's auch viele Beispiele zu solchen Problemstellungen.

Gruss
Michael
Michael Gasser
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.003 Beiträge
 
Delphi 2007 Architect
 
#10

AW: IP nach Hostname

  Alt 16. Mär 2019, 09:34
Hi,
ich habe das auf der Form liegen. Dort ist alles eingetragen. Deswegen erstelle ich das auch nicht mit Create. Aber im Host ist natürlich der DNS eingetragen. Ich glaube sonst kommt nichts zurück bzw. ein fehler.

Warum ich Indy nehmen "muss". Ich möchte das, wenn es denn mal läuft, auf einem Raspi (ARM CPU) einsetzen. Dort gibt es leider kein Overbyte.

Eigentlich mache ich das immer so. Ich teste das was ich vorhabe in Delphi und wenn es klappt kann ich das in CodeTyphon übernhemen und für diverse Plattformen erstellen. Das klappt immer einwandfrei.

Ich werde heute mal den Code von @Delphi.Narium probieren und berichten ob es klappt.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf