概述
使用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代码获取设备网络接口信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复