嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息

简介: [html] view plain copy        /********************************** (C) COPYRIGHT *******************************    * File Name          : get_netinfo.
[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("----------------------------------\n");  
  40.         printf("The %dst net device is : %s\n",ifr.ifr_ifindex,ifr.ifr_name);  
  41.     }  
  42.   
  43.     err=ioctl(s,SIOCGIFHWADDR,&ifr);   /* 获得MAC地址 */  
  44.     printf("%s:[%d] err is %d\n",__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\n",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\n");  
  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\n",ip);  
  63.     }else  
  64.     {  
  65.         printf("IP address is : 0.0.0.0\n");  
  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\n",ip);  
  75.     }else  
  76.     {  
  77.         printf("BROADCAST IP is : 0.0.0.0\n",ip);  
  78.     }  
  79.     printf("----------------------------------\n");  
  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\n",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\n",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\n");  
  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\n",ip);  
  109.     }else{  
  110.         printf("IP address is : 0.0.0.0\n");  
  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\n",ip);  
  118.     }else{  
  119.         printf("BROADCAST IP is : 0.0.0.0\n",ip);  
  120.     }  
  121. #endif  
  122.   
  123.     printf("----------------------------------\n");  
  124.     close(s);  
  125.       
  126. }  
  127. </span>  
目录
相关文章
|
10月前
|
运维 监控 安全
VMware NSX 9.0 正式版发布 - 下一代网络安全虚拟化平台
VMware NSX 9.0 正式版发布 - 下一代网络安全虚拟化平台
555 3
VMware NSX 9.0 正式版发布 - 下一代网络安全虚拟化平台
|
6月前
|
网络协议 API 网络安全
VMware NSX 9.0.1.0 发布 - 下一代网络安全虚拟化平台
VMware NSX 9.0.1.0 发布 - 下一代网络安全虚拟化平台
932 3
VMware NSX 9.0.1.0 发布 - 下一代网络安全虚拟化平台
|
6月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
501 10
|
7月前
|
人工智能 运维 安全
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
迈格网络推出“天机”新版本,以AI自学习、全端防护、主动安全三大核心能力,重构网络安全防线。融合AI引擎与DeepSeek-R1模型,实现威胁预测、零日防御、自动化响应,覆盖Web、APP、小程序全场景,助力企业从被动防御迈向主动免疫,护航数字化转型。
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
|
7月前
|
机器学习/深度学习 移动开发 编解码
基于人工神经网络的类噪声环境声音声学识别(Matlab代码实现)
基于人工神经网络的类噪声环境声音声学识别(Matlab代码实现)
190 1
|
9月前
|
监控 安全 Go
使用Go语言构建网络IP层安全防护
在Go语言中构建网络IP层安全防护是一项需求明确的任务,考虑到高性能、并发和跨平台的优势,Go是构建此类安全系统的合适选择。通过紧密遵循上述步骤并结合最佳实践,可以构建一个强大的网络防护系统,以保障数字环境的安全完整。
202 12
|
8月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
434 0
|
8月前
|
运维 安全 网络安全
VMware NSX 4.2.3 - 网络安全虚拟化平台
VMware NSX 4.2.3 - 网络安全虚拟化平台
342 0
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
405 17
下一篇
开通oss服务