小标
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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号