IPに関する統計情報を取得する
IPHLPAPIのGetIpStatistics()を使うとIPに関する統計情報を取得することができます。 ここでは、GetIpStatistics()の使い方を説明します。
サンプルコード
GetIpStatistics()を使ったサンプルコードを以下に示します。
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
int
main()
{
MIB_IPSTATS ipstats;
if (GetIpStatistics(&ipstats) == NOERROR) {
printf("dwForwarding : %ld\n", ipstats.dwForwarding);
printf("dwDefaultTTL: %ld\n", ipstats.dwDefaultTTL);
printf("dwInReceives: %ld\n", ipstats.dwInReceives);
printf("dwInHdrErrors: %ld\n", ipstats.dwInHdrErrors);
printf("dwInAddrErrors: %ld\n", ipstats.dwInAddrErrors);
printf("dwForwDatagrams: %ld\n", ipstats.dwForwDatagrams);
printf("dwInUnknownProtos: %ld\n", ipstats.dwInUnknownProtos);
printf("dwInDiscards: %ld\n", ipstats.dwInDiscards);
printf("dwInDelivers: %ld\n", ipstats.dwInDelivers);
printf("dwOutRequests: %ld\n", ipstats.dwOutRequests);
printf("dwRoutingDiscards: %ld\n", ipstats.dwRoutingDiscards);
printf("dwOutDiscards: %ld\n", ipstats.dwOutDiscards);
printf("dwOutNoRoutes: %ld\n", ipstats.dwOutNoRoutes);
printf("dwReasmTimeout: %ld\n", ipstats.dwReasmTimeout);
printf("dwReasmReqds: %ld\n", ipstats.dwReasmReqds);
printf("dwReasmOks: %ld\n", ipstats.dwReasmOks);
printf("dwReasmFails: %ld\n", ipstats.dwReasmFails);
printf("dwFragOks: %ld\n", ipstats.dwFragOks);
printf("dwFragFails: %ld\n", ipstats.dwFragFails);
printf("dwFragCreates: %ld\n", ipstats.dwFragCreates);
printf("dwNumIf: %ld\n", ipstats.dwNumIf);
printf("dwNumAddr: %ld\n", ipstats.dwNumAddr);
printf("dwNumRoutes: %ld\n", ipstats.dwNumRoutes);
} else {
printf("GetIpStatistics failed : %d\n", GetLastError());
}
return 0;
}
サンプルコード実行例
上記コードをコンパイルして出来たものを実行すると、以下のようになります。
C:> a.exe
dwForwarding : 2
dwDefaultTTL: 128
dwInReceives: 548610
dwInHdrErrors: 0
dwInAddrErrors: 283
dwForwDatagrams: 0
dwInUnknownProtos: 0
dwInDiscards: 0
dwInDelivers: 548574
dwOutRequests: 255708
dwRoutingDiscards: 0
dwOutDiscards: 0
dwOutNoRoutes: 0
dwReasmTimeout: 60
dwReasmReqds: 0
dwReasmOks: 0
dwReasmFails: 0
dwFragOks: 0
dwFragFails: 0
dwFragCreates: 0
dwNumIf: 2
dwNumAddr: 2
dwNumRoutes: 7
GetIpStatistics()が利用する構造体
GetIpStatistics()が利用する構造体MIB_IPSTATSを以下に示します。
typedef struct _MIB_IPSTATS {
DWORD dwForwarding;
DWORD dwDefaultTTL;
DWORD dwInReceives;
DWORD dwInHdrErrors;
DWORD dwInAddrErrors;
DWORD dwForwDatagrams;
DWORD dwInUnknownProtos;
DWORD dwInDiscards;
DWORD dwInDelivers;
DWORD dwOutRequests;
DWORD dwRoutingDiscards;
DWORD dwOutDiscards;
DWORD dwOutNoRoutes;
DWORD dwReasmTimeout;
DWORD dwReasmReqds;
DWORD dwReasmOks;
DWORD dwReasmFails;
DWORD dwFragOks;
DWORD dwFragFails;
DWORD dwFragCreates;
DWORD dwNumIf;
DWORD dwNumAddr;
DWORD dwNumRoutes;
} MIB_IPSTATS, *PMIB_IPSTATS;
dwForwarding | IPフォワーディングのEnabled/Disabledを示します。 |
dwDefaultTTL | Default TTL(Time-To-Live)です。 |
dwInReceives | 受信したデータグラムの数です。 |
dwInHdrErrors | ヘッダエラーを含むデータグラムを受信した数です。 |
dwInAddrErrors | アドレスエラーを含むデータグラムを受信した数です。 |
dwForwDatagrams | フォワードしたデータグラムの数です。 |
dwInUnknownProtos | 不明なプロトコルを持つデータグラムを受信した数です。 |
dwInDiscards | Discardしたデータグラムの数です。 |
dwInDelivers | 受信したデータグラムのうち、配送されたものの数です。 |
dwOutRequests | 送信しようとしたデータグラムの数です。dwForwDatagramsの値は含まれません。 |
dwRoutingDiscards | 送信されずにDiscardされたデータグラムの数です。 |
dwOutDiscards | Discardされた転送データグラムの数です。 |
dwOutNoRoutes | 経路が存在せずにDiscardされたデータグラムの数です。 |
dwReasmTimeout | フラグメントされたデータグラムのリアセンブルをあきらめるまでのタイムアウトです。 |
dwReasmReqds | リアセンブルを要求したデータグラムの数です。 |
dwReasmOks | リアセンブルが成功したデータグラムの数です。 |
dwReasmFails | リアセンブルが失敗したデータグラムの数です。 |
dwFragOks | フラグメントが成功したデータグラム数です。 |
dwFragFails | フラグメントが失敗したデータグラム数です。 |
dwFragCreates | 生成されたフラグメント数です。 |
dwNumIf | インターフェース数です。 |
dwNumAddr | ローカルマシンに関連するIPアドレスの数です。 |
dwNumRoutes | 経路表にある経路の数です。 |