Pergunta

Como posso acesso Ethernet estatísticas de 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
Foi útil?

Solução

Um bom lugar para começar a estatísticas de rede seria o GetIpStatistics chamada nas funções do Windows IPHelper.

Há um par de outras abordagens que são possivelmente mais portátil: -

  • SNMP. Requer SNMP a ser ativado no computador, mas, obviamente, pode ser usado para recuperar estatísticas para computadores remotos também.
  • canalizar a saída do 'netstat' em sua aplicação, e desfazer os valores do texto.

Outras dicas

O WMI fornecemos a essas leituras:

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

Essas classes estão disponíveis no Windows XP ou mais recente. Você pode ter que renunciar à correspondência aulas "Win32_PerfRawData" no Windows 2000, e fazer um pouco mais de matemática antes de exibir a saída.

em todos eles em MSDN.

Deixe-me responder a mim mesmo, como eu pedi a mesma em outro fórum.

WMI é bom, mas é mais fácil de usar IpHlpApi vez:

#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

Na plataforma Windows, netstat informação pode ser recuperada por chamando o GetTcpTable e funções GetUdpTable no Helper IP API, ou Iphlpapi.dll. Em formação retornada inclui IP local e remoto endereços, locais e portas remotas, e (Para GetTcpTable) códigos de status TCP. No Além da linha de comando ferramenta netstat.exe que acompanha o netstat, não são baseadas em GUI do Windows programas disponíveis. Na plataforma Windows, este comando está disponível somente se o Internet Protocol (TCP / IP) protocolo é instalado como um componente no Propriedades de uma placa de rede em Conexões de rede.

Exemplo de MFC em CodeProject: http://www.codeproject.com/KB/ aplicações / wnetstat.aspx

Ver Grupos do Google, o código fonte netstats originais foi postado muitas vezes (win32 api)

Como acima respostas sugerem, contadores de desempenho WMI contém alguns dados. Esteja ciente de que em versões posteriores do Windows os contadores perf são discriminadas em v4 vs v6 assim as consultas são:

* 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top