Wie kann ich netstat-wie Ethernet-Statistiken von einem Windows-Programm
-
03-07-2019 - |
Frage
Wie kann ich Ethernet-Statistiken von C / C ++ Code wie 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
Lösung
Ein guter Anfang für Netzwerkstatistiken wäre die GetIpStatistics Anruf in den Windows-IPHelper Funktionen.
Es gibt ein paar andere Ansätze, die möglicherweise mehr tragbar sind: -
- SNMP. Erfordert SNMP auf dem Computer aktiviert werden, aber offensichtlich verwendet werden können Statistiken für Remote-Computer abgerufen werden auch.
- Rohr die Ausgabe von ‚netstat‘ in Ihrer Anwendung und unpick die Werte aus dem Text.
Andere Tipps
Die WMI werden diese Messwerte liefern:
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
Diese Klassen sind auf Windows XP oder höher. Sie können auf den passenden „Win32_PerfRawData“ Klassen auf Windows 2000, und tun ein wenig mehr von Mathe haben, zurückzutreten, bevor Sie die Ausgabe angezeigt werden können.
Finden Dokumentation auf allen von ihnen die MSDN.
Lassen Sie mich zu mir selbst beantworten, da ich das gleiche auf einem anderen Forum gestellt.
WMI ist gut, aber es ist einfacher IpHlpApi zu verwenden, anstatt:
#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
Auf der Windows-Plattform, netstat Informationen können durch abgerufen werden die GetTcpTable Aufruf und GetUdpTable Funktionen im IP Helper API oder Iphlpapi.dll. Information Returned umfasst lokalen und Remote-IP Adressen, lokale und Remote-Ports und (Für GetTcpTable) TCP-Statuscodes. Im Zusätzlich zu den Befehlszeile netstat.exe Tool, das im Lieferumfang Windows gibt es GUI-basierte netstat Programme zur Verfügung. Auf der Windows-Plattform, dieser Befehl ist nur verfügbar, wenn das Internet Protokoll (TCP / IP) -Protokoll ist als Komponente in die installierte Eigenschaften eines Netzwerkadapter in Netzwerkverbindungen.
MFC Probe bei Codeproject: http://www.codeproject.com/KB/ Anwendungen / wnetstat.aspx
Sie können eine WMI-Leistungsindikatoren finden , zB Win32_PerfRawData_Tcpip_NetworkInterface .
Siehe Google Groups, Code Original netstats Quelle geschrieben wurde viele Male (win32 api)
Wie oben Antworten vorschlagen, enthält WMI-Leistungsindikatoren einige Daten. Seien Sie sich bewusst sein, dass in späteren Versionen von Windows die perf Zähler werden in v4 vs v6 abgebaut, so die Abfragen sind:
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