1.首先通过SIOCGIFCONF选项,获取所有接口表项(注:无ip地址的接口无法通过SIOCGIFCONF选项获得,需要访问特定文件才能获得,下图会有提示)
2.使用SIOCGIFADDR只能获得ipv4地址,ipv6需要访问特定获得文件(下图有提示)
本人电脑运行的结果也印证上面两点
代码:
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
const char* Inet_ntop(struct sockaddr*);
struct ifreq_own {
char* ifro;
size_t ifro_len;
int ifro_fd;
};
void* Malloc(size_t len) {
void* ptr;
if ((ptr = malloc(len)) == NULL) {
printf("malloc error: %s\n",strerror(errno));
exit(1);
}else {
return ptr;
}
}
void* Calloc(size_t n,size_t len) {
void* ptr;
if ((ptr = calloc(n,len)) == NULL) {
printf("calloc error: %s\n",strerror(errno));
exit(1);
}else {
return ptr;
}
}
struct ifreq_own get_ifreq() {
int sockfd;