¿Cómo puedo acceder a estadísticas de Ethernet similares a netstat desde un programa de Windows?

4 minutos de lectura

¿Cómo puedo acceder a las estadísticas de Ethernet desde un código C/C++ como 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

¿Como puedo acceder a estadisticas de Ethernet similares a netstat
Tomalak

El WMI proporcionará esas lecturas:

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

Estas clases están disponibles en Windows XP o posterior. Es posible que tenga que renunciar a las clases coincidentes “Win32_PerfRawData” en Windows 2000 y hacer un poco más de matemáticas antes de poder mostrar el resultado.

Encontrar documentación sobre todos ellos en MSDN.

  • Revisé la documentación y no tengo claro cómo usar esta funcionalidad. ¿Conoce algún buen ejemplo en C o C++ usando las clases que enumeró?

    – usuario3731622

    16/10/2015 a las 19:32

  • MSDN siempre es un buen punto de partida. Ejemplos de aplicaciones WMI C++. (Creo que podrías haberlo encontrado tú mismo).

    – Tomalak

    16/10/2015 a las 19:58


  • Lo vi, pero no me quedó muy claro. Lo miraré de nuevo. Gracias.

    – usuario3731622

    16/10/2015 a las 20:09

Un buen lugar para comenzar con las estadísticas de red sería el GetIpStatistics llame a las funciones de Windows IPHelper.

Hay un par de otros enfoques que posiblemente sean más portátiles: –

  • SNMP. Requiere que SNMP esté habilitado en la computadora, pero obviamente también se puede usar para recuperar estadísticas para computadoras remotas.
  • Canalice la salida de ‘netstat’ en su aplicación y elimine los valores del texto.

  • La salida de netstat es específica de la configuración regional y de la versión. Buena pinta con eso. 😀

    – Tomalak

    21 de octubre de 2008 a las 15:10

  • Jeje. Bueno, aún podría ser más fácil que hacer que SNMP funcione correctamente… 😉

    – Roddy

    21 de octubre de 2008 a las 19:19

Déjame responderme a mí mismo, ya que pregunté lo mismo en otro foro.

WMI es bueno, pero es más fácil usar IpHlpApi en su lugar:

#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");
        ...

  • Eso es lo que sugerí antes. Luego deberá llamar a GetIpStatistics para obtener las estadísticas que desea.

    – Roddy

    21 de octubre de 2008 a las 19:17

  • @Roddy no, las estadísticas de “netstat -e” solo necesitan llamar a GetIfTable, +1 para Denes

    – ariwez

    1 de agosto de 2013 a las 15:16

Szia,

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

En la plataforma Windows, la información de netstat se puede recuperar llamando a las funciones GetTcpTable y GetUdpTable en la API auxiliar de IP o IPHLPAPI.DLL. La información devuelta incluye direcciones IP locales y remotas, puertos locales y remotos y (para GetTcpTable) códigos de estado TCP. Además de la herramienta de línea de comandos netstat.exe que se incluye con Windows, existen programas netstat basados ​​en GUI disponibles. En la plataforma Windows, este comando está disponible solo si el protocolo de Internet (TCP/IP) está instalado como componente en las propiedades de un adaptador de red en Conexiones de red.

Ejemplo de MFC en CodeProject: http://www.codeproject.com/KB/applications/wnetstat.aspx

Es posible que encuentre una factible Contador de rendimiento de WMIp.ej Win32_PerfRawData_Tcpip_NetworkInterface.

Ver Grupos de Google, el código fuente original de netstats se ha publicado muchas veces (win32 api)

¿Como puedo acceder a estadisticas de Ethernet similares a netstat
Laisvis Lingvevicius

Como sugieren las respuestas anteriores, los contadores de rendimiento de WMI contienen algunos datos. Solo tenga en cuenta que en versiones posteriores de Windows, los contadores de rendimiento se desglosan en v4 vs v6, por lo que las consultas son:

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_IPv4

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_TCPv4

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_UDPv4

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_ICMP

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_IPv6

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_TCPv6

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_UDPv6

SELECCIONE * DESDE Win32_PerfFormattedData_Tcpip_ICMPv6

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad