IP助手函數-Ipconfig

IPCONFIG.EXE程序展示了兩天信息:IPv4配置信息和IPv4配置參數。

要獲得這些配置信息,利用GetNetworkParams函數即可

  1. DWORD GetNetworkParams( 
  2.   __out         PFIXED_INFO pFixedInfo, 
  3.   __in          PULONG pOutBufLen 
  4. ); 

 

 

pFixedInfo取得一個緩衝區指針,該緩衝區接收PFIXED_INFO結構,應用程序必須提供這個結構,以便獲得IPv4配置信息。

pOutBufLen是一個變量指針,指定傳遞到pFixedInfo中那個緩衝區的長度。如果提供的緩衝區不夠大,函數就會返回ERROR_BUFFER_OVERFLOW錯誤,並將pOutBufLen設爲正確的緩衝區長度。

  1. typedef struct {   
  2.     char HostName[MAX_HOSTNAME_LEN + 4];   
  3.     char DomainName[MAX_DOMAIN_NAME_LEN + 4];   
  4.     PIP_ADDR_STRING CurrentDnsServer;   
  5.     IP_ADDR_STRING DnsServerList;   
  6.     UINT NodeType;   
  7.     char ScopeId[MAX_SCOPE_ID_LEN + 4];   
  8.     UINT EnableRouting;   
  9.     UINT EnableProxy;   
  10.     UINT EnableDns; 
  11. } FIXED_INFO, *PFIXED_INFO; 

 

 

獲得網絡接口特有的IP配置信息可以用GetAdaptersInfo函數:

  1. DWORD GetAdaptersInfo( 
  2.   __out         PIP_ADAPTER_INFO pAdapterInfo, 
  3.   __in_out      PULONG pOutBufLen 
  4. ); 

 

pAdapterInfo參數來把一個指針投遞給應用程序提供的緩衝區,這個緩衝區接收一個ADAPTER_INFO數據結構,這個結構中包含這個適配器的配置信息。

pOutBufLen參數是一個指針變量,指定傳到pAdapterInfo參數中緩衝區的長度,如果提供的緩衝區不夠大,函數返回ERROR_BUFFER_OVERFLOW,並把pOutBufLen設爲需要的緩衝區長度。

  1. typedef struct _IP_ADAPTER_INFO {   
  2.     struct _IP_ADAPTER_INFO* Next;   
  3.     DWORD ComboIndex;   
  4.     char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];   
  5.     char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];   
  6.     UINT AddressLength;   
  7.     BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];   
  8.     DWORD Index;   
  9.     UINT Type;   
  10.     UINT DhcpEnabled;   
  11.     PIP_ADDR_STRING CurrentIpAddress;   
  12.     IP_ADDR_STRING IpAddressList;   
  13.     IP_ADDR_STRING GatewayList;   
  14.     IP_ADDR_STRING DhcpServer;   
  15.     BOOL HaveWins;   
  16.     IP_ADDR_STRING PrimaryWinsServer;   
  17.     IP_ADDR_STRING SecondaryWinsServer;   
  18.     time_t LeaseObtained;   
  19.     time_t LeaseExpires; 
  20. } IP_ADAPTER_INFO,  *PIP_ADAPTER_INFO; 

 

 

GetAdaptersInfo返回關於物理適配器及分配給它的IPv4地址的大量信息,但不返回IPv6的信息,GetAdaptersAddresses函數返回IPv4和IPv6地址信息:

  1. ULONG WINAPI GetAdaptersAddresses( 
  2.   __in          ULONG Family, 
  3.   __in          ULONG Flags, 
  4.   __in          PVOID Reserved, 
  5.   __in_out      PIP_ADAPTER_ADDRESSES AdapterAddresses, 
  6.   __in_out      PULONG SizePointer 
  7. ); 

 

Family參數指明應該被列舉的地址族

Flags控制返回地址的類型

最後兩個參數是緩衝區及緩衝區長度

 

釋放和更新IPv4地址:

  1. DWORD IpReleaseAddress(//釋放 
  2.   __in          PIP_ADAPTER_INDEX_MAP AdapterInfo 
  3. ); 
  4. DWORD IpRenewAddress(//更新 
  5.   __in          PIP_ADAPTER_INDEX_MAP AdapterInfo 
  6. ); 

 

  1. typedef struct _IP_ADAPTER_INDEX_MAP {   
  2.     ULONG Index;  //適配器分配的內部網絡接口索引 
  3.     WCHAR Name[MAX_ADAPTER_NAME];//適配器名 
  4. }IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; 

 

調用GetInterfaceInfo可獲得某一特定適配器的IP_ADAPTER_INDEX_MAP結構:

  1. DWORD GetInterfaceInfo( 
  2.   __out         PIP_INTERFACE_INFO pIfTable, 
  3.   __in_out      PULONG dwOutBufLen 
  4. ); 

 

pIfTable是一個指針,指向一個IP_INTERFACE_INFO應用程序緩衝區,該緩衝區將接收接口信息

dwOutBufLen是一個指針,指定傳到pIfTable中的緩衝區長度,如果大小有錯誤,則函數返回ERROR_INSUFFICIENT_BUFFER錯誤,並把dwOutBufLen設爲合適的長度

  1. typedef struct _IP_INTERFACE_INFO { 
  2.   LONG NumAdapters; 
  3.   IP_ADAPTER_INDEX_MAP Adapter[1]; 
  4. } IP_INTERFACE_INFO,  *PIP_INTERFACE_INFO; 

 

增加或刪除特定適配器的IP地址

AddIpAddress,DeleteIpAddress

  1. DWORD AddIPAddress( 
  2.   __in          IPAddr Address, 
  3.   __in          IPMask IpMask, 
  4.   __in          DWORD IfIndex, 
  5.   __out         PULONG NTEContext, 
  6.   __out         PULONG NTEInstance 
  7. ); 
  1. DWORD DeleteIPAddress( 
  2.   __in          ULONG NTEContext 
  3. ); 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章