[C/Linux] Wat zijn mijn IP adressen?

Pagina: 1
Acties:

  • Tmr
  • Registratie: Februari 2004
  • Laatst online: 13-11-2025
Hoi allemaal,

ik probeer momenteel uit te zoeken hoe ik met gebruik van C onder Linux er achter kan komen wat voor IP adres(sen) mijn Linux (mdk10) machine heeft. Het enige wat ik echter te weten kan komen is het adres 127.0.0.1 (loopback), niet echt nuttig... de code die ik hiervoor gebruik is:
C:
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
/* from gethostbyname manpage:

    struct hostent {
        char    *h_name;
        char    **h_aliases;
        int     h_addrtype;
        int     h_length;
        char    **h_addr_list;
    };
    #define h_addr h_addr_list[0]
*/

int main ()
{
    char name[256];
    gethostname (name, 256);
    
    struct hostent *he = gethostbyname (name);
    printf ("h_name = `%s'\n", he->h_name);

    // print aliases
    printf ("aliases:\n");

    int i = 0;
    while (he->h_aliases[i] != NULL)
    printf ("* %s\n", he->h_aliases[i++]);

    // print all registered addresses
    printf ("addresses:\n");

    i = 0;
    while (he->h_addr_list[i] != NULL)
    printf ("Addr %d = %s\n", i, inet_ntoa(*((struct in_addr *)he->h_addr_list[i++])));

    return 0;
}

Maar de uitvoer van dit programmaatje zegt mij
code:
1
2
3
4
h_name = `localhost'
aliases:
addresses:
Addr 1 = 127.0.0.1

Inderdaad, de hostnaam is 'localhost' (hier heb ik verder geen andere naam aan gegeven). Is er geen manier om er achter te komen wat het echte adres van mijn machine (DHCP toegewezen) is? In /etc/hosts staat een enkele entry (localhost/127.0.0.1)

Zoek ik op de verkeerde plek? De combinatie gethostname/gethostbyname lijkt me inderdaad niet ideaal voor gebruik op 1 machine maar vooralsnog ben ik niets tegengekomen wat hetzelfde doet maar dan wel goed. Iemand een idee?

Verwijderd

Daar is toch al een prachtig tooltje voor?
code:
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
jp@shell:~$ hostname --help
Usage: hostname [-v] {hostname|-F file}      set host name (from file)
       domainname [-v] {nisdomain|-F file}   set NIS domain name (from file)
       hostname [-v] [-d|-f|-s|-a|-i|-y]     display formated name
       hostname [-v]                         display host name

       hostname -V|--version|-h|--help       print info and exit

    dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y

    -s, --short           short host name
    -a, --alias           alias names
    -i, --ip-address      addresses for the host name
    -f, --fqdn, --long    long host name (FQDN)
    -d, --domain          DNS domain name
    -y, --yp, --nis       NIS/YP domain name
    -F, --file            read host name or NIS domain name from given file

   This command can get or set the host name or the NIS domain name. You can
   also get the DNS domain or the FQDN (fully qualified domain name).
   Unless you are using bind or NIS for host lookups you can change the
   FQDN (Fully Qualified Domain Name) and the DNS domain name (which is
   part of the FQDN) in the /etc/hosts file.
jp@shell:~$ hostname -i
10.0.0.100
jp@shell:~$ hostname -f
shell
jp@shell:~$

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 11 april 2005 @ 14:03:
Daar is toch al een prachtig tooltje voor?
Ja handig, een tool gebruiken die API calls uitvoert als je zelf net zo goed die API calls kan doen. :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Tmr
  • Registratie: Februari 2004
  • Laatst online: 13-11-2025
Verwijderd schreef op maandag 11 april 2005 @ 14:03:
Daar is toch al een prachtig tooltje voor?
Ongetwijfeld. Ik ben echter op zoek naar een manier om dat in een (bestaand) C programma toe te voegen. Wat dat betreft tast ik dus in het duister. En het gaat me nou niet zozeer om de hostnaam maar om een (lijst van) beschikbare IP adressen

[ Voor 13% gewijzigd door Tmr op 11-04-2005 14:13 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
De functie die je zoekt is getifaddrs (zoals ik hier ook al zei).

Een gebruiksvoorbeeld vind je bijvoorbeeld hier:
IPv6-aware Programming on Linux (2003.9.3)

  • Tmr
  • Registratie: Februari 2004
  • Laatst online: 13-11-2025
Soultaker schreef op maandag 11 april 2005 @ 14:12:
De functie die je zoekt is getifaddrs (zoals ik hier ook al zei).

Een gebruiksvoorbeeld vind je bijvoorbeeld hier:
IPv6-aware Programming on Linux (2003.9.3)
Thanks zal ik naar gaan kijken. Raar dat ik dat topic niet ben tegengekomen...

De manpage van getifaddrs bestaat ook niet op mijn linux systeem om de een of andere reden :?
Pagina: 1