获得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. Unity3D脚本中文系列教程(十)

    http://dong2008hong.blog.163.com/blog/static/4696882720140312627682/?suggestedreading&wumii Unit ...

  2. Oracle函数+for循环

    create or replace function FilterMinganci(str in varchar) return varchar2 is filterWorld varchar2(10 ...

  3. MYSQL日常操作命令再熟悉

    1,创建用户及密码: CREATE USER 'user'@'%' IDENTIFIED BY 'password'; 2,创建数据库: create database PDB_chengang de ...

  4. cojs 简单的最近公共祖先 解题报告

    我曾经自己想过每考试一次就从考试题中找找idea来出题 这次又找到了一个,先不管原来的考试题是什么 考试题中其中的一部分就是今天的这道题目啦 当时考场上自己比较傻,没有注意到有用的性质,套用了之前黑白 ...

  5. 欧拉工程第58题:Spiral primes

    题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; impo ...

  6. [hackerrank]Even Odd Query

    https://www.hackerrank.com/contests/w5/challenges 简单题,注意整数的0次方是1,奇数. #include <iostream> #incl ...

  7. 【nginx网站性能优化篇(3)】反向代理实现负载均衡

    注意,本篇文章为负载均衡的理论篇,后续找个机会推出实战篇.理论篇主要讲述如何配置负载均衡,配置负载均衡不难.难的是真正的实战,比如如何做到多服务器之间的数据共享(session,file等),多cac ...

  8. php相关学习资源

    相关书籍资源: 1:PHP和MySQL Web开发 经典书籍 视频教程: PHP开发工程师闯关记--初识PHP php调试技巧: PHP 程序员的调试技术 使用 print 语句.错误报告和 PHPE ...

  9. Windows下gcc以及Qt的DLL文件调用之总结(三种方法)

    DLL与LIB的区别 :1.DLL是一个完整程序,其已经经过链接,即不存在同名引用,且有导出表,与导入表lib是一个代码集(也叫函数集)他没有链接,所以lib有冗余,当两个lib相链接时地址会重新建立 ...

  10. VC程序查错之内存访问异常

    作者:langouster 先来看下面这张图,相信很多程序员都见过类似. ---------------------------test1.exe - 应用程序错误------------------ ...