linux c++获取指定网卡的ipv6地址
时间: 2024-01-02 21:04:27 浏览: 247
可以使用以下代码来获取指定网卡的IPv6地址:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <netinet/icmp6.h>
#include <arpa/inet.h>
#include <errno.h>
int main(int argc, char *argv[]) {
int sockfd, ret;
struct ifreq ifr;
if (argc != 2) {
printf("Usage: %s <interface>\n", argv[0]);
return -1;
}
sockfd = socket(AF_INET6, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
return -1;
}
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, argv[1], IFNAMSIZ);
ret = ioctl(sockfd, SIOCGIFADDR, &ifr);
if (ret < 0) {
perror("ioctl");
close(sockfd);
return -1;
}
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&ifr.ifr_addr;
char addr_buf[INET6_ADDRSTRLEN];
const char *addr_str = inet_ntop(AF_INET6, &(sin->sin6_addr), addr_buf, INET6_ADDRSTRLEN);
if (addr_str == NULL) {
perror("inet_ntop");
close(sockfd);
return -1;
}
printf("IPv6 address of interface %s: %s\n", argv[1], addr_str);
close(sockfd);
return 0;
}
```
编译并执行该程序时,需要指定要查询的网卡名称。例如,假设要查询eth0网卡的IPv6地址,可以执行以下命令:
```
$ gcc -o get_ipv6 get_ipv6.c
$ sudo ./get_ipv6 eth0
```
输出应该类似于以下内容:
```
IPv6 address of interface eth0: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
```
阅读全文