获得eth0接口所有信息:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <unistd.h>
  6. #include <sys/ioctl.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include <net/if.h>
  11. #include <string.h>
  12. unsigned char g_eth_name[16];
  13. unsigned char g_macaddr[16];
  14. unsigned int g_subnetmask;
  15. unsigned int g_ipaddr;
  16. unsigned int g_broadcast_ipaddr;
  17. //初始化网络,获取当前网络设备信息
  18. void init_net(void)
  19. {
  20. int i ;
  21. int sock;
  22. struct sockaddr_in sin;
  23. struct ifreq ifr;
  24. sock=socket(AF_INET, SOCK_DGRAM, 0);
  25. if(sock==-1)
  26. perror("socket");
  27. strcpy(g_eth_name, "eth0");
  28. strcpy(ifr.ifr_name, g_eth_name);
  29. printf("eth name:\t%s\n", g_eth_name);
  30. //获取并打印网卡地址
  31. if(ioctl(sock, SIOCGIFHWADDR, &ifr) <0 )
  32. perror("ioctl error\n");
  33. memcpy(g_macaddr, ifr.ifr_hwaddr.sa_data, 6);
  34. printf("local mac:\t");
  35. for(i=0;i<5;i++)
  36. printf("%.2x:", g_macaddr[i]);
  37. printf("%.2x\n", g_macaddr[i]);
  38. //获取并打印IP地址
  39. if(ioctl(sock, SIOCGIFADDR, &ifr)<0)
  40. perror("ioctl error\n");
  41. memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
  42. g_ipaddr = sin.sin_addr.s_addr;
  43. printf("local eth0:\t%s\n", inet_ntoa(sin.sin_addr));
  44. //获取并打印广播地址
  45. if(ioctl(sock, SIOCGIFBRDADDR, &ifr)<0)
  46. perror("ioctl error\n");
  47. memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
  48. g_broadcast_ipaddr = sin.sin_addr.s_addr;
  49. printf("broadcast:\t%s\n", inet_ntoa(sin.sin_addr));
  50. //获取并打印子网掩码
  51. if(ioctl(sock,SIOCGIFNETMASK,&ifr)<0)
  52. perror("ioctl error\n");
  53. memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
  54. g_subnetmask = sin.sin_addr.s_addr;
  55. printf("subnetmask:\t%s\n", inet_ntoa(sin.sin_addr));
  56. close(sock);
  57. }
  58. int main()
  59. {
  60. //initialize
  61. init_net();
  62. //do something
  63. //....
  64. return 0;
  65. }

获取所有IP:

  1. #include <string.h>
  2. #include <sys/ioctl.h>
  3. #include <sys/socket.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <linux/if.h>
  7. #include <arpa/inet.h>
  8. int main()
  9. {
  10. int i=0;
  11. int sockfd;
  12. struct ifconf ifconf;
  13. unsigned char buf[512];
  14. struct ifreq *ifreq;
  15. //初始化ifconf
  16. ifconf.ifc_len = 512;
  17. ifconf.ifc_buf = buf;
  18. if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
  19. {
  20. perror("socket open failure!\n" );
  21. exit(1);
  22. }
  23. ioctl(sockfd, SIOCGIFCONF, &ifconf); //获取所有接口信息
  24. //接下来一个一个的获取IP地址
  25. ifreq = (struct ifreq*)buf;
  26. for (i=(ifconf.ifc_len/sizeof (struct ifreq)); i>0; i--)
  27. {
  28. if(ifreq->ifr_flags == AF_INET)
  29. {
  30. printf("name = [%s] " , ifreq->ifr_name);
  31. printf("local addr = [%s]",
  32. inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));
  33. printf();
  34. ifreq++;
  35. }
  36. }
  37. return 0;
  38. }
获取本机的IP和MAC地址:
  1. /* 得到本机的mac地址和ip地址 */
  2. int GetLocalMac ( const char *device,char *mac,char *ip )
  3. {
  4. int sockfd;
  5. struct ifreq req;
  6. struct sockaddr_in * sin;
  7. if ( ( sockfd = socket ( PF_INET,SOCK_DGRAM,0 ) ) ==-1 )
  8. {
  9. fprintf ( stderr,"Sock Error:%s\n\a",strerror ( errno ) );
  10. return ( -1 );
  11. }
  12. memset ( &req,0,sizeof ( req ) );
  13. strcpy ( req.ifr_name,device );
  14. if ( ioctl ( sockfd,SIOCGIFHWADDR, ( char * ) &req ) ==-1 )
  15. {
  16. fprintf ( stderr,"ioctl SIOCGIFHWADDR:%s\n\a",strerror ( errno ) );
  17. close ( sockfd );
  18. return ( -1 );
  19. }
  20. memcpy ( mac,req.ifr_hwaddr.sa_data,6 );
  21. req.ifr_addr.sa_family = PF_INET;
  22. if ( ioctl ( sockfd,SIOCGIFADDR, ( char * ) &req ) ==-1 )
  23. {
  24. fprintf ( stderr,"ioctl SIOCGIFADDR:%s\n\a",strerror ( errno ) );
  25. close ( sockfd );
  26. return ( -1 );
  27. }
  28. sin = ( struct sockaddr_in * ) &req.ifr_addr;
  29. memcpy ( ip, ( char * ) &sin->sin_addr,4 );
  30. return ( 0 );
  31. }

ioctl()获取本地网卡设备信息的更多相关文章

  1. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  2. IOS 获取更多的设备信息

    ●  如果想获得更多的设备信息,比如 ●  设备型号.CPU情况.内存使用情况.硬盘使用情况 ●  是否越狱.装了哪些传感器.当前运行的进程 ●  ... ... ●  有2种方法获取更多的设备信息 ...

  3. 在有多个网卡,配置了多个IP的情况下,python 获取本地网卡的主IP

    如图所示有多个网卡 本地网卡配置了多个IP class Public_IPOp: @staticmethod def GetLocalIP(): rt = [False] # 根节点 reg_root ...

  4. IOS 特定于设备的开发:获取额外的设备信息

    sysctl()和sysctlbyname()允许获取系统信息.这些标准的UNIX函数用于询问操作系统有关硬件和OS的详细信息. 这些常量使你能够检查核心信息,比如系统的CPU频率,可用的内存量等.它 ...

  5. 获取本地的jvm信息,进行图形化展示

    package test1; import java.lang.management.CompilationMXBean; import java.lang.management.GarbageCol ...

  6. C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本系列,终 ...

  7. appium自动化测试框架——封装获取设备信息类

    在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...

  8. Linux下编程获取本地IP地址的常见方法

    转载于:http://blog.csdn.net/k346k346/article/details/48231933 在进行linux网络编程时,经常用到本机IP地址.本文罗列一下常见方法,以备不时之 ...

  9. LINUX - 获取本地ip

    Linux编程获取本机IP地址的几种方法 参考: https://blog.csdn.net/zhongmushu/article/details/89944990 https://www.cnblo ...

随机推荐

  1. 安卓 unit 测试与 instrument 测试的代码共享

    假如你有一款安卓应用,其包含一系列测试类,其中一部分是unit 测试(位于 src/test),其余为instrument 测试(位于 src/androidTest). 那么问题来了:你有一些想在所 ...

  2. How does database indexing work?

    When data is stored on disk based storage devices, it is stored as blocks of data. These blocks are ...

  3. Synchronized Methods

    Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...

  4. G家二面

    题目都很基本,都属于听说过但是不会做的…都是操作系统,compiler的概念题… 概念题郁闷就郁闷在不会就是不会,就算能扯两句也会被问倒… 算法就一个,pow(x, y),5分钟不到…… 不是听说G家 ...

  5. hdu 3441 Rotation

    总的来说,这题要2次用到polya定理. 由题目条件A*A=B*B+1,变形为(A-1)*(A+1)=K*B*B; 分别分解A-1和A+1的质因数,在合并在一起. 第一步:搜索B,对B*B的正方形涂色 ...

  6. [hackerrank]The Love-Letter Mystery

    https://www.hackerrank.com/contests/w3/challenges/the-love-letter-mystery 简单题. #include <cstdlib& ...

  7. java工具类–自动将数据库表生成javabean

    最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...

  8. SqlServer 如何以脚本形式导出数据

    你是否遇到这样的情况,在公司导出一个数据库,回到家里导入自己的电脑里,然后发现数据库版本不匹配,这真是一个悲剧. 那么以下这个方法就可以避免这个悲剧,将数据以脚本的形式导出,这样灵活性更好. 1.选择 ...

  9. opencv绘制灰度直方图

    代码之一: #include <cv.h> #include <highgui.h> #pragma comment( lib, "cv.lib" ) #p ...

  10. TCP protocol

    he characteristics of TCP protocol TCP (which means Transmission Control Protocol) is one of the mai ...