linux 获取本机mac地址命令,Linux运维知识之Linux 获取本机(全部)IP、MAC地址方法 (C/C++)...

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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值