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. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <sys/types.h>
  12. #include <sys/socket.h>
  13. #include <netinet/in.h>
  14. #include <linux/if.h>
  15. #include <arpa/inet.h>
  16. #include <linux/sockios.h>
  17. int main(int argc,char*argv[]){
  18. int s;
  19. int err;
  20. s=socket(AF_INET,SOCK_DGRAM,0);
  21. if(s<0){
  22. perror("socket error");
  23. return;
  24. }
  25. struct ifreq ifr;
  26. #if 1
  27. memset(&ifr,0,sizeof(ifr));
  28. ifr.ifr_ifindex=1;    /* 获得第1个网络接口的名称 */
  29. err=ioctl(s,SIOCGIFNAME,&ifr);
  30. if(err)
  31. {
  32. perror("index error");
  33. }else
  34. {
  35. printf("----------------------------------\n");
  36. printf("The %dst net device is : %s\n",ifr.ifr_ifindex,ifr.ifr_name);
  37. }
  38. err=ioctl(s,SIOCGIFHWADDR,&ifr);   /* 获得MAC地址 */
  39. printf("%s:[%d] err is %d\n",__FUNCTION__,__LINE__,err);
  40. if(!err)
  41. {
  42. unsigned char* hw=ifr.ifr_hwaddr.sa_data;
  43. printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x\n",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
  44. }
  45. else
  46. {
  47. printf("Mac address is : 00:00:00:00:00:00\n");
  48. }
  49. struct sockaddr_in *sin=(struct sockaddr_in*)&ifr.ifr_addr; /* 获取网络接口IP保存的是二进制IP */
  50. char ip[16];   /* 字符数组,存放字符串 */
  51. memset(ip,0,16);
  52. err=ioctl(s,SIOCGIFADDR,&ifr);
  53. if(!err)
  54. {
  55. inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16);  /* 转换的字符串保存到ip数组中,第二个参数是要转换的二进制IP指针,第三个参数是转换完成存放IP的缓冲区,最后一个参数是缓冲区的长度 */
  56. printf("IP address is : %s\n",ip);
  57. }else
  58. {
  59. printf("IP address is : 0.0.0.0\n");
  60. }
  61. err=ioctl(s,SIOCGIFBRDADDR,&ifr);   /* 得到接口的广播地址 */
  62. if(!err)
  63. {
  64. struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;
  65. inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16); /* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */
  66. printf("BROADCAST IP is : %s\n",ip);
  67. }else
  68. {
  69. printf("BROADCAST IP is : 0.0.0.0\n",ip);
  70. }
  71. printf("----------------------------------\n");
  72. #else
  73. memset(&ifr,0,sizeof(ifr));
  74. ifr.ifr_ifindex=2;  /* 获得第2个网络接口的名称 */
  75. err=ioctl(s,SIOCGIFNAME,&ifr);
  76. memcpy(ifr.ifr_name,argv[1],5);
  77. if(err){
  78. perror("index error");
  79. }else{
  80. printf("The %dst net device is : %s\n",ifr.ifr_ifindex,ifr.ifr_name);
  81. }
  82. err=ioctl(s,SIOCGIFHWADDR,&ifr);  /* 获得MAC地址 */
  83. if(!err){
  84. unsigned char* hw=ifr.ifr_hwaddr.sa_data;
  85. printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x\n",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
  86. }else{
  87. printf("Mac address is : 00:00:00:00:00:00\n");
  88. }
  89. sin=(struct sockaddr_in*)&ifr.ifr_addr;
  90. memset(ip,0,16);
  91. err=ioctl(s,SIOCGIFADDR,&ifr);
  92. if(!err){
  93. inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16);
  94. printf("IP address is : %s\n",ip);
  95. }else{
  96. printf("IP address is : 0.0.0.0\n");
  97. }
  98. err=ioctl(s,SIOCGIFBRDADDR,&ifr);  /* 得到接口的广播地址 */
  99. if(!err){
  100. struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;
  101. inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16);/* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */
  102. printf("BROADCAST IP is : %s\n",ip);
  103. }else{
  104. printf("BROADCAST IP is : 0.0.0.0\n",ip);
  105. }
  106. #endif
  107. printf("----------------------------------\n");
  108. close(s);
  109. }
  110. </span>

嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息的更多相关文章

  1. 嵌入式 hi3518平台获取网关

    </pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...

  2. 在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境

    在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安 ...

  3. 使用Sysmon和Splunk探测网络环境中横向渗透

    当前很难在网络中探测攻击者横向渗透,其中原因有很难获取必要的日志和区别正常与恶意行为.本篇文章介绍通过部署Sysmon并将日志发送到SIEM来探测横向渗透. 工具: Sysmon + Splunk l ...

  4. 在低带宽或不可靠的网络环境中安装 Visual Studio 2017

    在低带宽或不可靠的网络环境中安装 Visual Studio 2017 2017-4-141 分钟阅读时长 作者  https://docs.microsoft.com/zh-cn/visualstu ...

  5. 使用pipework将Docker容器配置到本地网络环境中

    使用pipework将Docker容器配置到本地网络环境中 需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主 ...

  6. 使用pipework将Docker容器桥接到本地网络环境中

    在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...

  7. 嵌入式 hi3518平台uboot引导nfs文件系统

    首先贴出来我的bootargs的设置(注没有换行符!!!): setenv bootargs noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsro ...

  8. [置顶] 获取网络数据中的数组显示成ListView的简单流程

    首先说一下  这是我自己的个人笔记,如果想看看,不用看细节,可以看流程. 定义一个线程池 ExecutorService pool = Executors.newFixedThreadPool(15) ...

  9. 如何获取 C# 类中发生数据变化的属性信息

    一.前言 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字 ...

随机推荐

  1. 通过GeoIP2分析访问者IP获取地理位置信息

    原文链接:http://blog.csdn.net/johnnycode/article/details/42028841 MaxMind GeoIP2 服务能识别互联网用户的地点位置与其他特征,应用 ...

  2. Linux文件查找命令find,xargs详述

    目录: 一.find 命令格式 1.find命令的一般形式为: 2.find命令的参数: 3.find命令选项: 4.使用exec或ok来执行shell命令: 二.find命令的例子: 1.查找当前用 ...

  3. /dev/tty /dev/ttyS0 /dev/tty0,/dev/null区别

    1./dev/tty表示控制终端如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件.可以使用命令”ps –ax”来查看进程 ...

  4. 展讯NAND Flash高级教程【转】

    转自:http://wenku.baidu.com/view/d236e6727fd5360cba1adb9e.html 展讯NAND Flash高级教程

  5. hihoCoder 1051补提交卡(贪心 枚举)

    http://hihocoder.com/problemset/problem/1051 既然要选择最长连续提交天数,那么提交卡必须连续使用才有可能得到最优解,这样贪心,然后从头到尾扫一遍求出最大值. ...

  6. Oracle中用一个表的数据更新另一个表的数据

    update tbl1 a   set (a.col1, a.col2) = (select b.col1, b.col2                              from tbl2 ...

  7. shell 块注释

    方法一 : ' 被注释的多行内容 ' 方法二 :<<eof 被注释的多行内容 eof 方法三 :<<! 被注释的多行内容 ! 方法四 if false ; then 被注释的多 ...

  8. XML Schema使用技巧——unique

    XML Schema使用技巧——unique   XML Scheam允许指定某个元素或属性的值在一定得范围内是唯一的.为了指定元素或属性值的唯一性,可以使用<xs:unqiue>元素,使 ...

  9. 浅析Java web程序之客户端和服务器端交互原理(转)

    转载自http://www.cnblogs.com/lys_013/archive/2012/05/05/2484561.html 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全 ...

  10. Jquery Highcharts 参数配置说明

    chart: renderTo 图表的页面显示容器 defaultSeriesType 图表的显示类型(line,spline, scatter, splinearea bar,pie,area,co ...