Entwickler-Ecke

Internet / Netzwerk - hostnamen über ipadresse


Harry M. - Mi 02.02.05 20:32
Titel: hostnamen über ipadresse
wie bekomme ich von der ip-adresse den hostnamen (provider-name oder http://www.blabal.de)

gruß


MSCH - Mi 02.02.05 20:49

per dns??
**grins**


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
   S:String;
   HostEnt   : PHostEnt;
   WSAData   : TWSAData;
   SockAddrIn: TSockAddrIn;
   DNSRes: String;

      if WSAStartup(MAKEWORD(2,0),WSAData)=0 then begin
        try
          S:= '123.123.123.123'//<-- Input ip-Adresse
          SockAddrIn.sin_addr.S_addr := inet_addr(PChar(S));
          HostEnt:=gethostbyAddr(@SockAddrIn.sin_addr.S_addr,SizeOf(SockAddrIn.sin_addr.S_addr),AF_INET);
          DNSRes:=StrPas(HostEnt^.h_name);//<<-- dein Hostname
        except end;
        WSACleanup;
      end;

grez
msch

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


Harry M. - Mi 02.02.05 21:01

meine comiler hat folgendes zubemängeln


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
[Fehler] Unit1.pas(25): Undefinierter Bezeichner: 'PHostEnt'
[Fehler] Unit1.pas(26): Undefinierter Bezeichner: 'TWSAData'
[Fehler] Unit1.pas(27): Undefinierter Bezeichner: 'TSockAddrIn'
[Fehler] Unit1.pas(38): Undefinierter Bezeichner: 'WSAStartup'
[Warnung] Unit1.pas(38): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
[Fehler] Unit1.pas(41): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(41): Undefinierter Bezeichner: 'inet_addr'
[Fehler] Unit1.pas(42): Undefinierter Bezeichner: 'gethostbyAddr'
[Fehler] Unit1.pas(42): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(42): EXCEPT oder FINALLY erwartet
[Fehler] Unit1.pas(45): Undefinierter Bezeichner: 'WSACleanup'
[Fehler] Unit1.pas(47): Deklaration erwartet, aber Bezeichner 'Label1' gefunden
[Fehler] Unit1.pas(49): '.' erwartet, aber ';' gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


muß ich da noch irgend ne uses hinzufügen??


MSCH - Fr 04.02.05 19:13

uses winsock;

sorry


Harry M. - Sa 05.02.05 02:01

nun kann man es zwar comilieren aber es passiert nichts. woran kann das liegen?


UC-Chewie - Sa 05.02.05 11:52

Äh, liegt der Code auch in einer Prozedur, die du aufrufst?


Harry M. - Sa 05.02.05 18:04

natürlich


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var  
   S:String;  
   HostEnt   : PHostEnt;
   WSAData   : TWSAData;  
   SockAddrIn: TSockAddrIn;  
   DNSRes: String;

    begin
      if WSAStartup(MAKEWORD(2,0),WSAData)=0 then begin  
        try  
          S:= '81.169.132.68'//<-- Input ip-Adresse
          SockAddrIn.sin_addr.S_addr := inet_addr(PChar(S));
          HostEnt:=gethostbyAddr(@SockAddrIn.sin_addr.S_addr,SizeOf(SockAddrIn.sin_addr.S_addr),AF_INET);  
          DNSRes:=StrPas(HostEnt^.h_name);//<<-- dein Hostname
        except end;
        WSACleanup;
      end;
          Label1.Caption := DNSRes;

   end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


max120b - Sa 05.02.05 20:49

Moin allerseits!

In der Pozedur wird der Variablen "s" die IP zugewiesen,
von der der Hostname ermittelt werden soll. Da is so wies dasteht
irgendwas mit 81... festgelegt. Wenn die IP im Lokalen Netz aber nicht vorhanden ist,
kann natürlich kein Hostname ermittelt werden.
Probier doch mal, ob sich was tut, wenn du anstatt einer festgelegten IP ein Text einfügst (z.B. aus nem Edit oder so) den man andern kann.


Quelltext
1:
S:=Edit1.Text;                    


Ansonsten probier mal ob n' http:// oder ftp:// und so weiter vor der IP
was bringt.

mfg
Max120b


Harry M. - Sa 05.02.05 21:48

ja, für das lokale netz geht das. aber ich hätte es gerne für das globale. also wenn ich eingebe 81.169.132.68 da soll da stehen http://www.delphi-forum.de


MSCH - Sa 05.02.05 22:58

die funktion funktioniert eigentlich überall - benutz sie selber um namen zu finden - egal ob LAN oder WAN.
grez
msch


Harry M. - Sa 05.02.05 23:34

bei mir leider nicht, mein debugger meldet

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00455753 in Modul 'Project1.exe'. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

und wenn ich es ohne debugger starte, kommt nix label1 bleibt leer