#include <string.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <stdio.h>
#define IP_ADDR_LEN 20
// intf:指向网卡名的指针
// ipaddr:指向IP地址的指针
int get_ipaddr(char *intf,char *ipaddr)
{
int sock;
struct ifreq ifr;
struct sockaddr_in *sin = NULL;
memset(&ifr,0,sizeof(struct ifreq));
sock = socket(AF_INET, SOCK_DGRAM, 0);
strcpy(ifr.ifr_name, intf);
if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)
printf("ioctl error\n");
sin = (struct sockaddr_in*) &ifr.ifr_addr;
inet_ntop(AF_INET, &sin->sin_addr.s_addr, ipaddr, IP_ADDR_LEN);
return 0;
}
/* test the function */
void main()
{
char *name="eth0";
char ip[IP_ADDR_LEN];
get_ipaddr(name,ip);
printf("IP:%s\n",ip);
}