使用iphlpapi.h獲得windows下一些基本的網絡連接信息
windows的平台sdk中有一個很重要的iphlpapi.h頭文件,它提供了一些非常實用的獲取網絡信息(網卡、tcp/ip等)的函數:
裏麵主要的函數主要有:
GetNumberOfInterfaces()獲取當前的網絡接口數目:注意不是網卡數目,這個相當於你的查看網絡連接裏麵的連接數目+1(本地回路)
GetIfTable()得到所有網絡接口的信息(包括網卡信息、收到發出數據量、連接類型、連接狀態等)
GetIpAddrTable() GetIpNetTable():獲取ip到網絡接口、IP到網卡地址的映射
GetTcpTable() GetUdpTable()獲取當前的TCP UDP連接狀況
GetIpStatistics() GetIcmpStatistics() GetTcpStatistics()GetUdpStatistics() 得到當前各協議的主要參數和信息,此外還有一些相應的set函數
還有關於路由的一些函數
GetAdapterIndex() GetAdaptersInfo() GetAdaptersAddresses():得到關於網卡的信息
AddIPAddress():設置IP
SendARP():發送一個arp請求,獲得一個物理地址所對應的IP地址
這裏的函數都比較實用,但是一些函數的用法稍微有些奇怪。
如裏麵很多的函數,以GetIfTable為例,它的定義是
DWORD GetIfTable( __out PMIB_IFTABLE pIfTable, __in_out PULONG pdwSize, __in BOOL bOrder );
第一個參數為一個接收存儲數據的緩存,第二個參數為這片數據的大小
我們直接調用將不知道該將第二個參數設為多少,所以應該先調用一次,將第二個參數設為MIB_IFTABLE結構體的size,這樣pdwSize中將返回所需的緩存大小
MIB_IFTABLE* it;
ULONG pdwSize=sizeof(MIB_IFTABLE);
it=(MIB_IFTABLE*)(malloc(sizeof(MIB_IFTABLE)));
GetIfTable(it,&pdwSize,false);free(it);
然後再為數據開辟這麼大的緩存再調用一次才行
it=(MIB_IFTABLE*)(malloc(pIfRow));
GetIfTable(it,&pIfRow,false);
free(it);
最後更新:2017-04-02 06:51:33