Windowsプログラムからnetstatのようなイーサネット統計にアクセスするにはどうすればよいですか
-
03-07-2019 - |
質問
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
解決
ネットワーク統計を開始するのに適した場所は、 Windows IPHelper関数のGetIpStatistics 呼び出し。
より移植性の高い他のアプローチがいくつかあります:-
- 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");
...
Szia、
http://en.wikipedia.org/wiki/Netstat
Windowsプラットフォームでは、netstat 情報を取得することができます GetTcpTableを呼び出し、 IPヘルパーの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
Googleグループをご覧ください。元のnetstatsソースコードが何度も投稿されています(win32 api)
上記の回答が示すように、WMIパフォーマンスカウンターにはいくつかのデータが含まれています。 Windowsの以降のバージョンでは、v4とv6でperfカウンターが分解されるため、クエリは次のようになります。
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