博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 接口地址的获取-暨获取本地IP地址(所有地址,包括IPv4,IPV6,MAC 地址)...
阅读量:6709 次
发布时间:2019-06-25

本文共 2594 字,大约阅读时间需要 8 分钟。

本文没有使用ioctl 函数,未使用socket ,直接获取本地的所有地址,包括IPv4,IPV6,MAC 地址:

核心函数是:getifaddrs() & freeifaddrs()

代码如下:

#include 
#include
#include
#include
#include
/*------------------------------------------------------------------------------ * NAME : GetInterfaceAddress * DESCRIPTION : * PARAMETERS : 无 * RETURNVALUE : 无 * ERRORS : * NOTES : * * AUTHOR : alex * CREATETIME : 2013年4月20日, 17:44 * MOTIFYTIME : *------------------------------------------------------------------------------ */void GetInterfaceAddress(){ struct ifaddrs *ifaddr, *ifa; int family; if (getifaddrs(&ifaddr) == -1) { perror("getifaddrs"); return; } /* Walk through linked list, maintaining head pointer so we can free list later */ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; switch (family) { case AF_PACKET: { printf("%s address family: %d%s\n", ifa->ifa_name, family, " AF_PACKET"); struct sockaddr_ll *s = (struct sockaddr_ll*) ifa->ifa_addr; for (int i = 0; i < 6; i++) { printf("%s%02X%s", i == 0 ? "\tMAC Address:<" : "", s->sll_addr[i], i < 5 ? ":" : ">\n"); } break; } case AF_INET: { printf("%s address family: %d%s\n", ifa->ifa_name, family, " AF_INET"); struct sockaddr_in *s = (struct sockaddr_in *) ifa->ifa_addr; //char * aip = inet_ntoa(s->sin_addr); char aip[16]; inet_ntop(AF_INET,&s->sin_addr,aip,sizeof(aip)); printf("\tIPv4 Address:<%s>\n", aip); break; } case AF_INET6: { printf("%s address family: %d%s\n", ifa->ifa_name, family, " AF_INET6"); struct sockaddr_in6 *s = (struct sockaddr_in6 *) ifa->ifa_addr; //char * aip = inet_ntoa(s->sin_addr); char aip[40]; inet_ntop(AF_INET6,&s->sin6_addr,aip,sizeof(aip)); printf("\tIPv4 Address:<%s>\n", aip); break; } default: { printf("Unknown address family\n"); break; } } } freeifaddrs(ifaddr);}

转载于:https://www.cnblogs.com/gcssys/archive/2013/04/20/3790306.html

你可能感兴趣的文章
webdriver API study
查看>>
【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
查看>>
Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
查看>>
Android 学习之 开源项目PullToRefresh的使用
查看>>
Matplot中文乱码完美解决方式
查看>>
tomcat的webappclassloader中一个奇怪的异常信息
查看>>
漫谈程序猿系列:群星闪耀的黄金时代
查看>>
2016百度编程题:蘑菇阵
查看>>
webpack系列之一总览
查看>>
如何打造BCH使用的刚性需求?
查看>>
一个小需求引发的思考
查看>>
慎用System.nanoTime()
查看>>
算法的时间复杂度
查看>>
基础设施即代码:Terraform和AWS无服务器
查看>>
反模式的经典 - Mockito设计解析
查看>>
Visual Studio 15.7预览版4改进Git、C++支持
查看>>
微软宣布支持基于虚拟机的Azure IOT Edge服务
查看>>
来自社区的Visual Studio Code使用体验和教程
查看>>
[deviceone开发]-cnodejs论坛移动端App
查看>>
智能指针shared_ptr(effective modern c++笔记)
查看>>