【问题标题】:how to get information about network adapter physical in c++如何在 C++ 中获取有关物理网络适配器的信息
【发布时间】:2017-02-19 13:41:37
【问题描述】:

我通过函数 GetNetworkParam、GetInterfaceInfo 等获取有关我计算机上安装的所有网络适配器的信息...

现在在 C++ 中,我想在我的系统中获取物理网络适配器的信息,而不是所有适配器(不是 VMWare 等),只是物理的,怎么做?

【问题讨论】:

  • 您为什么要这样做?您要解决的问题是什么?您列出的 API 告诉您有关接口的哪些类型的数据?例如,它们中有没有告诉你 PCI 总线的位置?
  • 我很遗憾地通知您,在构成 C++ 标准的 1400 多页中,没有提到任何称为“网络适配器”的东西。此外,没有通用的 API 来获取适用于世界上每个操作系统的这些信息。如果您甚至没有意识到需要指定您正在使用的操作系统的基本事实去做吧。继续学习基本的 C++ 几年左右,然后再试一次。
  • 欢迎来到 Stack Overflow。请容忍居住在这个陌生世界的无情人!
  • @SamVarshavchik 我很想知道 cpp 中没有这样的直接功能?
  • 直到标准 C++ 获得一个像样的网络库。

标签: c++


【解决方案1】:

正如 Sam V. 所指出的,C++ 是一种对网络硬件一无所知的语言。但是,您可以通过多种方式找到该信息,通常是使用一些库或框架。但是,这取决于您的一些要求。例如,找到一个完全可移植的解决方案可能会很困难。

也就是说,我会为此使用 Qt,因为它可以在许多流行平台上移植,同时仍然包含 impressive list of features。从官方文档中查看以下内容:

我在应用程序中用于过滤接口的一些示例代码:

 QList<QNetworkInterface> interfaceList=QNetworkInterface::allInterfaces();
    for(QNetworkInterface iface:interfaceList){
        QNetworkInterface::InterfaceFlags flags=iface.flags();
        if(flags&QNetworkInterface::InterfaceFlag::IsLoopBack){
            continue;
        }
        if(flags&QNetworkInterface::InterfaceFlag::IsPointToPoint){
            continue;
        }
// Filter on other properties you want here
    }

【讨论】:

  • 我很想知道cpp中没有这样的直接功能?
  • 这是正确的 Nidhin。在 C++ 中,您可以使用许多抽象,例如流,但在 C++ 中没有“本机”方式来枚举和/或获取有关网络硬件的信息。原因是 C++ 可以在很多不同的硬件上使用,其中一些没有“常规”网络范式。
  • 让你失望,但我想要 C++ 而不是 QT,
  • A. 001 然后你必须查看 Qt 等库的相应源代码,并亲自了解每个平台的任务是如何完成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多