使用通常获取ipv4的IP地址的方法是无法获取ipv6地址的,本文介绍了使用C语言获取ipv6地址的三种方法:从proc文件从系统获取ipv6地址、使用getifaddrs()函数获取ipv6地址和使用netlink获取ipv6地址,每种方法均给出了完整的源程序,本文所有实例在 ubuntu 20.04 下测试通过,gcc 版本 9.4.0。
1. ipv4的IP地址的获取方法
-
不论是获取 ipv4 的 IP 地址还是 ipv6 的地址,应用程序都需要与内核通讯才可以完成;
-
ioctl 是和内核通讯的一种常用方法,也是用来获取 ipv4 的 IP 地址的常用方法,下面代码演示了如何使用 ioctl 来获取本机所有接口的 IP 地址:
#include <stdio.h> #include <stdlib.h> #include <sys/ioctl.h> #include <linux/if.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int i = 0; int sockfd; struct ifconf ifc; char buf[512] = {0}; struct ifreq *ifr; ifc.ifc_len = 512; ifc.ifc_buf = buf; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); return -1;