【问题标题】:Want to get the list all the available interfaces on the system想要获取系统上所有可用接口的列表
【发布时间】:2011-05-12 13:08:30
【问题描述】:

我想获取特定 PC 上所有可用接口的列表,以及它们的有线或无线类型。目前我正在做以下但没有成功:-

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

如果只有名字也很好。

【问题讨论】:

标签: ubuntu networking c


【解决方案1】:

C 接口称为 ifaddrs,您可以将其包含在:

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

您感兴趣的函数是getifaddrs,一旦处理完数据,freeifaddrs

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 */
};

此结构包含ifconfig 命令行工具返回的所有信息。

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

void ifaddrs_deleter(struct ifaddrs * ia)
{
    freeifaddrs(ia);
}

并将getifaddrs() 的结果附加到它:

struct ifaddrs * ifa_start(nullptr);
if(getifaddrs(&ifa_start) != 0)
{
    return;
}
// will automatically delete on exception or any return
std::shared_ptr<struct ifaddrs> auto_free(ifa_start, ifaddrs_deleter);

【讨论】:

    【解决方案2】:

    我只是在 Ubuntu 上使用这个命令。我不确定这是否适用于其他发行版。

    ls /sys/class/net
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 ubuntu,正如您的标签所示,您始终可以阅读 /proc/net/dev,其中包含您要查找的信息。

      【讨论】:

        【解决方案4】:
        ifconfig -a
        

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

        İ如果您想了解有关您的界面的更多信息

        lspci
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-30
          • 2016-02-26
          • 2019-07-09
          • 1970-01-01
          • 2019-07-25
          • 1970-01-01
          • 1970-01-01
          • 2011-04-14
          相关资源
          最近更新 更多