Entwickler-Ecke
Internet / Netzwerk - IP-Adresse aus Hostnamen ermitteln (über DNS-Server)
Silas - So 27.08.06 09:08
Titel: IP-Adresse aus Hostnamen ermitteln (über DNS-Server)
Wie kann ich über den DNS-Server meines Providers die IP-Adresse eines Computers im Internet aus seinem Hostnamen (z.B.
http://www.delphi-forum.de/) ermitteln - und das ganze in Delphi 3 Pro (ich bin ein unverbesserlicher Nostalgiker ;-))?
Silas - So 27.08.06 15:46
*umhilferuf* ;-)
Silas - Mo 28.08.06 09:33
Ich bekomm beim compilieren nur fünf Meter Compilerfehler angezeigt. Mein Delphi ist wahrscheinlich etwas zu vorsintflutlich :oops: . Kannst du mir die Funktion in eine DLL packen, das ich sie trotzem benutzen kann?
Danke!
chrisw - Mo 28.08.06 09:52
Ich benutze immer diese, kenne den Autor allerdings nicht !
Sollte auch unter D3 funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| uses ...,winsock...
function GetIPFromHost (var HostName, IPaddr, WSAErr: string): Boolean; type Name = array[0..100] of Char; PName = ^Name; var HEnt: pHostEnt; HName: PName; WSAData: TWSAData; i: Integer; begin Result := False; if WSAStartup($0101, WSAData) <> 0 then begin WSAErr := 'Winsock is not responding."'; Exit; end; IPaddr := ''; New(HName); if GetHostName(HName^, SizeOf(Name)) = 0 then begin HostName := StrPas(HName^); HEnt := GetHostByName(HName^); for i := 0 to HEnt^.h_length - 1 do IPaddr := Concat(IPaddr, IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.'); SetLength(IPaddr, Length(IPaddr) - 1); Result := True; end else begin case WSAGetLastError of WSANOTINITIALISED:WSAErr:='WSANotInitialised'; WSAENETDOWN :WSAErr:='WSAENetDown'; WSAEINPROGRESS :WSAErr:='WSAEInProgress'; end; end; Dispose(HName); WSACleanup; end; |
Silas - Mo 28.08.06 09:57
Welche Units muss ich für die Funktion einbinden? Mein Compiler kennt einen ganzen Haufen bezeichner nicht.
chrisw - Mo 28.08.06 09:59
eigentlich nur die winsock, wie im Beispiel !!
Silas - Mo 28.08.06 10:02
Extrem-Blamage für mich: Ich hab die uses-Zeile übersehn... :oops: :oops:
Vielen Dank für die Funktion!
Silas - Mo 28.08.06 10:30
Ich geh mal davon aus, dass ich einfach zu dumm bin, aber ich bekomm grundsätzlich meine eigene IP zurück (nicht die 127.0.0.1, sondern meine IP im Netz), egal welchen Hostnamen ich an die Funktion übergeb.
Ich hab an HostName einen Internetadresse übergeben (z.B.
http://www.delphi-forum.de/), und dann die Adresse aus IPAddr ausgelesen. Die Error-Var war immer leer.
Martok - Mo 28.08.06 12:07
Das ist auch irgendwie der Sinn der Funktion. Sie holt immer zuerst den eigenen Hostname (GetHostName).
Wenn du statt dieser Zeile den Inhalt von Hostname in die HName-Variable kopierst, sollte es gehen. Dann allerdings auch dafür sorgen, dass Hostname kein var-parameter ist.
Achso, und: Hostnamen haben kein Protokoll, richtig wäre also
http://www.delphi-forum.de (ohne
HTTP://)
HTH,
Martok
chrisw - Mo 28.08.06 13:46
OK, mein Fehler !
Hier hab ich die function mal umgebaut
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| uses ... winsock..
function GetIPFromHostname (HostName : String): String; type Name =array[0..254] of Char; PName = ^Name; var HEnt: pHostEnt; HName: PName; WSAData: TWSAData; i: Integer; begin Result := ''; if WSAStartup($0101, WSAData) <> 0 then Exit; New(HName); StrPCopy(PChar(HName),HostName); HEnt := GetHostByName(HName^); for i := 0 to HEnt^.h_length - 1 do Result := Concat(Result,IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.'); SetLength(Result, Length(Result) - 1); Dispose(HName); WSACleanup; end; |
Silas - Mo 28.08.06 14:41
Danke, jetzt funktioniert's.
@Matrok: Danke für den Hinweis!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!