Linux运维知识之Linux 获取本机(全部)IP、MAC地址方法 (C/C++)
小标 2018-08-30 来源 : 阅读 3859 评论 0

摘要:本文主要向大家介绍了Linux运维知识之Linux 获取本机(全部)IP、MAC地址方法 (C/C++),通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之Linux 获取本机(全部)IP、MAC地址方法 (C/C++),通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

Linux 获取本机IP、MAC地址用法大全
 

 1   
 2 //#include 
 3 #include 
 4 #include  
 5 #include  
 6 #include  
 7 #include 
 8 #include 
 9 #include 
10 //#include 
11 //#include 
12 #include 
13 
14 char* getMac(char* mac,char* dv){
15     struct   ifreq   ifreq; 
16     int   sock; 
17     if(!mac || !dv)
18         return mac;
19     if((sock=socket(AF_INET,SOCK_STREAM,0)) <0) 
20     { 
21         perror( "socket "); 
22         return mac; 
23     } 
24     strcpy(ifreq.ifr_name,dv); 
25     if(ioctl(sock,SIOCGIFHWADDR,&ifreq) <0) 
26     { 
27         perror( "ioctl "); 
28         return mac; 
29     } close(sock);
30     sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", 
31            (unsigned char)ifreq.ifr_hwaddr.sa_data[0], 
32            (unsigned char)ifreq.ifr_hwaddr.sa_data[1], 
33            (unsigned char)ifreq.ifr_hwaddr.sa_data[2], 
34            (unsigned char)ifreq.ifr_hwaddr.sa_data[3], 
35            (unsigned char)ifreq.ifr_hwaddr.sa_data[4], 
36            (unsigned char)ifreq.ifr_hwaddr.sa_data[5]);
37     return mac;
38 }
39 
40 int main (int argc, const char * argv[])
41 {
42     char hname[128];
43     struct hostent *hent;
44     int i;
45 
46     gethostname(hname, sizeof(hname));
47 
48     //hent = gethostent();
49     hent = gethostbyname(hname);
50 
51     printf("hostname: %s\n", hent->h_name);
52   
53 //----------------------------------------------------------
54     printf("\n\n\n");
55 
56     char mac[30];
57     struct ifaddrs * ifAddrStruct=NULL;
58     void * tmpAddrPtr=NULL;
59 
60     getifaddrs(&ifAddrStruct);
61 
62     while (ifAddrStruct!=NULL) {
63         if (ifAddrStruct->ifa_addr->sa_family==AF_INET) { // check it is IP4
64             // is a valid IP4 Address
65             tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
66             char addressBuffer[INET_ADDRSTRLEN];
67             inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
68             printf("%s IP: %s\n", ifAddrStruct->ifa_name, addressBuffer);
69             printf("MAC: %s\n\n",getMac(mac,ifAddrStruct->ifa_name));
70         } else if (ifAddrStruct->ifa_addr->sa_family==AF_INET6) { // check it is IP6
71             // is a valid IP6 Address
72             tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
73             char addressBuffer[INET6_ADDRSTRLEN];
74             inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
75             printf("%s IP: %s\n", ifAddrStruct->ifa_name, addressBuffer); 
76             printf("MAC: %s\n\n",getMac(mac,ifAddrStruct->ifa_name));
77         } 
78         ifAddrStruct=ifAddrStruct->ifa_next;
79     }
80     return 0;
81 
82 } 
 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved