zoukankan      html  css  js  c++  java
  • 嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <span style="font-family:Courier New;">  
    2. /********************************** (C) COPYRIGHT *******************************  
    3.  * File Name          : get_netinfo.c  
    4.  * Author              : skdkjzz  
    5.  * Date                 : 2014/08/07  
    6.  * Description        : linux下获取网卡信息  
    7.  *********************************************************************************/  
    8.   
    9. #include <stdio.h>  
    10. #include <stdlib.h>  
    11. #include <string.h>  
    12. #include <sys/types.h>  
    13. #include <sys/socket.h>  
    14. #include <netinet/in.h>  
    15. #include <linux/if.h>  
    16. #include <arpa/inet.h>  
    17. #include <linux/sockios.h>  
    18.   
    19. int main(int argc,char*argv[]){  
    20.     int s;  
    21.     int err;  
    22.     s=socket(AF_INET,SOCK_DGRAM,0);  
    23.     if(s<0){  
    24.         perror("socket error");  
    25.         return;  
    26.     }  
    27.   
    28.     struct ifreq ifr;  
    29. #if 1  
    30.     memset(&ifr,0,sizeof(ifr));  
    31.     ifr.ifr_ifindex=1;    /* 获得第1个网络接口的名称 */  
    32.   
    33.     err=ioctl(s,SIOCGIFNAME,&ifr);  
    34.     if(err)  
    35.     {  
    36.         perror("index error");  
    37.     }else  
    38.     {  
    39.         printf("---------------------------------- ");  
    40.         printf("The %dst net device is : %s ",ifr.ifr_ifindex,ifr.ifr_name);  
    41.     }  
    42.   
    43.     err=ioctl(s,SIOCGIFHWADDR,&ifr);   /* 获得MAC地址 */  
    44.     printf("%s:[%d] err is %d ",__FUNCTION__,__LINE__,err);  
    45.     if(!err)  
    46.     {  
    47.         unsigned char* hw=ifr.ifr_hwaddr.sa_data;  
    48.         printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x ",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);  
    49.     }  
    50.     else  
    51.     {  
    52.         printf("Mac address is : 00:00:00:00:00:00 ");  
    53.     }  
    54.   
    55.     struct sockaddr_in *sin=(struct sockaddr_in*)&ifr.ifr_addr; /* 获取网络接口IP保存的是二进制IP */  
    56.     char ip[16];   /* 字符数组,存放字符串 */  
    57.     memset(ip,0,16);  
    58.     err=ioctl(s,SIOCGIFADDR,&ifr);  
    59.     if(!err)  
    60.     {  
    61.         inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16);  /* 转换的字符串保存到ip数组中,第二个参数是要转换的二进制IP指针,第三个参数是转换完成存放IP的缓冲区,最后一个参数是缓冲区的长度 */  
    62.         printf("IP address is : %s ",ip);  
    63.     }else  
    64.     {  
    65.         printf("IP address is : 0.0.0.0 ");  
    66.     }  
    67.   
    68.     err=ioctl(s,SIOCGIFBRDADDR,&ifr);   /* 得到接口的广播地址 */  
    69.     if(!err)  
    70.     {  
    71.         struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;  
    72.   
    73.         inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16); /* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */  
    74.         printf("BROADCAST IP is : %s ",ip);  
    75.     }else  
    76.     {  
    77.         printf("BROADCAST IP is : 0.0.0.0 ",ip);  
    78.     }  
    79.     printf("---------------------------------- ");  
    80.   
    81. #else  
    82.   
    83.     memset(&ifr,0,sizeof(ifr));  
    84.     ifr.ifr_ifindex=2;  /* 获得第2个网络接口的名称 */  
    85.   
    86.     err=ioctl(s,SIOCGIFNAME,&ifr);  
    87.     memcpy(ifr.ifr_name,argv[1],5);  
    88.     if(err){  
    89.         perror("index error");  
    90.     }else{  
    91.         printf("The %dst net device is : %s ",ifr.ifr_ifindex,ifr.ifr_name);  
    92.     }  
    93.   
    94.   
    95.     err=ioctl(s,SIOCGIFHWADDR,&ifr);  /* 获得MAC地址 */  
    96.     if(!err){  
    97.         unsigned char* hw=ifr.ifr_hwaddr.sa_data;  
    98.         printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x ",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);  
    99.     }else{  
    100.         printf("Mac address is : 00:00:00:00:00:00 ");  
    101.     }  
    102.   
    103.     sin=(struct sockaddr_in*)&ifr.ifr_addr;  
    104.     memset(ip,0,16);  
    105.     err=ioctl(s,SIOCGIFADDR,&ifr);  
    106.     if(!err){  
    107.         inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16);  
    108.         printf("IP address is : %s ",ip);  
    109.     }else{  
    110.         printf("IP address is : 0.0.0.0 ");  
    111.     }  
    112.   
    113.     err=ioctl(s,SIOCGIFBRDADDR,&ifr);  /* 得到接口的广播地址 */  
    114.     if(!err){  
    115.         struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;  
    116.         inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16);/* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */  
    117.         printf("BROADCAST IP is : %s ",ip);  
    118.     }else{  
    119.         printf("BROADCAST IP is : 0.0.0.0 ",ip);  
    120.     }  
    121. #endif  
    122.   
    123.     printf("---------------------------------- ");  
    124.     close(s);  
    125.       
    126. }  
    127. </span>  
  • 相关阅读:
    mongodbwindows安装过程附带安装包百度云
    PostgreSQL数据库中跨库访问解决方案
    PostgreSQL 同步复制(1master+2standby)
    PostgreSQL数据导出导入COPY
    CentOS 6.5安装PostgreSQL9.3.5时报错: jade: Command not found
    postgresql常用命令
    EasyUI Messager 消息框
    js验证如何限制文本框只能输入数字
    推荐几个在线PDF转化成Word网站
    程序员高效编程的14点建议
  • 原文地址:https://www.cnblogs.com/lidabo/p/5383975.html
Copyright © 2011-2022 走看看