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
[59228] gethostbyname()로 IP를 구하려고 하는 데....???? @@
박영목.월천 [] 1903 읽음    2009-11-25 11:56
안녕하세요...  날씨가 춥네요...  오늘은 질문... 잘 아시는 분 답변 부탁드립니다...

현재 PC에서 네트워크로 연결된 PC들 이름과 IP를 구하려고 하는 데... 이게 잘 안되네요...

gethostbyname()으로 IP를 구하려고 하면...   자신 PC 말고는 다   61.110.21.159  이렇게 나옵니다...

61.110.21.159 이  이 수상한 놈에 대해서는 인터넷에 찾아보았습니다.  KT... 하청... 계약...  뭐뭐시기...

여하튼 IP를 못 찾으면  저 IP를 내 보내는 것 같습니다...

현재 하나로 통신 사용 중입니다...  IP들을 구해야 하는데... 잘 안되네요...

몇년 전에는 분명히 이것으로 한 것 같은데.....   혹 다른 ... 방법  아시면......

부탁드립니다...

           그럼 항상 기쁜 일들만 많이 생기기를 바라며....    부산에서...월천 박영목 올렸습니다.



void __fastcall GetComputersFromNet( TStringList *lst )
{
  char str[128];
  AnsiString strTemp;
  struct hostent *host;

  struct in_addr *ptr; // To retrieve the IP Address

  DWORD dwScope = RESOURCE_CONTEXT;
  NETRESOURCE *NetResource = NULL;
  HANDLE hEnum;
  WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum );

  WSADATA wsaData;
  WSAStartup(MAKEWORD(1,1),&wsaData);

  if ( hEnum )
  {
    DWORD Count = 0xFFFFFFFF;
    DWORD BufferSize = 2048;
    LPVOID Buffer = new char[2048];
    WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );
    NetResource = (NETRESOURCE*)Buffer;

    char szHostName[200];
    unsigned int i;

    for ( i=0; i<BufferSize/sizeof(NETRESOURCE); i++, NetResource++ )
    {
        if ( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY )
        {
            if ( NetResource->lpRemoteName )
            {
                AnsiString strFullName = NetResource->lpRemoteName;
                if ( strFullName.SubString(1,2).AnsiCompare( "\\\\" )==0 )
                    strFullName = strFullName.SubString( 3, strFullName.Length() );

                gethostname( szHostName,
                    strlen( szHostName ) );
                host = gethostbyname(strFullName.c_str() );

                if(host == NULL) continue;

                ptr = (struct in_addr *)host->h_addr_list[0];

                // Eg. 211.40.35.76 split up like this.
                int a = ptr->S_un.S_un_b.s_b1;  // 211
                int b = ptr->S_un.S_un_b.s_b2;  // 40
                int c = ptr->S_un.S_un_b.s_b3;  // 35
                int d = ptr->S_un.S_un_b.s_b4;  // 76

                wsprintf( str, "%d.%d.%d.%d,%s(%s)", a,b,c,d, strFullName.c_str(), (char*)NetResource->lpRemoteName );
                lst->Add( str );

            }
        }
    }

    delete Buffer;
    WNetCloseEnum( hEnum );
  }

  WSACleanup();
}

+ -

관련 글 리스트
59228 gethostbyname()로 IP를 구하려고 하는 데....???? @@ 박영목.월천 1903 2009/11/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.