|
안녕하세요... 날씨가 춥네요... 오늘은 질문... 잘 아시는 분 답변 부탁드립니다...
현재 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();
}
|