ipconfig/all 하면 볼 수 있는 네트웍의 일반적인 정보들을 구하는 api 들 입니다.
레지스트리에서 읽어올 수 도 있겠지만.. OS마다 조금씩 다르기에 처리하기에
별로 일겁니다.
//.......
IP_ADAPTER_INFO 구조체 내에 DNS에 대한 정보는 없더군요.
그래서 찾아보니 FIXED_INFO 구조체 내에 DNS 서버 ip를 갖고 있어서 GetNetworkParams(..)를 사용했습니다.
(코드구루 의 한 예제에서 ..)
bc++ 폴드 내에 iphlpapi.lib 가 있으니 복사해다가, add to project
#include <windows.h>
#include <iphlpapi.h>
#pragma link "iphlpapi.lib"
void __fastcall TMainF::GetNetInfo(TListBox *lb)
{
IP_ADAPTER_INFO AdapterInfo[16];
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(AdapterInfo,
&dwBufLen);
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
do
{
DisplayNetInfo(pAdapterInfo,
lb);
pAdapterInfo =
pAdapterInfo->Next;
}
while(pAdapterInfo);
}
void __fastcall TMainF::DisplayNetInfo(IP_ADAPTER_INFO *net_info, TListBox
*lb)
{
/*
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;
}
*/
String result;
result = "AdapterName : ";
result
+= StrPas(net_info->AdapterName);
lb->Items->Add(result);
result = "Description :
";
result +=
StrPas(net_info->Description);
lb->Items->Add(result);
IP_ADDR_STRING *pIPAddr;
lb->Items->Add("IP Address List >>");
pIPAddr =
&net_info->IpAddressList;
while ( pIPAddr
)
{
result =
"IP : ";
result +=
pIPAddr->IpAddress.String;
result += " Mask : ";
result +=
pIPAddr->IpMask.String;
pIPAddr =
pIPAddr->Next;
}
lb->Items->Add(result);
lb->Items->Add("Gateway List >>");
pIPAddr =
&net_info->GatewayList;
while ( pIPAddr
)
{
result =
"IP : ";
result +=
pIPAddr->IpAddress.String;
result += " Mask : ";
result +=
pIPAddr->IpMask.String;
pIPAddr =
pIPAddr->Next;
}
lb->Items->Add(result);
lb->Items->Add("DHCP Server List
>>");
pIPAddr =
&net_info->DhcpServer;
while ( pIPAddr
)
{
result =
"IP : ";
result +=
pIPAddr->IpAddress.String;
result += " Mask : ";
result +=
pIPAddr->IpMask.String;
pIPAddr =
pIPAddr->Next;
}
lb->Items->Add(result);
lb->Items->Add("PrimaryWinsServer List
>>");
pIPAddr =
&net_info->PrimaryWinsServer;
while ( pIPAddr
)
{
result =
"IP : ";
result +=
pIPAddr->IpAddress.String;
result += " Mask : ";
result +=
pIPAddr->IpMask.String;
pIPAddr =
pIPAddr->Next;
}
lb->Items->Add(result);
lb->Items->Add("SecondaryWinsServer List
>>");
pIPAddr =
&net_info->SecondaryWinsServer;
while ( pIPAddr
)
{
result =
"IP : ";
result +=
pIPAddr->IpAddress.String;
result += " Mask : ";
result +=
pIPAddr->IpMask.String;
pIPAddr =
pIPAddr->Next;
}
lb->Items->Add(result);
}
void __fastcall TMainF::GetDNS(TListBox *lb)
{
String
result;
//... GetNetworkParams
FIXED_INFO
* FixedInfo;
ULONG
ulOutBufLen;
DWORD
dwRetVal;
IP_ADDR_STRING * pIPAddr;
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof(
FIXED_INFO ) );
ulOutBufLen = sizeof( FIXED_INFO );
if( ERROR_BUFFER_OVERFLOW == GetNetworkParams(
FixedInfo, &ulOutBufLen ) )
{
GlobalFree( FixedInfo
);
FixedInfo =
(FIXED_INFO*)GlobalAlloc( GPTR, ulOutBufLen );
}
if ( dwRetVal = GetNetworkParams( FixedInfo,
&ulOutBufLen ) )
{
// ShowMessage("Error :
");
}
else
{
lb->Items->Add("****
GetNetworkParams ******");
result
= "Host Name : ";
result +=
FixedInfo->HostName;
lb->Items->Add(result);
result = "Domain Name: ";
result
+= FixedInfo->DomainName;
lb->Items->Add(result);
lb->Items->Add("DNS Servers :"
);
result = "IP add :
";
result +=
FixedInfo->DnsServerList.IpAddress.String;
lb->Items->Add(result);
pIPAddr =
FixedInfo->DnsServerList.Next;
while ( pIPAddr )
{
result =
"IP add :
";
result
+= pIPAddr
->IpAddress.String;
lb->Items->Add(result);
pIPAddr = pIPAddr->Next;
}
}
//.........
if(FixedInfo)
GlobalFree(
FixedInfo );
}
//....................