Namensauflösung hostname - IP-Nummer
Namensauflösung hostname - IP-Nummer
Hallo zusammen,
ich möchte mich zunächst einmal als Neuling in diesem Forum und als Neuling in der Verwendung von Lazarus outen.
Ich habe mir heute auf Windows und Ubuntu7.10 das Lazaruspaket installiert (0.9.24) und
als erste Anwendung einen Miniatur-TCP-Client gebastelt. Dazu habe ich die Komponente
"sockets" installiert ( was mich schon die meiste Zeit gekostet hat ).
Der TCP-Client läuft auch schon ( unter WIN und Linux ), allerdings muss ich bei dem SocketClient die IP-Adresse verwenden und kann nicht den Hostnamen verwenden.
Im Moment fehlt mir jede Idee, wie ich den Hostnamen in eine IP-Adresse umsetzen kann.
Gruß Sig
ich möchte mich zunächst einmal als Neuling in diesem Forum und als Neuling in der Verwendung von Lazarus outen.
Ich habe mir heute auf Windows und Ubuntu7.10 das Lazaruspaket installiert (0.9.24) und
als erste Anwendung einen Miniatur-TCP-Client gebastelt. Dazu habe ich die Komponente
"sockets" installiert ( was mich schon die meiste Zeit gekostet hat ).
Der TCP-Client läuft auch schon ( unter WIN und Linux ), allerdings muss ich bei dem SocketClient die IP-Adresse verwenden und kann nicht den Hostnamen verwenden.
Im Moment fehlt mir jede Idee, wie ich den Hostnamen in eine IP-Adresse umsetzen kann.
Gruß Sig
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
In der Konsole:
als Resultat solltest du die ZielIP sehen.
Wenn du es natürlich Programmseitig machen willst, gibts sicher auch eigene Routinen, ich denk mal, Synapse, Indy usw. können irgendwie Hostnamen aufgelöst zurückgeben.
Code: Alles auswählen
ping Hostname
als Resultat solltest du die ZielIP sehen.
Wenn du es natürlich Programmseitig machen willst, gibts sicher auch eigene Routinen, ich denk mal, Synapse, Indy usw. können irgendwie Hostnamen aufgelöst zurückgeben.
Johannes
Nimm Synapse http://synapse.ararat.cz/
Hallo,
da habe ich doch noch was gefunden: ist also erledigt.
Gruß Sig
da habe ich doch noch was gefunden: ist also erledigt.
Function Name2IPNum(name: string): Longint;
var
{$IFDEF Linux}
MyHost: THost;
{$ENDIF}
{$IFDEF Win32}
MyHost: winsock.PHostEnt;
MyWSAData: winsock.WSAData;
p: Pointer;
{$ENDIF}
begin
{$IFDEF Linux}
MyHost.NameLookup(name);
Name2IPNum:=(Myhost.IPAddress[4] shl 24)+(Myhost.IPAddress[3] shl 16)+(Myhost.IPAddress[2] shl +Myhost.IPAddress[1];
{$ENDIF}
{$IFDEF Win32}
name:=name+#0;
if WSAStartup(1, MyWsaData)=0 then begin
MyHost:=winsock.gethostbyname(@name[1]);
if MyHost<>nil then begin
p:=Pointer(MyHost^.h_addr_list^);
Name2IPNum:=longint(p^);
end else
Name2IPNum:=0;
end else
Name2IPNum:=0;
{$ENDIF}
end;
function GetIPString(lAdr:longint):String;
begin
result := IntToStr(lAdr and $000000FF)+'.'+IntToStr((lAdr and $0000FF00) shr +'.'+
IntToStr((lAdr and $00FF0000) shr 16)+'.'+IntToStr((lAdr and $FF000000) shr 24);
end;
function GetHostByName(sAdr:String):String;
begin
result := GetIPString(Name2IPNum(sAdr));
end;
Gruß Sig
Hallo nocheinmal,
nach dem die Lösung von oben nicht unter Linux sondern nur unter Windows funktioniert hatte,
habe ich noch einmal nachgeforscht und dabei die unit "resolve" gefunden. Damit gehts unter Windows + Linux:
@theo
synapse scheint mir ein wenig zu kompliziert und umfangsreich für meine MiniApplication.
Gruß Sig
nach dem die Lösung von oben nicht unter Linux sondern nur unter Windows funktioniert hatte,
habe ich noch einmal nachgeforscht und dabei die unit "resolve" gefunden. Damit gehts unter Windows + Linux:
Code: Alles auswählen
uses resolve;
..
..
..
function GetHostByName(HostName:String):String;
var
host:THostResolver;
begin
host := THostResolver.Create(nil);
if host.NameLookup(HostName) then
result := host.AddressAsString
else
result := '';
host.Free;
end;
@theo
synapse scheint mir ein wenig zu kompliziert und umfangsreich für meine MiniApplication.
Gruß Sig
sigvdr hat geschrieben:@theo
synapse scheint mir ein wenig zu kompliziert und umfangsreich für meine MiniApplication.
Naja, das musst du selber entscheiden.
Komplizierter als was du da alles "erforschst" ist es aber mit Sicherheit nicht.
Und bzgl. umfangreich: Du musst ja nix installieren. Du brauchst für deinen Fall nur die Unit blcksock und dort die Klasse TTCPBlockSocket
http://synapse.ararat.cz/doc/help/blcks ... ocket.html
Das nimmt dir viel Arbeit ab und läuft dann auch gleich auf Windows / Linux und
Lazarus / Delphi
Aber wie gesagt, entscheide selber.