#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <unistd.h>
#define inaddrr(x) (*(struct in_addr *) &ifr->x[sizeof sa.sin_port])
#define IFRSIZE ((int)(size * sizeof (struct ifreq)))
typedef char ip_address[15+1];
static int
get_addr(char * ifname,ip_address theip) {
struct ifreq*ifr;
struct ifreqifrr;
struct sockaddr_insa;
struct sockaddrifaddr;
intsockfd;
if((sockfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
{
printf ("Socket for DGRAM cannot be created/n");
return -1;
}
ifr = &ifrr;
ifrr.ifr_addr.sa_family = AF_INET;
strncpy(ifrr.ifr_name, ifname, sizeof(ifrr.ifr_name));
if (ioctl(sockfd, SIOCGIFADDR, ifr) < 0) {
printf("No %s interface./n", ifname);
return -1;
}
ifaddr = ifrr.ifr_addr;
strncpy(theip,inet_ntoa(inaddrr(ifr_addr.sa_data)),sizeof(ip_address));
return 0;
}
int main(void){
ip_addresstheip;
if (get_addr("eth0",theip)==0)
printf("The ip for eth0 is:%s/n",theip);
else
printf("Couldn't get ip adress for eth0/n");
return 0;
}