#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <net/if_arp.h>
#include <net/if.h>
#include <arpa/inet.h>
#include "string"
using namespace std;
int getlocaip(const char *eth, unsigned &ip)
{
int sockfd;
if(-1 == (sockfd = socket(PF_INET, SOCK_STREAM, 0)))
{
perror("socket");
return -1;
}
struct ifreq req;
bzero(&req, sizeof(struct ifreq));
strcpy(req.ifr_name, eth);
if(ioctl(sockfd, SIOCGIFADDR, &req) < 0)
{
fprintf(stderr, "ioctl failed.\n");
return -1;
}
struct sockaddr_in *host;
host = (struct sockaddr_in*)&req.ifr_addr;
ip = (unsigned)host->sin_addr.s_addr;
close(sockfd);
return 0;
}
int main(int argc, char **argv)
{
unsigned ip;
string str_ip = "eth0";
unsigned ret = getlocaip(str_ip.c_str(), ip);
if(ret == 0)
{
char c_ip[16];
memset(c_ip, 0, 16);
inet_ntop(AF_INET, &ip, c_ip, 16);
printf("loca_ip:%s\n", c_ip);
}
return 0;
}
原文
http://blog.chinaunix.net/uid-26707720-id-3297624.html
http://wenku.baidu.com/view/59f4508d680203d8ce2f2412.html###