linux 网络接口的信息(C语言)

1. 获得网络接口名称

2.获取网络接口配置参数

3.获得MTU和MAC

4.获取网卡序号

5.获取发送队列长度

6.获取网络接口IP地址

7.获取网络广播地址

8.查询目的IP地址

9.查询子网掩码

下面是直接在linux系统中可运行

/*
 *网络接口的获取
 */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
 
int main(int argc , char *argv[]){
    int s;     /*套接字描述符*/
    int err = -1; /*错误值*/
    /*建立数据报套接字*/
    s = socket(AF_INET , SOCK_DGRAM , 0);
    if(s < 0){
        printf("socket() 出错 \n");
        return -1;
    }
    /*获得网络接口名称*/
    struct ifreq ifr;
    ifr.ifr_ifindex = 4; /*获取第四个(网卡序号为4)网络接口名称*/
    err = ioctl(s , SIOCGIFNAME , &ifr);
    if(err){
        printf("SIOCGIFNAME Error \n");
        return -1;
    }else{
        printf("the %d interface is %s \n" , ifr.ifr_ifindex , ifr.ifr_name);
    }
    /*获取网络接口配置参数*/
    memcpy(ifr.ifr_name , "eno1" , strlen("eno1") + 1);
    err = ioctl(s , SIOCGIFFLAGS , &ifr);
    if(!err){
        printf("SIOCGIFFLAGS:%d \n" , ifr.ifr_flags);
    }
    /*获得MTU和MAC*/
    err = ioctl(s , SIOCGIFMTU , &ifr);
    if(!err){
        printf("SIOCGIFMTU:%d \n" , ifr.ifr_mtu);
    }
    
    err = ioctl(s , SIOCGIFHWADDR , &ifr);
    if(!err){
        char *hw = ifr.ifr_hwaddr.sa_data;
        printf("SIOCGIFHWADDR: %02X : %02X : %02X : %02X : %02X : %02X \n" , hw[0] , hw[1],hw[2] , hw[3],hw[4] , hw[5]);
    }
    /*获取网卡序号*/
    err = ioctl(s , SIOCGIFINDEX , &ifr);
    if(!err){
        printf("网卡序号:%d \n" , ifr.ifr_ifindex);
    }
    /*获取发送队列长度*/
    err = ioctl(s , SIOCGIFTXQLEN , &ifr);
    if(!err){
        printf("发送队列长度:%d \n" , ifr.ifr_qlen);
    }
    /*获取网络接口IP地址*/
    struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr; //方便操作设置指向sockaddr_in的指针
    char ip[16]; //保存IP地址字符串
    memset(ip , 0 , 16);
    memcpy(ifr.ifr_name , "eno1" , strlen("eno1") + 1);
    err = ioctl(s , SIOCGIFADDR , &ifr);
    if(!err){
        inet_ntop(AF_INET , &sin->sin_addr.s_addr , ip , 16);
        printf("IP地址为:%s \n" , ip);
    }
    /*获取网络广播地址*/
    err = ioctl(s , SIOCGIFBRDADDR , &ifr);
    if(!err){
        inet_ntop(AF_INET , &sin->sin_addr.s_addr , ip , 16);
        printf("广播地址为:%s \n" , ip);
    } 
    /*查询目的IP地址*/
    err = ioctl(s , SIOCGIFDSTADDR , &ifr);
    if(!err){
        inet_ntop(AF_INET , &sin->sin_addr.s_addr , ip , 16);
        printf("目的IP地址为:%s \n" , ip);
    }
    /*查询子网掩码*/
    err = ioctl(s , SIOCGIFNETMASK , &ifr);
    if(!err){
        inet_ntop(AF_INET , &sin->sin_addr.s_addr , ip , 16);
        printf("子网掩码:%s \n" , ip);
    }
    return 0;
}
 

的代码

你可能感兴趣的:(网络,网络)