Frage

Wie kann ich Ethernet-Statistiken von C / C ++ Code wie netstat -e

Interface Statistics

                       Received            Sent

Bytes                      21010071        15425579
Unicast packets               95512           94166
Non-unicast packets           12510               7
Discards                          0               0
Errors                            0               3
Unknown protocols                 0
War es hilfreich?

Lösung

Ein guter Anfang für Netzwerkstatistiken wäre die GetIpStatistics Anruf in den Windows-IPHelper Funktionen.

Es gibt ein paar andere Ansätze, die möglicherweise mehr tragbar sind: -

  • SNMP. Erfordert SNMP auf dem Computer aktiviert werden, aber offensichtlich verwendet werden können Statistiken für Remote-Computer abgerufen werden auch.
  • Rohr die Ausgabe von ‚netstat‘ in Ihrer Anwendung und unpick die Werte aus dem Text.

Andere Tipps

Die WMI werden diese Messwerte liefern:

SELECT * FROM Win32_PerfFormattedData_Tcpip_IP
SELECT * FROM Win32_PerfFormattedData_Tcpip_TCP
SELECT * FROM Win32_PerfFormattedData_Tcpip_UDP
SELECT * FROM Win32_PerfFormattedData_Tcpip_ICMP
SELECT * FROM Win32_PerfFormattedData_Tcpip_Networkinterface

Diese Klassen sind auf Windows XP oder höher. Sie können auf den passenden „Win32_PerfRawData“ Klassen auf Windows 2000, und tun ein wenig mehr von Mathe haben, zurückzutreten, bevor Sie die Ausgabe angezeigt werden können.

Finden Dokumentation auf allen von ihnen die MSDN.

Lassen Sie mich zu mir selbst beantworten, da ich das gleiche auf einem anderen Forum gestellt.

WMI ist gut, aber es ist einfacher IpHlpApi zu verwenden, anstatt:

#include <winsock2.h>
#include <iphlpapi.h>

int main(int argc, char *argv[])
{

PMIB_IFTABLE pIfTable;
MIB_IFROW ifRow;
PMIB_IFROW pIfRow = &ifRow;
DWORD dwSize = 0;

// first call returns the buffer size needed
DWORD retv = GetIfTable(pIfTable, &dwSize, true);
if (retv != ERROR_INSUFFICIENT_BUFFER)
    WriteErrorAndExit(retv);
pIfTable = (MIB_IFTABLE*)malloc(dwSize);

retv = GetIfTable(pIfTable, &dwSize, true);
if (retv != NO_ERROR)
    WriteErrorAndExit(retv);

// Get index
    int i,j;
    printf("\tNum Entries: %ld\n\n", pIfTable->dwNumEntries);
    for (i = 0; i < (int) pIfTable->dwNumEntries; i++)
    {
        pIfRow = (MIB_IFROW *) & pIfTable->table[i];
        printf("\tIndex[%d]:\t %ld\n", i, pIfRow->dwIndex);
        printf("\tInterfaceName[%d]:\t %ws", i, pIfRow->wszName);
        printf("\n");
        printf("\tDescription[%d]:\t ", i);
        for (j = 0; j < (int) pIfRow->dwDescrLen; j++)
            printf("%c", pIfRow->bDescr[j]);
        printf("\n");
        ...

Szia,

http://en.wikipedia.org/wiki/Netstat

  

Auf der Windows-Plattform, netstat   Informationen können durch abgerufen werden   die GetTcpTable Aufruf und   GetUdpTable Funktionen im IP Helper   API oder Iphlpapi.dll. Information   Returned umfasst lokalen und Remote-IP   Adressen, lokale und Remote-Ports und   (Für GetTcpTable) TCP-Statuscodes. Im   Zusätzlich zu den Befehlszeile   netstat.exe Tool, das im Lieferumfang   Windows gibt es GUI-basierte netstat   Programme zur Verfügung.   Auf der Windows-Plattform, dieser Befehl   ist nur verfügbar, wenn das Internet   Protokoll (TCP / IP) -Protokoll ist   als Komponente in die installierte   Eigenschaften eines Netzwerkadapter in   Netzwerkverbindungen.

MFC Probe bei Codeproject: http://www.codeproject.com/KB/ Anwendungen / wnetstat.aspx

Siehe Google Groups, Code Original netstats Quelle geschrieben wurde viele Male (win32 api)

Wie oben Antworten vorschlagen, enthält WMI-Leistungsindikatoren einige Daten. Seien Sie sich bewusst sein, dass in späteren Versionen von Windows die perf Zähler werden in v4 vs v6 abgebaut, so die Abfragen sind:

SELECT * FROM Win32_PerfFormattedData_Tcpip_IPv4

SELECT * FROM Win32_PerfFormattedData_Tcpip_TCPv4

SELECT * FROM Win32_PerfFormattedData_Tcpip_UDPv4

SELECT * FROM Win32_PerfFormattedData_Tcpip_ICMP

SELECT * FROM Win32_PerfFormattedData_Tcpip_IPv6

SELECT * FROM Win32_PerfFormattedData_Tcpip_TCPv6

SELECT * FROM Win32_PerfFormattedData_Tcpip_UDPv6

SELECT * FROM Win32_PerfFormattedData_Tcpip_ICMPv6

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top