![]() |
DNS und kein Ende TARecord
Hallo,
ich bin ein absoluter Delphi Anfänger. Jedoch möchte ich einen Hostnamen zu einer IP Adresse auflösen. Dazu habe ich mir Indy 9.0 auf meine Delphi 7.0PE installiert. Nun habe ich die Indy Demo für den DNS Resolver soweit wie möglich gekürzt. Stehe nun vor dem Problem eine Funktion zu entfernen deren Sinn ich nicht verstehe. hir mein Code:
Delphi-Quellcode:
Ich möchte die funktion GetDetail() einsparen weiß nich wirklich was diese macht. Irgndwie Umwandlung
begin
LB_QueryType.ItemIndex := 0; end; function TDNS_Main.DNS_Perform_Query(Question: string; var Value: string): integer; var DNS : TIdDNSResolver; //var RR , TResultRecord : string; function GetDetail(RR : TResultRecord) : string; begin Result := TARecord(RR).IPAddress; end; begin DNS := TIdDNSResolver.Create(self); // Assign the IP address of the DNS which you want to query //(NSLOOKUP Command: >server 168.95.1.1) DNS.Host := '168.95.1.1'; DNS.QueryRecords := [qtA]; DNS.Active := True; DNS.Resolve(Question); Value := ''; Value := Value + GetDetail(DNS.QueryResult.Items[0]); //Value := Value + DNS.QueryResult.Items[0]; //Value := Value + TARecord.IPAddress; Result := 0; end; procedure TDNS_Main.Btn_QueryClick(Sender: TObject); var Back : string; begin if (DNS_Perform_Query(Ed_Query.Text, Back) = 0 )then begin Memo_Result.Lines.Add(Back); end; end; TARecord in String ? Wie kann ich mit diesem Script einfach erreichen, das die IP in das Memo Feld eingetragen wird ? Wie lautet der systax um einen tarecord in einen String zu verwandeln ? Bitte um Hilfe. MfG Jens John glawion |
Re: DNS und kein Ende TARecord
Hallo zum 2. Mal,
meine erste Frage --> hat sich erledigt. Habe es nun so:
Delphi-Quellcode:
Habe jetzt das Problem, das ich wenn ich
procedure Btn_QueryClick(Sender: TObject);
public end; var DNS_Main: TDNS_Main; implementation {$R *.DFM} procedure TDNS_Main.Btn_QueryClick(Sender: TObject); var DNS : TIdDNSResolver; Question :string; Value:string; AR:TARecord; Back : string; begin Question := Ed_Query.Text; DNS := TIdDNSResolver.Create(self); DNS.Host := '217.237.151.33'; DNS.QueryRecords := [qtA]; DNS.Active := True; DNS.Resolve(Question); Value := ''; AR:=DNS.QueryResult.Items[0] as TARecord; Value := Value + AR.IPAddress; back:=value; Memo_Result.Lines.Add(Back); end; end. ![]() Ungültige Typenumwandlung Gebe ich aber ![]() Kann mir jemand sagen wo der Fehler liegt. mfg John2000 |
Re: DNS und kein Ende TARecord
Google verwendet mehrere Canonical Names:
Code:
sprich DNS.QueryResult.Items[0] ist ein Objekt der Klasse TCNAMERecord (oder wie das Ding dann auch heisst) - ein Cast nach TARecord schlägt korrekterweise fehl....
Query:
Name: [url]www.google.de[/url] Record Type: Host-Address (A) Recursion desired: Yes Requesting records... ok Reply: Code: NoError Authoritative answer: No Truncation: No Recursion available: Yes Roundtrip delay: 206ms 10 records: Answer: [CNAME] [url]www.google.de[/url] / TTL: 345600s (4 d 0:00:00 h) Canonical name = [url]www.google.com[/url] [CNAME] [url]www.google.com[/url] / TTL: 900s (0 d 0:15:00 h) Canonical name = [url]www.l.google.com[/url] [A] [url]www.l.google.com[/url] / TTL: 300s (0 d 0:05:00 h) Address = 66.249.93.99 [A] [url]www.l.google.com[/url] / TTL: 300s (0 d 0:05:00 h) Address = 66.249.93.104 als Workaround könntest du die Items ala "If Items[X] is TARecord Then Items[X] as TARecord" nach A-Records durchsuchen.... |
Re: DNS und kein Ende TARecord
Hallo und Danke,
was mir jetzt noch unklar ist wie ich trotzdem zu der IP Adresse von Google komme. Ich habe nun versucht mit einer weiteren If Bedingung den Wert back (liefert bei ![]()
Delphi-Quellcode:
Ich möchte dann im folgenden prüfen ob die eingegebene Domain www. enthält dieses aud dem String entfernen und eine neue Anfrage (dann: google.de) starten.
if( DNS.QueryResult.Items[0] is TARecord) then
AR:=DNS.QueryResult.Items[0] as TARecord; Value := Value + AR.IPAddress; back:=value; if(back='h/B') then back:='Fehler'; Memo_Result.Lines.Add(Back); Ich vermute das die If Abfrage nicht den entsprechenden Syntax hat. Aber wie gehts richtig ? MfG John2000 |
Re: DNS und kein Ende TARecord
Zitat:
Delphi-Quellcode:
For X:=1 To DNS.QueryResult.Items.Count Do Begin
if not (DNS.QueryResult.Items[X - 1] is TARecord) then Continue; AR:=DNS.QueryResult.Items[X - 1] as TARecord; If (Length(Value) > 0) Then Value:=Value + '; '; Value := Value + AR.IPAddress; // hier wären Trennzeichen noch praktisch (Zeile oberhalb) // falls du nur eine IP brauchst: break; end; { das da muss jetzt anders gelöst werden: back:=value; if(back='h/B') then back:='Fehler'; Memo_Result.Lines.Add(Back); } |
Re: DNS und kein Ende TARecord
Delphi-Quellcode:
uses winsock;
var WSAData: TWSAData; function GetInAddr(host: string):TInAddr; var h : PHostEnt; begin result := TInAddr(inet_addr(pchar(host))); if cardinal(result) = INADDR_NONE then begin h := GetHostByName(pchar(host)); if h <> nil then begin cardinal(result) := pcardinal(h^.h_addr_list^)^; end else cardinal(result) := 0; end; end; function GetIpAsString(host :string):string; begin result := string(inet_ntoa(GetInAddr(host))); end; .... initialization if WSAStartUp($0101,WSAData) <> 0 then showmessage('could not load winsock'); finalization WSACleanUp; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz