如何根据接口(interface)取得ipv6地址

wildbeast123 wildbeast123 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在网上找了一段代码,使用getifaddrs()这个函数可以取。
但是我试了一下还是只能取到ipv4的地址,这个函数的资料也很少,man手册也没有。
各位老大有没有用过的,给指点一下。
我的系统是RedHat EL4.


//代码根据UNP和man手册编写
//适用于LINUX/BSD(FreeBSD, MacOS X)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <sys/types.h>
#include <sys/socket.h>

#include <netinet/in.h>
#include <arpa/inet.h>
#include <ifaddrs.h>

int main(void)
{
struct ifaddrs *ifc, *ifc1;
char ip[64];
char nm[64];

if (0 != getifaddrs(&ifc)) return(-1);
ifc1 = ifc;

printf("Iface\tIP address\tNetmask\n");
for(; NULL != ifc; ifc = (*ifc).ifa_next) {
printf("%s", (*ifc).ifa_name);
if (NULL != (*ifc).ifa_addr) {
inet_ntop(AF_INET, &(((struct sockaddr_in*)((*ifc).ifa_addr))->sin_addr), ip, 64);
printf("\t%s", ip);
} else {
printf("\t\t");
}
if (NULL != (*ifc).ifa_netmask) {
inet_ntop(AF_INET, &(((struct sockaddr_in*)((*ifc).ifa_netmask))->sin_addr), nm, 64);
printf("\t%s", nm);
} else {
printf("\t\t");
}
printf("\n");
}

freeifaddrs(ifc1);
return(0);
}
...全文
评论 3
收藏 已收藏
分享
返回顶部
wildbeast123
Linux/Unix社区 23,224 成员 74,535 内容