如同获取IPv4的地址一般,获取IPv6也是可以通过使用网卡信息来得到IPv6的地址,也可以给一个多播地址发送数据包然后获取IPv6的地址。在IPv4通过iotcl函数是可以获取本主机的IPv4的地址的,但是本楼主使用iotcl函数来获取IPv6的地址就没成功过,经查证,没有看到使用iotcl获取IPv6地址成功的Demo,所以如果想使用iocl函数来获取IPv6地址,我劝你还是做好心理准备哈!不多说,直接上代码了,一下就是我实现的两种获取IPv6地址的方法。

mynet.h

#include  <netinet/in.h>#include  <sys/param.h>
#include  <sys/stat.h>
#include  <sys/ioctl.h>
#include  <sys/socket.h>
#include  <sys/socket.h>
#include  <sys/time.h>
#include  <sys/file.h>
#include  <sys/types.h>#include   <netinet/ip.h>
#include  <arpa/ftp.h>
#include  <arpa/inet.h>
#include  <arpa/telnet.h>#include  <stdio.h>
#include  <signal.h>
#include  <string.h>
#include  <net/if.h>
#include  <stdlib.h>
#include  <unistd.h>
#include  <error.h>
#include  <netdb.h>
#include  <ifaddrs.h>
#include  <errno.h> 

方法一:byeth0getipv6.c

#include "mynet.h"int  main(int argc, char *argv[]){  struct ifaddrs *ifaddr, *ifa;  int family, s;  char host[NI_MAXHOST];  char* ifaname;     printf("NI_MAXHOST:%d\n",NI_MAXHOST);     if (getifaddrs(&ifaddr) == -1) {  printf("getifaddrs\n");  return -1;  }  for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {  if (ifa->ifa_addr == NULL)  continue;  family = ifa->ifa_addr->sa_family;  ifaname = ifa->ifa_name; if (family == AF_INET6 && memcmp(ifaname, "eth0", 4) == 0 ) {s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6),  host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);  if (s != 0) {  printf("getnameinfo() failed: %s\n", gai_strerror(s));  return -1;  }if (strchr(host, '%') == NULL){printf("%s IPv6 addr:%s\n", ifa->ifa_name, host);}}else{continue;}      }  freeifaddrs(ifaddr);return 0;
}  

方法二:bymulgetipv6.c

#include "mynet.h"int main(){const char* muladdr = "ff0e::2";int sockfd;int len;int on = 1;struct sockaddr_in6 iface_out;struct sockaddr_in6 remote;char address[45];memset(&remote, 0, sizeof( struct sockaddr_in6  ));remote.sin6_family = AF_INET6;inet_pton(AF_INET6, muladdr, &remote.sin6_addr);remote.sin6_port = htons(10086);memset(&iface_out, 0, sizeof( struct sockaddr_in6));sockfd = socket(AF_INET6, SOCK_DGRAM, 0);if ( setsockopt(sockfd , SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1 ) {perror("DEBUG: [get_output_if] setsockopt(SOL_SOCKET, SO_BROADCAST");close(sockfd);return -1;}if ( connect(sockfd, (struct sockaddr *) &remote, sizeof(struct sockaddr_in6)) == -1){perror("IPv6 DEBUG: [get_output_if] connect");close(sockfd);return -1;}len = sizeof(iface_out);if (getsockname(sockfd, (struct sockaddr *) &iface_out, &len) == -1) {perror("DEBUG: [get_output_if] getsockname");close(sockfd);return -1;}close(sockfd);if (iface_out.sin6_addr.s6_addr == 0) { /* what is this case?? */return -1;}inet_ntop(AF_INET6, (const void *) &iface_out.sin6_addr, address, 45);printf("IPV6 address:%s\n",address);
}

几种获取本机IPv6地址的方法相关推荐

  1. linux下获取本机IPv6地址、前缀、网关

    原文:linux下获取本机IPv6地址.前缀.网关 获取本机IPv6信息命令:cat /proc/net/if_inet6 root@IT-PC-135:/home/user1/# cat /proc ...

  2. 常识-java获取本机ipv6地址以及关闭临时ipv6地址

    关闭临时ipv6地址 临时ipv6有助于本机安全,然而有时用不到,比如用其进行长久的ftp链接,随时待命是不合适的 右键管理员cmd,输入命令关闭临时ipv6 netsh interface ipv6 ...

  3. 获取本机IP地址的方法

    文章目录 获取本机IP地址的方法总结 一.Windows电脑 获取本机 IP 地址 1.命令行获取 2.使用网络状态查看IP地址 二.Mac 电脑获取本机 IP 地址 1. mac电脑要输入**ifc ...

  4. Unity中获取本机IP地址的方法

    做OptiTrack局域网数据通信时,需要设置本地IP和动捕数据服务器IP,来实现获取动捕数据.由于局域网搭建时需要手动设置电脑IP,因此想到如果可以获取本机IP,服务器IP通常设置固定后不会更改,如 ...

  5. 新华三H3CMagic系列路由器获取不到IPV6地址解决方法

    适用于H3C Magic NX15000/NX30/NX54/NX18/NX15/BX54/RC3000 H3C Magic系列路由器底层使用的是openwrt的开源路由系统,IPV6功能相关设置也比 ...

  6. c语言获得本机mac地址,VC实现获取本机MAC地址的方法

    本文实例采用vc6.0运行环境,通过实例实现获得MAC地址的功能. 完整的实例代码如下: #include "stdafx.h" #include #include #includ ...

  7. 用java获取本机IP地址

    在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一下,到网上搜索了一下ja ...

  8. 快速获取本机IP地址AWK功能

    有些时候,我们在应用中可能要用到通过linux命令来获取本机IP地址,方法有很多种,例如最常见的就是ifconfig 如果我想尽尽只获取IP地址,方法也有很多种 例如:获取eth0的IP信息,利用cu ...

  9. linux编程获取本机IP地址的三种方法

    这是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的,比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡 ...

最新文章

  1. [c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...
  2. ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
  3. 自然语言0_nltk中文使用和学习资料汇总
  4. console react 去除_vue或react项目生产环境去掉console.log的操作
  5. 20170117小测
  6. 原来C语言和其他高级语言的最大的区别是这个...
  7. Spring深入理解-Spring框架设计理念
  8. svg html5 ajax,jQuery附加到AJAX加载的SVG问题
  9. python 字符串 string模块导入及用法
  10. 《深入浅出WPF》视频列表
  11. DHCP工作原理和报文格式
  12. 实现网站在线客服系统代码过程中解决问题-js实现点击复制文本
  13. ubuntu 16.04无法上网
  14. Java相关软件下载地址
  15. ubuntu更新过程中出现错误:校验数字签名时出错。此仓库未被更新,下列签名无效
  16. linux内核 4g拨号,openwrt 基于qmi的 3G|4G拨号
  17. explore exploit
  18. 【深度学习笔记1.1】人工神经网络(内含模型保存与恢复介绍)
  19. 华清远见java学习心得
  20. 以太网实习_计算机网络实习心得体会

热门文章

  1. 未雨绸缪,数据分析对于企业应对经营危机非常重要
  2. 广东专插本计算机专业学校有哪些,2020年广东专插本院校有哪些?
  3. Transact SQL 语 句
  4. 程序员邂逅鼓励师的正确姿势!
  5. Qualcomm 常用NV列表
  6. 计算机网络论文英语翻译,COMPUTER NETWORK_计算机网络(英语论文翻译)
  7. ESP8266开发-Arduino IDE安装、配置与使用
  8. 自信带来成功,成功增强自信
  9. 基于Zigbee+stm32的无线传感网络(DL-LN32,DL-LN33均适用)
  10. 游戏服务器维护是干啥的,网络游戏的服务器维护都是在做些什么?