以太网信息

时间:2011-02-16 22:10:13

标签: c++ windows networking

好吧,我在MSDN上看过这个只发现了这个:GetAdaptersAddresses

我想要获得的是以太网信息,例如描述,发送的字节数,接收的字节数,带宽,延迟等等。这可能吗?

1 个答案:

答案 0 :(得分: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;
}