c ++ - Ethernet Information

Indlæg af Hanne Mølgaard Plasc

Problem



Nå, jeg har kigget på MSDN om dette, og kun fundet dette: GetAdaptersAddresses [7]


Og hvad jeg forsøger at få er den Etherned Information, som Beskrivelse, Bytes Sendt, Bytes Modtaget, Båndbredde, Latency, etc. Det er muligt?

Bedste reference


Du kan få mest muligt ud af det med GetIfTable2 og GetIfEntry2. Hvis du har brug for kompatibilitet med XP og tidligere, vil du i stedet se på GetIfTable og GetIfEntry. Funktionerne *2 giver mere information, men kun arbejde på Vista og nyere. [8] [9] [10] [11]


Jeg tror heller ikke, at det vil vise latens - for det er du stort set nødt til at gøre nogle målinger. Ligeledes vil båndbredden simpelthen være den nominelle båndbredde på adapteren (f.eks. 100 Mb/s eller 1000 Mb/s), ikke hvad du nødvendigvis kan forvente, når du kommunikerer med en bestemt vært.


Rediger: Her er en kode, jeg havde liggende rundt, der skulle vise den generelle ide om, hvordan man bruger disse funktioner:


#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
	", xf.bDescr);
        for (j=0; j<xf.dwPhysAddrLen; j++) {
            printf("\%2.2X", xf.bPhysAddr[j]);
            if ( j!= xf.dwPhysAddrLen-1)
                printf(":");
        }
        printf("
");
        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("
");
    }
    return 0;
}