我是靠谱客的博主 慈祥画板,最近开发中收集的这篇文章主要介绍Linux下使用C代码获取设备网络接口信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用getifaddrs函数获取网络接口的相关信息,代码如下:

#include <stdio.h>  
#include <ifaddrs.h>  
#include <arpa/inet.h>  

int getSubnetMask()
{
    struct sockaddr_in *sin = NULL;
    struct ifaddrs *ifa = NULL, *ifList;

    if (getifaddrs(&ifList) < 0)
    {
        return -1;
    }

    for (ifa = ifList; ifa != NULL; ifa = ifa->ifa_next)
    {
        if(ifa->ifa_addr->sa_family == AF_INET)
        {
            printf("n>>> interfaceName: %sn", ifa->ifa_name);

            sin = (struct sockaddr_in *)ifa->ifa_addr;
            printf(">>> ipAddress: %sn", inet_ntoa(sin->sin_addr));

            sin = (struct sockaddr_in *)ifa->ifa_dstaddr;
            printf(">>> broadcast: %sn", inet_ntoa(sin->sin_addr));

            sin = (struct sockaddr_in *)ifa->ifa_netmask;
            printf(">>> subnetMask: %sn", inet_ntoa(sin->sin_addr));
        }
    }

    freeifaddrs(ifList);

    return 0;
}

int main(void)
{
    getSubnetMask();

    return 0;
}

当然也可是使用IoCtrl的方法获取,获取方式参考:Link,关于两个函数的解释可以参考man中的释义,挺全面的;不过在使用中我遇到了一些问题,当设备的无线网卡为monitor模式时,通过以上接口获取不到无线接口,而且也获取不到被桥接后的网卡端口,而且如果有线网卡处于未启用状态也无法显示出来。所以想到了用管道调用的方式来调用ifconfig,iwconfig获取网络接口信息:

int get_net_interface_info()
{
	char buffer[4096];
	FILE *fp = NULL;

	fp = popen("ifconfig","r");
    if(fp == NULL)
    {
        printf("wifi info get failed!n");
        return -1;
    }
	memset(buffer, 0, sizeof(buffer));
	fread(buffer, sizeof(buffer) -1, 1, fp);
	pclose(fp);
	printf("wifi info:n{n%sn}n", buffer);
    //do something with buffer

	return 0;
}

当然也可以读取/proc/net/下的文件获取相应信息,不过该部分中的信息并不直接,不如管道调用popen,但是popen的执行速度和效率没用直接读取文件来的快捷,所以选择适合自己的方式就好;

最后

以上就是慈祥画板为你收集整理的Linux下使用C代码获取设备网络接口信息的全部内容,希望文章能够帮你解决Linux下使用C代码获取设备网络接口信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部