C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22323] network 정보들 알아내기 ( IP, Gateway, DHCP, DNS )
성철경 [twinsteel] 3695 읽음    2002-10-29 15:50
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 );
}
 
//....................


+ -

관련 글 리스트
22323 network 정보들 알아내기 ( IP, Gateway, DHCP, DNS ) 성철경 3695 2002/10/29
31023     Re:network 정보들 알아내기 ( IP, Gateway, DHCP, DNS ) error 1437 2002/10/30
31022     Re:network 정보들 알아내기 ( IP, Gateway, DHCP, DNS ) 김상구.패패루 2158 2002/10/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.