如何从 netstat -e 等C / C ++代码访问以太网统计数据?
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
答案 0 :(得分: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。
答案 1 :(得分:2)
启动网络统计信息的好地方是Windows IPHelper功能中的GetIpStatistics调用。
还有一些其他方法可能更具便携性: -
答案 2 :(得分:2)
让我回答自己,正如我在另一个论坛上提出的那样。
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");
...
答案 3 :(得分:1)
Szia,
来自http://en.wikipedia.org/wiki/Netstat
在Windows平台上,netstat 信息可以通过检索 调用GetTcpTable和 IP Helper中的GetUdpTable函数 API或IPHLPAPI.DLL。信息 返回包括本地和远程IP 地址,本地和远程端口,以及 (对于GetTcpTable)TCP状态代码。在 除了命令行 随附的netstat.exe工具 Windows,有基于GUI的netstat 程序可用。 在Windows平台上,此命令 只有在互联网上才可用 协议(TCP / IP)协议是 作为组件安装在 网络适配器的属性 网络连接。
CodeProject上的MFC示例:http://www.codeproject.com/KB/applications/wnetstat.aspx
答案 4 :(得分:1)
答案 5 :(得分:0)
查看Google网上论坛,原始netstats源代码已多次发布(win32 api)
答案 6 :(得分:0)
如上所述,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