嵌入式 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>  
目录
相关文章
|
24天前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目DWRSeg是一种高效的实时语义分割网络,通过将多尺度特征提取分为区域残差化和语义残差化两步,提高了特征提取效率。它引入了Dilation-wise Residual (DWR) 和 Simple Inverted Residual (SIR) 模块,优化了不同网络阶段的感受野。在Cityscapes和CamVid数据集上的实验表明,DWRSeg在准确性和推理速度之间取得了最佳平衡,达到了72.7%的mIoU,每秒319.5帧。代码和模型已公开。
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
|
25天前
|
监控 安全 测试技术
网络信息系统的整个生命周期
网络信息系统规划、设计、集成与实现、运行维护及废弃各阶段介绍。从企业需求出发,经过可行性研究和技术评估,详细设计系统架构,完成设备安装调试和系统集成测试,确保稳定运行,最终安全退役。
33 1
网络信息系统的整个生命周期
|
11天前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
56 5
|
13天前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
38 4
|
14天前
|
SQL 安全 算法
网络安全的隐形盾牌:漏洞防御与信息加密的艺术
【10月更文挑战第36天】在数字世界的海洋中,网络安全犹如一艘船的保护罩,守护着我们的隐私和数据安全。本文将揭开网络安全的神秘面纱,从常见的网络漏洞到先进的加密技术,再到培养必要的安全意识,我们将一步步构建起防御的堡垒。文章不仅分享技术细节,还强调了在个人和组织层面采取积极措施的重要性。
|
15天前
|
网络协议 定位技术 网络架构
IP 路由:网络世界的导航仪
IP 路由:网络世界的导航仪
28 3
|
18天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
23天前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
【10月更文挑战第27天】计算机主机网关的作用类似于小区传达室的李大爷,负责将内部网络的请求转发到外部网络。当小区内的小不点想与外面的小明通话时,必须通过李大爷(网关)进行联系。网关不仅帮助内部设备与外部通信,还负责路由选择,确保数据包高效传输。此外,网关还参与路由表的维护和更新,确保网络路径的准确性。
45 2
|
25天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
208 2
|
25天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
下一篇
无影云桌面