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");
...
Puede encontrar un contador de rendimiento de WMI factible, por ejemplo, Win32_PerfRawData_Tcpip_NetworkInterface .
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