如何从 C/C++ 代码访问以太网统计信息,例如 网络状态-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
有帮助吗?

解决方案

网络统计的一个不错的起点是 获取IP统计信息 调用 Windows IPHelper 函数。

还有其他几种可能更便携的方法:-

  • SNMP。需要在计算机上启用 SNMP,但显然也可以用于检索远程计算机的统计信息。
  • 将“netstat”的输出通过管道传输到您的应用程序中,然后从文本中取消选取值。

其他提示

WMI将提供这些读数:

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

这些类可在Windows XP或更高版本上使用。您可能必须辞职到匹配的“Win32_PerfRawData”。 Windows 2000上的类,在显示输出之前先做一些数学运算。

查找所有这些文件 MSDN。

让我回答自己,正如我在另一个论坛上提出的那样。

WMI很好,但更容易使用IpHlpApi:

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

西娅,

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

在Windows平台上,可以通过在IP Helper API或iphlpapi.dll中调用可gettcptptable和getudptable功能来检索NetStat信息。返回的信息包括本地和远程IP地址,本地和远程端口,以及(对于可获取的)TCP状态代码。除了带有Windows发货的命令行NetStat.exe工具外,还有基于GUI的NetStat程序可用。在Windows平台上,仅当Internet协议(TCP/IP)协议作为网络连接中网络适配器的属性中的组件安装时,此命令才可用。

CodeProject 中的 MFC 示例: http://www.codeproject.com/KB/applications/wnetstat.aspx

您可能会发现一个可行的 WMI性能计数器,例如 Win32_PerfRawData_Tcpip_NetworkInterface

查看Google网上论坛,原始netstats源代码已多次发布(win32 api)

如上所述,WMI性能计数器包含一些数据。请注意,在Windows的更高版本中,性能计数器在v4与v6中分解,因此查询为:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top