模拟 CMD命令下的ipconfig

#include <winsock2.h>
#include <Iphlpapi.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
int main()
{
	FIXED_INFO *pFinxedInfo= NULL;
	ULONG    ulOutBufLen;

	pFinxedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof( FIXED_INFO ) );
	ulOutBufLen = sizeof( FIXED_INFO );

	if( ERROR_BUFFER_OVERFLOW == GetNetworkParams( pFinxedInfo, &ulOutBufLen ) ) 
	{
		GlobalFree( pFinxedInfo );
		pFinxedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
		if (pFinxedInfo == NULL)
		{
			cout<<"Error allocating memory for FIXED_INFO"<<endl;
			return 1; 
		}
	}

	if(GetNetworkParams(pFinxedInfo, &ulOutBufLen))
	{
		cout<<"GetNetworkParams is failed"<<endl;
		return FALSE;
	}
	else
	{
		cout<<"Windows IP Configuration"<<endl;
		cout<<endl;
		cout<<"Host Name.......................:"<<pFinxedInfo->HostName<<endl;
		cout<<"Primary DNS Suffix..............:"<<pFinxedInfo->DomainName<<endl;
		cout<<"Node Type.......................:";
		switch (pFinxedInfo->NodeType)
		{
		case BROADCAST_NODETYPE:
			cout<<"Broadcast"<<endl;
			break;
		case PEER_TO_PEER_NODETYPE:
			cout<<"Peer to peer"<<endl;
			break;
		case MIXED_NODETYPE:
			cout<<"Mixed"<<endl;
			break;
		case HYBRID_NODETYPE:
			cout<<"Hybrid"<<endl;
			break;
		default:
			cout<<"Unknown"<<endl;
			break;
		}
		cout<<"IP Routing Enabled..............:";
		if (pFinxedInfo->EnableRouting)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
		cout<<"WINS Proxy Enabled..............:";
		if (pFinxedInfo->EnableProxy)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	cout<<endl;
	IP_ADAPTER_INFO *IPInfo;
	DWORD dwBufferSize=0;
	IPInfo=(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
	if(GetAdaptersInfo(IPInfo, &dwBufferSize)!=ERROR_BUFFER_OVERFLOW)
	{
		cout<<"GetNetworkParams is failed"<<endl;
		return FALSE;
	}
	else
	{
		free(IPInfo);
		IPInfo=(IP_ADAPTER_INFO *)malloc(dwBufferSize);
		GetAdaptersInfo(IPInfo, &dwBufferSize);
		while(IPInfo!=NULL)
		{
			cout<<"Ethernet adapter "<<IPInfo->Description<<endl;
			cout<<endl;
			cout<<"Connection-specific DNS Suffix..:"<<endl;
			cout<<"Description.....................:"<<IPInfo->Description<<endl;
			char szMacAddr[20];
			sprintf_s(szMacAddr, 20, "%02X-%02X-%02X-%02X-%02X-%02X", IPInfo->Address[0], IPInfo->Address[1], IPInfo->Address[2],
				IPInfo->Address[3], IPInfo->Address[4], IPInfo->Address[5]);
			cout<<"Physical Address................:"<<szMacAddr<<endl;
			cout<<"DHCP Enabled....................:";
			if(IPInfo->DhcpEnabled!=0)
				cout<<"YES"<<endl;
			else
				cout<<"NO"<<endl;
			cout<<"IP Address................:.....:"<<IPInfo->IpAddressList.IpAddress.String<<endl;
			cout<<"Subnet Mask.....................:"<<IPInfo->IpAddressList.IpMask.String<<endl;
			cout<<"Default Gateway.................:"<<IPInfo->GatewayList.IpAddress.String<<endl;
			cout<<"DNS Servers.....................:"<<pFinxedInfo->DnsServerList.IpAddress.String<<endl;
			cout<<"                                :"<<pFinxedInfo->DnsServerList.Next->IpAddress.String<<endl;
			IPInfo=IPInfo->Next;
			cout<<endl;
		}
	}
	free(IPInfo);
	getchar();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值