IPCONFIG.EXE程序展示了兩天信息:IPv4配置信息和IPv4配置參數。
要獲得這些配置信息,利用GetNetworkParams函數即可
- DWORD GetNetworkParams(
- __out PFIXED_INFO pFixedInfo,
- __in PULONG pOutBufLen
- );
pFixedInfo取得一個緩衝區指針,該緩衝區接收PFIXED_INFO結構,應用程序必須提供這個結構,以便獲得IPv4配置信息。
pOutBufLen是一個變量指針,指定傳遞到pFixedInfo中那個緩衝區的長度。如果提供的緩衝區不夠大,函數就會返回ERROR_BUFFER_OVERFLOW錯誤,並將pOutBufLen設爲正確的緩衝區長度。
- typedef struct {
- char HostName[MAX_HOSTNAME_LEN + 4];
- char DomainName[MAX_DOMAIN_NAME_LEN + 4];
- PIP_ADDR_STRING CurrentDnsServer;
- IP_ADDR_STRING DnsServerList;
- UINT NodeType;
- char ScopeId[MAX_SCOPE_ID_LEN + 4];
- UINT EnableRouting;
- UINT EnableProxy;
- UINT EnableDns;
- } FIXED_INFO, *PFIXED_INFO;
獲得網絡接口特有的IP配置信息可以用GetAdaptersInfo函數:
- DWORD GetAdaptersInfo(
- __out PIP_ADAPTER_INFO pAdapterInfo,
- __in_out PULONG pOutBufLen
- );
pAdapterInfo參數來把一個指針投遞給應用程序提供的緩衝區,這個緩衝區接收一個ADAPTER_INFO數據結構,這個結構中包含這個適配器的配置信息。
pOutBufLen參數是一個指針變量,指定傳到pAdapterInfo參數中緩衝區的長度,如果提供的緩衝區不夠大,函數返回ERROR_BUFFER_OVERFLOW,並把pOutBufLen設爲需要的緩衝區長度。
- typedef struct _IP_ADAPTER_INFO {
- struct _IP_ADAPTER_INFO* Next;
- DWORD ComboIndex;
- char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
- char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
- UINT AddressLength;
- BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
- DWORD Index;
- UINT Type;
- UINT DhcpEnabled;
- PIP_ADDR_STRING CurrentIpAddress;
- IP_ADDR_STRING IpAddressList;
- IP_ADDR_STRING GatewayList;
- IP_ADDR_STRING DhcpServer;
- BOOL HaveWins;
- IP_ADDR_STRING PrimaryWinsServer;
- IP_ADDR_STRING SecondaryWinsServer;
- time_t LeaseObtained;
- time_t LeaseExpires;
- } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
GetAdaptersInfo返回關於物理適配器及分配給它的IPv4地址的大量信息,但不返回IPv6的信息,GetAdaptersAddresses函數返回IPv4和IPv6地址信息:
- ULONG WINAPI GetAdaptersAddresses(
- __in ULONG Family,
- __in ULONG Flags,
- __in PVOID Reserved,
- __in_out PIP_ADAPTER_ADDRESSES AdapterAddresses,
- __in_out PULONG SizePointer
- );
Family參數指明應該被列舉的地址族
Flags控制返回地址的類型
最後兩個參數是緩衝區及緩衝區長度
釋放和更新IPv4地址:
- DWORD IpReleaseAddress(//釋放
- __in PIP_ADAPTER_INDEX_MAP AdapterInfo
- );
- DWORD IpRenewAddress(//更新
- __in PIP_ADAPTER_INDEX_MAP AdapterInfo
- );
- typedef struct _IP_ADAPTER_INDEX_MAP {
- ULONG Index; //適配器分配的內部網絡接口索引
- WCHAR Name[MAX_ADAPTER_NAME];//適配器名
- }IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
調用GetInterfaceInfo可獲得某一特定適配器的IP_ADAPTER_INDEX_MAP結構:
- DWORD GetInterfaceInfo(
- __out PIP_INTERFACE_INFO pIfTable,
- __in_out PULONG dwOutBufLen
- );
pIfTable是一個指針,指向一個IP_INTERFACE_INFO應用程序緩衝區,該緩衝區將接收接口信息
dwOutBufLen是一個指針,指定傳到pIfTable中的緩衝區長度,如果大小有錯誤,則函數返回ERROR_INSUFFICIENT_BUFFER錯誤,並把dwOutBufLen設爲合適的長度
- typedef struct _IP_INTERFACE_INFO {
- LONG NumAdapters;
- IP_ADAPTER_INDEX_MAP Adapter[1];
- } IP_INTERFACE_INFO, *PIP_INTERFACE_INFO;
增加或刪除特定適配器的IP地址
AddIpAddress,DeleteIpAddress
- DWORD AddIPAddress(
- __in IPAddr Address,
- __in IPMask IpMask,
- __in DWORD IfIndex,
- __out PULONG NTEContext,
- __out PULONG NTEInstance
- );
- DWORD DeleteIPAddress(
- __in ULONG NTEContext
- );