当前位置:  技术问答>linux和unix

急等~Linux网卡信息提取

    来源: 互联网  发布时间:2017-05-25

    本文导语:  代码功能是要求提取系统内的网卡信息,包括名称,类型,MAC,IP,MASK,速度等等。用C编写,数据存到结构体里。 因为多数数据在ifconfig命令下都可以显示,所以我的想法是从命令返回值中提取数据,使用popen , fgets...

代码功能是要求提取系统内的网卡信息,包括名称,类型,MAC,IP,MASK,速度等等。用C编写,数据存到结构体里。

因为多数数据在ifconfig命令下都可以显示,所以我的想法是从命令返回值中提取数据,使用popen , fgets,sscanf等函数实现。但是问题来了,在多网卡的系统下,使用命令ifconfig返回的内容很多,格式也不固定,提取起来很困难,比如:
xxx@xxxxx:~$ ifconfig
br0       Link encap:Ethernet  HWaddr a4:1f:72:98:ec:a9  
          inet addr:172.16.200.114  Bcast:172.16.200.255  Mask:255.255.255.0
          inet6 addr: fe80::a61f:72ff:fe98:eca9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:602739296 errors:0 dropped:0 overruns:0 frame:0
          TX packets:562145310 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:261880870281 (261.8 GB)  TX bytes:480978897517 (480.9 GB)

eth0      Link encap:Ethernet  HWaddr a4:1f:72:98:ec:a9  
          inet6 addr: fe80::a61f:72ff:fe98:eca9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:686510262 errors:0 dropped:527755 overruns:0 frame:0
          TX packets:726027323 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:278594375202 (278.5 GB)  TX bytes:494699541647 (494.6 GB)

我需要提取每一个网卡端口的对应信息,工作中刚接触C不久,所以请教各位有没有好的算法来提取?或者使用其他方式提取这些信息呢?

|


or munin or nagios. There are so many free open source monitoring tools made by perl/python/C. I just worry that you are reinventing the wheel...

|
用ioctl可以获得指定网卡的IP地址  MAC地址  广播地址 子网掩码

{

    struct sockaddr_in *addr;
    struct sockaddr     sa;   
    struct ifreq ifr;
    char *name,*address;
    int sockfd;
    unsigned   char   mac[6];

    if(argc != 2) {
         printf("usage : ipconfig interface /n");
         return -1;
    }
    else{
         name = argv[1];
}

    sockfd = socket(AF_INET,SOCK_DGRAM,0);
    strncpy(ifr.ifr_name,name,IFNAMSIZ-1);

    if(ioctl(sockfd,SIOCGIFADDR,&ifr) == -1){
         perror("ioctl error");
         return -1;
    }

    addr = (struct sockaddr_in *)&(ifr.ifr_addr);
    address = inet_ntoa(addr->sin_addr);
    printf("inet addr: %s n",address);

    if(ioctl(sockfd,SIOCGIFBRDADDR,&ifr) == -1){
         perror("ioctl error");
         return -1;
    }
    addr = (struct sockaddr_in *)&ifr.ifr_broadaddr;
    address = inet_ntoa(addr->sin_addr);
    printf("broad addr: %s n",address);

    if(ioctl(sockfd,SIOCGIFNETMASK,&ifr) == -1){
         perror("ioctl error");
         return -1;
    }
    addr = (struct sockaddr_in *)&ifr.ifr_addr;
    address = inet_ntoa(addr->sin_addr);
    printf("inet mask: %s n",address);

    if(ioctl(sockfd, SIOCGIFHWADDR, &ifr) == -1){
         perror("ioctl error");
         return -1;
    }
    memcpy(&sa,   &ifr.ifr_addr,   sizeof(struct   sockaddr_in));
    memcpy(mac,   sa.sa_data,   sizeof(mac));
    printf("%s   mac:   %.2X:%.2X:%.2X:%.2X:%.2X:%.2Xn",name,   mac[0],   mac[1],   mac[2],   mac[3],   mac[4],   mac[5]);
    return 1;

}

    
 
 

您可能感兴趣的文章:

  • !!请各位大牛帮忙了,在linux下提取系统时间的话,用什么方法能提取到比毫秒更精确的时间呢?
  • Linux shell awk提取数据
  • 如何用Linux中的文本编辑工具提取文本文件中的指定内容?
  • Linux中 怎么得到 一定时间内(timer) page fault 的数量怎么提取阿……什么数据结构存有page fault 的信息?
  • 求助:Linux 脚本如何提取MAC地址
  • 100分相送能帮我从LINUX下提取ISO9660的源代码的高手
  • linux下怎么提取本机真实mac地址??
  • Linux下多线程程序崩溃时如何提取出所有线程的函数调用栈
  • 请问!在linux中可以用socket提取链路层的数据包(也就是非基于IP,UDP和TCP的数据包)吗?
  • linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  • 怎么配置网卡,是不是红帽linux9要装网卡驱动啊
  • D-link DWL-122无线网卡厂家没有提供Linux下的驱动,我应该怎么办使得此无线网卡能在Linux下用啊?
  • LINUX中装了三个网卡,三个网卡都是同个IP段,如何让他们不能互相访问?
  • 双网卡搭建网桥后,怎样确定数据包是从那个网卡进来的?(LINUX)
  • linux下多网卡机器中,如何通过指定网卡来接受数据?
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • 请教LINUX下本机有多块网卡取其中指定一块网卡所对应的IP方法
  • 双网卡,eth0是ADSL,eth1局域网,linux启动时eth0显示失败,提示决定IP的错误,把网卡都设成192.168.0.1行吗
  • 关于linux网卡的问题
  • 单机无网卡,在 Virtual PC 下面安装 linux 问题
  • LINUX系统无法识别到网卡
  • linux网络配置(双网卡)问题
  • ********菜鸟问题,LINUX安装时没有检测到网卡*********
  • Linux 能否用100M的网卡?
  • 请问是不是有的网卡linux不认???
  • 为什么linux找不到网卡
  • secureCRT下Linux终端汉字乱码解决方法 iis7站长之家
  • ?红旗linux中如何更改网卡物理地址?
  • Linux网卡配置问题?
  • suse linux找不到网卡
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 请问linux起动时的信息被存放到哪里了?我想看看起动信息怎么办?
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • 请问在red hat linux 9下上CSDN,左侧栏的信息(我感兴趣的社区,我的技术社区,开发语言等等)是乱码,右侧的信息(问题帖子)可正常显
  • 我的linux不断在linux命令行处打印如下警告信息,怎么消除?
  • 如何查看Linux内核信息
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • linux 编程获取错误信息有没相关资料?
  • LINUX如何取进程信息,求解!!!
  • 怎样去掉硬盘分区里的Linux信息?
  • linux下如何看串口信息?
  • 关于在linux获取系统软件信息
  • linux查看日志信息
  • 找不到Linux引导信息了。
  • Linux系统信息查看软件 HardInfo
  • 帮我看下linux版本信息以及最新下载地址!
  • linux编译信息重定向
  • 请问Linux下要获得网络接口的相关信息,像ifconfig,netstat那样
  • linux命令行下,能否直接读取显存的信息?
  • 中软信息安全实验室诚聘Linux/Unix程序员
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3