# [C] gethostbyname(), IP ausgeben



## action jackson (14. Januar 2004)

Hi,

hab da ein kleines Problem:
Ich rufe gethostbyname() mit ner host adresse auf, und möchte die dazugehörige IP adresse aufm bildschirm ausgeben, aber des  net so richtig...
Die IP sollte doch dann in h_addr_list[0] stehen oder net?

Irgendwie pack ich des im mom net :-(



edit: hat sich erledigt , da ich nun ja angemeldet bin, geht ja auch die suchfunktion 

hier trotzdem nochmal der code


```
hostent *dns;
	dns = gethostbyname("tutorials.de");

	sprintf(ip, "%u.%u.%u.%u", 
			(unsigned char) dns->h_addr_list[0][0],
			(unsigned char) dns->h_addr_list[0][1],
			(unsigned char) dns->h_addr_list[0][2],
			(unsigned char) dns->h_addr_list[0][3]);

	MessageBox(0, ip, "IP", MB_OK);
```


----------



## Jacizzle (22. Juli 2005)

Okay.. Nun geb ich auf und frage auch mal nach...
Ich hab nun schon seid längerem schon kein C mehr programmiert...

Ich versuch jetzt schon seid zwei Tagen rauszufinden, wie ich es schaffe eine IP auszugeben und hab auch schon netter Weise rausgefunden das man das über gethostbyname() funktion irgendwie machen kann.. 

So und da ich das versuchen wollte zu verstehen, habe ich hier diene Code mal kopiert und in mein Programm ( also mit main usw. ) aufgerufen und wollte es komplilieren.. und bekomme den gleichen Fehler wie schon die ganze Zeit bei anderen Programmen auch...

Der kann mit dem Hostent usw. nichts anfangen .. und grade ist mir aufgefallen das ich die "Variablen" hostent, dns und ip vorher noch deklarieren usw. muss? Kann das sein? Weil wenn ja würd ich gern mal wissen wollen mit was fürn Datentyp usw. 

Sorry, aber ich hab schon länger sowas hier nicht mehr gemacht ( Und sowas wie mit IP ausgeben usw. sowieso noch nie ) ... deshalb musst ich nun einfach mal nachfragen...

Ich hoff auf ne antwort.. danke ...


----------



## Tobias K. (22. Juli 2005)

moin


Guck mal in folgendes Tutorial: http://www.tutorials.de/tutorials213492.html
Da benutze ich gethostbyname, um die Adresse eines IRC-Server zu kriegen.

Es ist wichtig das du den Socketkram initialisiert und die nötige .lib mit eingebunden hast.


mfg
umbrasaxum


----------



## Jacizzle (22. Juli 2005)

Danke erstmal...

aber ich glaube ich habe mich falsch ausgedrückt...

Ich möchte die lokale IP Adresse von meinem Rechner auslesen und weiter verwenden, du benutzt ja die Sockets um dich mit nem Server zu verbinden und dem seine IP Adresse zu holen oder?

Geht das mit der lokalen IP Adresse überhaupt mit gethostbyname? .. Das das so kompliziert sein muss so ne dumme Zahl irgendwo auszulesen  ... unglaublich...


----------



## Tobias K. (22. Juli 2005)

moin


Ja das geht, du müsstest einfach "localhost" angeben, dann wirst du die Adresse 127.0.0.1 bekommen.


mfg
umbrasaxum


----------



## Jacizzle (22. Juli 2005)

Okay dann habe ich mich schon wieder falsch ausgedrückt *g* sorry...

Ich will die interne IP Adresse von meiner Netzwerkkarte haben, die in meinem PC eingebaut ist.. wie komme ich an die?

Okay, ich hoffe das wird nun die sein die ich haben will und hoffe ich hab mich nicht wieder falsch ausgedrückt 

Tut mir leid


----------



## Tobias K. (22. Juli 2005)

moin


Deine Netzwerkkarte hat keine feste IP, außer du weisst ihr eine zu. Und wie man die Adresse ausliesst, die ihr zugewiesen wurde, wurde hier schon besprochen, also mal die Suchfunktion bemühen.

Oder rmeinst du die MAC-Adresse?


mfg
umbrasaxum


----------



## grosstefan (28. Juli 2005)

hi
das auslesen der eigenen ip adresse und rechnername geht z.b. so

http://www.online-tutorials.net/netzwerk/seine-ip-adresse-ermitteln/sourcecodes-t-18-25.html


----------



## indigo423 (6. November 2005)

Einen wunderschönen guten Abend,

habe gerade ein kleines Programm fürs Studium schreiben müssen und dachte es könnte euch vielleicht bei eurem Problem helfen.
Programm macht eigentlich nichts anderes als alle Informationen eines Hostnamens auszugeben. Nichts wildes aber vielleicht hilfreich.

```
/*
 *  Title:				Socketprogrammierung
 *  Author:				R.Trommer
 *  Date: 				05.11.2005
 *  File: 				tcpd.c
 *	Description:	Einführung Socketprogrammierung in ANSI C
 *  Version:			0.1
 *
 *  ///////////////////////////////////////////////////////////////////////////
 *  // 
 *  // Domainnamelookup, network- ,host-byteorder
 *  // Servicelookup
 *  // 
 *  ///////////////////////////////////////////////////////////////////////////
 */ 
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>

/* Windows-System */
#ifdef _WIN32
  #include <winsock.h>

/* Unix-System */
#else
  #include <sys/socket.h>
  #include <sys/types.h>
  #include <sys/param.h>
  #include <netinet/in.h>
  #include <unistd.h>
  #include <signal.h>
  #include <netinet/in.h>
  #include <netdb.h>
#endif

#define h_addr h_addr_list[0]           /* for bacward compat */
#define HOSTNAME "localhost"

int main (int argc, char **argv)
{
  struct hostent *hptr;
  struct in_addr addr;
  char *dnsname = HOSTNAME;
  //IN_ADDR addr;
  int i = 0;
  
  switch (argc)
  {
    case 1:
      printf ("\nServerinformationen mit default (localhost)\n");
      break;
    case 2:
      dnsname = argv[1];
      printf ("\nServerinformationen mit Parameter %s\n", dnsname);
      break;
    default:
      fprintf (stderr, "Ungueltige Parameter!\n");
      fprintf (stderr, "Benutzung %s [hostname]\n", argv[0]);
      exit (1);
      break;
  };
  
  if (hptr = gethostbyname (dnsname))
  {
    printf ("Official host name: %s\n", hptr->h_name);
    
    /* Ausgabe der Aliases */
    while (hptr->h_aliases[i])
    {
      printf ("Other aliases:      %s\n", hptr->h_aliases[i++]);
      if (i==0)
      {
        fprintf (stderr, "No aliases found.\n");
      };
    };
    printf ("Address type:       %d\n", hptr->h_addrtype);
    printf ("Address length:     %d\n", hptr->h_length);
    
    /* Ausgabe der IP-Adressen */
    i=0;
    while (hptr->h_addr_list[i])
    {
		  addr.s_addr = *((long*)hptr->h_addr_list[i++]);
		  printf ("Ip address:         %s\n", inet_ntoa(addr));
    };
  }
  else
  {
    printf ("Fehler bei Namensauflösung!\n");
    exit (1);
  };
};
```


----------

