Linux 获取网卡信息

#include <sys/ioctl.h>
#include <net/if.h>
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
    struct ifreq ifr;
    struct ifconf ifc;
    char buf[2048];
    int success = 0;

    int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock == -1) {
        printf("socket error\n");
        return -1;
    }

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) {
        printf("ioctl error\n");
        return -1;
    }

    struct ifreq* it = ifc.ifc_req;
    const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));
    char szMac[64];
    int count = 0;
    for (; it != end; ++it) {
        strcpy(ifr.ifr_name, it->ifr_name);
        if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {
            if (! (ifr.ifr_flags & IFF_LOOPBACK)) { // don‘t count loopback
                if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {
                    count ++ ;
                    unsigned char * ptr ;
                    ptr = (unsigned char  *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
                    snprintf(szMac,64,"%02X:%02X:%02X:%02X:%02X:%02X",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
                    printf("%d,Interface name : %s , Mac address : %s \n",count,ifr.ifr_name,szMac);
                }
            }
        }else{
            printf("get mac info error\n");
            return -1;
        }
    }
}
时间: 2024-08-07 08:39:25

Linux 获取网卡信息的相关文章

Linux 获取本机IP、MAC地址用法大全

getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: C代码   struct ifaddrs { struct ifaddrs  *ifa_next;    /* Next item in list */ char            *ifa_name;    /* Name of interface */ unsigned int     ifa_flags;   /* Flags from SIOCGIFFLAGS */ struc

linux获取目录下文件

查看当前目录下的文件:find . -type f查看当前目录下的文件夹: find . -type d如果文件file1不为空: if [ -s file1 ];then       echo "file1 不为空"fi #!/bin/sh for f in `find ./testdir -type f`; do         if [ -s $f ];then                 echo $f is not empty.                 echo 

Linux获取网络接口信息

linux获取网络接口信息需要用到的函数为ioctl(),结构体struct ifreq,struct ifconf 1.ioctl()函数原型及作用 1 #include <sys/ioctl.h> 2 3 int ioctl(int d, int request, ...); 4 5 //参数 6 //int d:是一个文件描述符 7 //int request :表示要请求的信息.如IP地址.网络掩码等 8 //......:可变参数,根据request而定 下面是ioctl请求的req

linux获取CPU温度

Centos系列 1 yum install lm_sensors 2 sensors-detect 3 sensors Ubuntu系列(多了service module-init-tools start一步骤) 1 apt-get install lm-sensors 2 sensors-detect 3 service module-init-tools start 4 sensors 也可以通过sys系统读取cpu的温度: /sys/class/hwmon/hwmon0/device/

总结三:Linux获取命令帮助

总结三:Linux获取命令帮助 一.命令类型查看 用法:type COMMAND 二.Shell内置命令 用法:help COMMAND 三.外部命令 1.获取简要帮助信息 用法:COMMAND --help 2.获取详细帮助信息(使用手册) 用法:man COMMAND man 其实是  manual(手册)  的缩写,其文件路径之一:/usr/share/man/ (1).手册里段落名称解释 NAME:命令名称 DESCRIPTION:命令功能的详细描述 OPTIONS:所有选项 SYNOP

通过grep,awk,sed的简单应用获取网卡信息。

本文主要通过shell命令来实现获取网卡信息.通过cmd_shell函数可以将运行命令后的输出返回. int cmd_shell(char *shellcmd, char *outbuffer, int size) { FILE *stream; char buffer[size]; memset(buffer, 0, sizeof(buffer)); stream = popen(shellcmd, "r"); if (stream != NULL) { fread(buffer,

linux获取daemon进程的控制台数据

linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果.但是进程后台运行后,原本在终端控制台输出的数据就看不到了.那么,怎样才能找回这些数据? 这里,文章主题就围绕着 如何获得后台进程的控制台数据,其中的原理要从daemon说起. daemon主要做两件事: 1.创建子进程,退出当前进程,并且以子进程创建新会话.这样,就算父进程退出,子进程也不会被关闭 2.将标准输入,标准输出,标准错误都重定向/dev/null daemon 实现大致如下: int daemon

linux获取后台进程的控制台数据

linux提供了一个daemon函数,使得进程能够脱离控制台执行,实现了后台执行的效果.可是进程后台执行后,原本在终端控制台输出的数据就看不到了. 那么,如何才干找回这些数据? 这里.文章主题就环绕着 如何获得后台进程的控制台数据,当中的原理要从daemon说起. daemon主要做两件事: 1.创建子进程,退出当前进程,而且以子进程创建新会话.这样,就算父进程退出,子进程也不会被关闭 2.将标准输入.标准输出,标准错误都重定向/dev/null daemon 实现大致例如以下: int dae

[记]Linux 获取本机(全部)IP、MAC地址方法 (C/C++)

Linux 获取本机IP.MAC地址用法大全 1 2 //#include <sys/types.h> 3 #include <ifaddrs.h> 4 #include <sys/ioctl.h> 5 #include <net/if.h> 6 #include <string.h> 7 #include <stdio.h> 8 #include <unistd.h> 9 #include <netdb.h>