閱讀987 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用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

  上一篇:go 關於new、Create、對象以及窗口的一點問題
  下一篇:go mkdir,mkdirs區別