天天看点

通过ioctl获取所有接口

本想通过ioctl来获取所有的接口,后来发现只能获取已有ip的接口。

可以通过ioctl获取的网络接口参数

request参数 说明 类型
SIOCGIFCONF 获取所有接口信息 struct ifconf
SIOCGIFADDR 获取接口地址 struct ifreq
SIOCGIFFLAGS 获取接口状态 struct ifreq
SIOCGIFNETMASK 获取子网掩码 struct ifreq
SIOCGIFBRDADDR 获取广播地址 struct ifreq

先放结果

eth0接口无ip地址

通过ioctl获取所有接口

eth0接口有ip地址

通过ioctl获取所有接口

代码:

#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>



main()
{
	int socketfd;
	struct ifconf ifc;
	struct ifreq *ifr, if_hwaddr;
	int i;	
	char buff[1024];
	
	socketfd=socket(AF_INET,SOCK_DGRAM,0);

	ifc.ifc_len = sizeof(buff);
	ifc.ifc_buf = buff;
	
	if (ioctl(socketfd, SIOCGIFCONF, &ifc) < 0) {
		return -1;
	}
	ifr = ifc.ifc_req;

	for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0;ifr++) 
	{

		printf("--interface:%s-----------\n",ifr->ifr_name);
	}

}