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
- );