2011-02-16 176 views
2

嗯,我看MSDN上关于此问题的唯一发现这一点:GetAdaptersAddresses以太网信息

什么我想要得到的是Etherned信息,如说明,发送字节数,接收的字节,带宽,延迟等等可能吗?

回答

1

您可以通过GetIfTable2GetIfEntry2获取大部分内容。如果你需要XP和更早版本的兼容性,你需要看看GetIfTableGetIfEntry*2函数提供了更多信息,但只适用于Vista和更新版本。

我不相信要么会显示延迟 - 因为你几乎需要做一些测量。同样,带宽将仅仅是适配器的额定带宽(例如,100 Mb/s或1000 Mb/s),而不是您在与任何特定主机通信时所期望的。

编辑:下面是一些代码我已经躺在附近应该展示如何使用这些功能的总体思路:

#include <windows.h> 
#include <iphlpapi.h> 
#include <stdlib.h> 
#include <stdio.h> 

int main() { 

    MIB_IFTABLE *interfaces; 
    unsigned long size = 0; 
    int i, j; 

    GetIfTable(interfaces, &size, FALSE); 

    interfaces = (MIB_IFTABLE *)malloc(size); 

    GetIfTable(interfaces, &size, TRUE); 

    for (i=0; i<interfaces->dwNumEntries; i++) { 
     MIB_IFROW &xf = interfaces->table[i]; 

     printf("%s\n\t", xf.bDescr); 
     for (j=0; j<xf.dwPhysAddrLen; j++) { 
      printf("%2.2X", xf.bPhysAddr[j]); 
      if (j!= xf.dwPhysAddrLen-1) 
       printf(":"); 
     } 
     printf("\n"); 
     switch(xf.dwType) { 
     case MIB_IF_TYPE_ETHERNET: 
      printf("Ethernet"); 
      break; 
     case MIB_IF_TYPE_FDDI: 
      printf("FDDI"); 
      break; 
     case MIB_IF_TYPE_TOKENRING: 
      printf("Token Ring"); 
      break; 
     case MIB_IF_TYPE_LOOPBACK: 
      printf("Loopback adapter"); 
      break; 
     case MIB_IF_TYPE_OTHER: 
      printf("Other"); 
      break; 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

好,我知道这项工作的一部分。但我不明白他们是如何工作的。 :/有时候他们解释错了,或者我不明白。 :( – Kazuma 2011-02-17 00:00:17