2008-10-21 68 views

回答

2

开始进行网络统计的一个好地方是Windows IPHelper函数中的GetIpStatistics调用。

有一对夫妇的是可能更便携的其他方法: -

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

Szia,

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

在Windows平台上,netstat的 信息可以通过 调用GetTcpTable和IP帮助 API中 GetUdpTable功能,或IPHLPAPI检索.DLL。返回的信息 包括本地和远程IP地址,本地和远程端口以及 (用于GetTcpTable)TCP状态代码。在 除了命令行 netstat.exe工具附带的 Windows,还有基于GUI的netstat 程序可用。 在Windows平台上,该命令 仅在作为网络连接的 网络适配器的 属性中的组件安装的Internet协议(TCP/IP)协议为 时可用。在CodeProject

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

6

的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或更高版本。您可能必须在Windows 2000上辞职到匹配的“Win32_PerfRawData”类,并在显示输出之前进行更多的数学计算。

在MSDN中查找documentation on all of them

+0

我通过文件一看,这不是我清楚如何使用此功能。你知道在C或C++中使用你列出的类的好例子吗? – user3731622 2015-10-16 19:32:28

+0

MSDN始终是一个很好的起点。 [WMI C++应用程序示例](https://msdn.microsoft.com/en-us/library/aa394558(v = vs.85).aspx)。 (我想你可能已经发现了你自己。) – Tomalak 2015-10-16 19:58:50

+0

我确实看到了这一点,但对我而言并不是很清楚。我会再看一遍。谢谢。 – user3731622 2015-10-16 20:09:10

0

见谷歌论坛,原netstats源代码已经发布很多次(Win32 API的)

1

让我回答我自己,因为我问另一个论坛上是相同的。

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

如上的回答表明,WMI性能计数器包含一些数据。要知道,在更高版本的Windows的PERF的柜台被分解在V4 VS 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

相关问题