想要获取系统上所有可用接口的列表

时间:2011-05-12 13:08:30

标签: ubuntu networking c

我希望列出特定PC上所有可用接口的列表以及有线或无线类型。目前我正在做以下但没有成功: -

ioctl(sd, SIOCGIFNAME, &ifr);
strncpy(ifname,ifr.ifr_name,IFNAMSIZ);
printf("Interface name :%s\n",ifname);

如果只有名字可用,也会很好。

4 个答案:

答案 0 :(得分:20)

如果您使用的是ubuntu,正如您的代码所示,您可以随时阅读/proc/net/dev,其中包含您要查找的信息。

答案 1 :(得分:12)

ifconfig -a

所有你可以看到接口avalaible列表,你不需要C代码脚本,

如果您想获得更多关于界面的信息

lspci

您可以找到您的接口类型和型号

答案 2 :(得分:3)

C界面名为 ifaddrs ,您可以将其包含在:

-(void) setTheGifHeigt:(int)screenHeight andWidth:(int)screenWidth andSize:(int)size{
image = [[FLAnimatedImage alloc] initWithAnimatedGIFData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"mygif" ofType:@"gif"]]];
imageView = [[FLAnimatedImageView alloc] init];
imageView.loopCompletionBlock(0);
imageView.animatedImage = image;

imageView.frame = CGRectMake((screenWidth / 2) - (size / 2), (screenHeight / 2) - (size / 2), size, size);
[self.view addSubview:imageView];

}

您感兴趣的功能是getifaddrs,一旦完成了数据freeifaddrs

#include <sys/types.h>
#include <ifaddrs.h>

此结构包含struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface */ struct sockaddr *ifa_netmask; /* Netmask of interface */ union { struct sockaddr *ifu_broadaddr; /* Broadcast address of interface */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_dstaddr ifa_ifu.ifu_dstaddr void *ifa_data; /* Address-specific data */ }; 命令行工具返回的所有信息。

对于C ++用户,我建议您使用这样的删除器:

ifconfig

并将void ifaddrs_deleter(struct ifaddrs * ia) { freeifaddrs(ia); } 的结果附加到:

getifaddrs()

答案 3 :(得分:0)

我只在Ubuntu上使用此命令。我不确定这项工作是否可以用于其他发行版。

ls /sys/class/net