Originariamente inviato da fatina biondina
solo ke su qualsiasi makkina mi da sempre lo stesso indirizzo ip
Certo, perché quello è l'indirizzo di "loopback" 127.0.0.1 che è uguale per tutti i computer!
codice:
#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main (void)
{
char hname[256];
struct hostent* he;
char *addr;
if (gethostname (hname, sizeof (hname)) == 0)
{
printf ("Hostname: %s\n", hname);
he = gethostbyname (hname);
if (he != NULL)
{
addr = inet_ntoa (*(struct in_addr*) he->h_addr_list[0]);
printf ("Address: %s\n", addr);
}
}
return 0;
}
Oppure puoi enumerare tutte le interfacce di rete:
codice:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <net/if.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
char *getifaddr (char *ifname)
{
int fd;
struct ifreq ifr;
char *addr = NULL;
struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_ifru.ifru_addr;
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
return NULL;
memset (&ifr, 0, sizeof (ifr));
strcpy (ifr.ifr_name, ifname);
sin->sin_family = AF_INET;
if (ioctl (fd, SIOCGIFADDR, &ifr) == 0)
addr = inet_ntoa (sin->sin_addr);
close (fd);
return addr;
}
int main (void)
{
struct if_nameindex *ifni;
ifni = if_nameindex ();
while (ifni->if_name != NULL)
{
printf ("Interface %s %s\n", ifni->if_name, getifaddr (ifni->if_name));
ifni++;
}
return 0;
}
Sorgenti testati su Linux (Slackware 9.1)