linux 下获取本地ip地址后 怎样保存 ?
先把结果摆上来:
administrator@ubuntu:~/桌面$ gcc -o ip ip.c
administrator@ubuntu:~/桌面$ ./ip
192.168.1.118
192.168.1.118
代码 如下:
char * ip_addr[8];
int getip();
int main()
{
int i;
int len = getip();
for (i=0; i<len; i++)
{
printf("%s\n",ip_addr[i]);
}
return 0;
}
int getip()
{
int num=0;
int i=0;
int sockfd;
struct ifconf ifconf;
unsigned char buf[512];
struct ifreq *ifreq;
ifconf.ifc_len = 512;
ifconf.ifc_buf = buf;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
{
perror("socket");
//exit(1);
}
ioctl(sockfd, SIOCGIFCONF, &ifconf);
ifreq = (struct ifreq*)buf;
for(i=(ifconf.ifc_len/sizeof(struct ifreq)); i>0; i--)
{
//printf("name = [%s]\n", ifreq->ifr_name);
//printf("local addr = [%s]\n",inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));
ip_addr[num++] = net_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
ifreq++;
}
return num;
}
在代码中printf出来是:
127.0.0.1
192.168.1.118
请问这是什么问题 ? Linux socket 获取本地ip 保存ip
[解决办法]
char* ip_addr[8]这样相当于没有为char*分配空间,应改为char ip_addr[8][32],另外字符串不能直接赋值,而应该用strcpy进行复制。
[解决办法]
电脑中lo打开了,所以num是2,但是ip_addr只保存了最后一个ip 192.168.1.118