【发布时间】:2011-02-16 22:10:12
【问题描述】:
嗯,我在 MSDN 上查看过这个,只发现了这个:GetAdaptersAddresses
我想要获取的是以太网信息,例如描述、发送的字节数、接收的字节数、带宽、延迟等。这可能吗?
【问题讨论】:
标签: c++ windows networking
嗯,我在 MSDN 上查看过这个,只发现了这个:GetAdaptersAddresses
我想要获取的是以太网信息,例如描述、发送的字节数、接收的字节数、带宽、延迟等。这可能吗?
【问题讨论】:
标签: c++ windows networking
您可以通过GetIfTable2 和GetIfEntry2 获得大部分信息。如果您需要与 XP 和更早版本的兼容性,则需要查看 GetIfTable 和 GetIfEntry。 *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;
}
【讨论】: