puerto filtrar established ejemplos comando ano c windows networking ethernet network-monitoring

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



netstat-ano (7)

¿Cómo puedo acceder a las estadísticas de Ethernet desde el 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


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 más reciente. Puede que tenga que renunciar a las clases "Win32_PerfRawData" coincidentes en Windows 2000, y hacer un poco más de matemática antes de poder mostrar el resultado.

Busque documentación sobre todos ellos en MSDN.


Permítanme responder 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"); ...



Szia,

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

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

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


Un buen lugar para comenzar a usar las estadísticas de red sería la llamada GetIpStatistics en las funciones de Windows IPHelper.

Hay un par de otros enfoques que son posiblemente 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.
  • Transmite la salida de ''netstat'' a tu aplicación, y deshace los valores del texto.

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


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:

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_IPv4

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_TCPv4

SELECT * FROM Win32_PerfFormattedData_Tcpip_UDPv4

SELECT * FROM Win32_PerfFormattedData_Tcpip_ICMP

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_IPv6

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_TCPv6

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_UDPv6

SELECCIONAR * FROM Win32_PerfFormattedData_Tcpip_ICMPv6