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

1. 获得网络接口名称

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

3.获得MTU和MAC

4.获取网卡序号

5.获取发送队列长度

6.获取网络接口IP地址

7.获取网络广播地址

8.查询目的IP地址

9.查询子网掩码

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

/*
 *网络接口的获取
 */
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<net/if_arp.h>
#include<string.h>
#include<linux/sockios.h>
#include<net/if.h>
#include<sys/ioctl.h>
#include<stdlib.h>
#include<unistd.h>
 
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;
}
 

的代码

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值