嵌入式 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>  
目录
相关文章
|
2月前
|
监控 安全 Go
使用Go语言构建网络IP层安全防护
在Go语言中构建网络IP层安全防护是一项需求明确的任务,考虑到高性能、并发和跨平台的优势,Go是构建此类安全系统的合适选择。通过紧密遵循上述步骤并结合最佳实践,可以构建一个强大的网络防护系统,以保障数字环境的安全完整。
73 12
|
3月前
|
监控 安全 网络安全
网络安全新姿势:多IP配置的五大好处
服务器配置多IP地址,既能提升网络速度与安全性,又能实现多站点托管和故障转移。本文详解多IP的五大妙用、配置方法及进阶技巧。从理论到实践,合理规划IP资源,让服务器性能跃升新高度。
117 2
|
7月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
360 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
4月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
130 0
|
5月前
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
|
7月前
|
机器学习/深度学习 自然语言处理 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
301 13
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
|
7月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
262 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
7月前
|
计算机视觉
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
146 5
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
|
7月前
|
算法 安全 大数据
【算法合规新时代】企业如何把握“清朗·网络平台算法典型问题治理”专项行动?
在数字化时代,算法推动社会发展,但也带来了信息茧房、大数据杀熟等问题。中央网信办发布《关于开展“清朗·网络平台算法典型问题治理”专项行动的通知》,针对六大算法问题进行整治,明确企业需落实算法安全主体责任,建立健全审核与管理制度,并对算法进行全面审查和备案。企业应积极自查自纠,确保算法合规透明,防范风险,迎接新机遇。
|
6月前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。

热门文章

最新文章