Red de conocimiento informático - Consumibles informáticos - (50 puntos) ¿Cómo obtiene MFC la dirección IP de un host en la misma LAN?

(50 puntos) ¿Cómo obtiene MFC la dirección IP de un host en la misma LAN?

Las computadoras que acceden a Internet a través de una LAN no tienen una IP pública en la Web. Todas las máquinas en una LAN usan la misma IP, pero los puertos proporcionados a la puerta de enlace son puertos diferentes y dinámicos. El ciclo es muy pequeño

Si usa VC, puede conocer las direcciones IP de todos los hosts en esta LAN. El método es el siguiente:

BOOL CIPWnd::GetLanComputers(LPNETRESOURCE lpnr. ,HTREEITEM hNode)

{

DWORD dwResult,dwResultEnum,dwDsptype,dwIP

DWORD cbBuffer = 16384 /* 16K es un tamaño razonable */

DWORD cEntries = 0xFFFFFFFF; /* enumera todas las entradas posibles */

LPNETRESOURCE lpnrLocal; /* puntero a estructuras enumeradas */

char * ptr; >

pcinfo * pPcinfo ;

struct hostent FAR * pHostent;

HANDLE hEnum;

dwResult=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,lpnr, &hEnum);

if (dwResult ==67) //No hay ningún host accesible bajo el dominio

return TRUE

if (dwResult != NO_ERROR )

return FALSE;

{

lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer); /* identificador de recurso */

&cEntries, /* definido localmente como 0xFFFFFFFF */

lpnrLocal, /* LPNETRESOURCE

*/

&cbBuffer); /* tamaño del búfer */

if (dwResultEnum == NO_ERROR)

{

if (! g_pThread) devuelve FALSO;

for(DWORD i = 0; i < cEntries; i++)

{

if (!g_pThread) devuelve FALSO

p> p>

dwDsptype=(lpnrLocal+i)->dwDisplayType;

// RESOURCEDISPLAYTYPE_DOMAIN 0x00000001

// RESOURCEDISPLAYTYPE_SERVER 0x00000002

// RESOURCEDISPLAYTYPE_GROUP 0x000000 05

// RESOURCEDISPLAYTYPE_NETWORK 0x00000006

if (dwDsptype==1||dwDsptype==2||dwDsptype==5||dwDsptype==6)

{

m_treeview.SendMessage(TVM_EXPAND,TVE_EXPAND,(long)hNode

if (dwDsptype==2)

{

ptr=(lpnrLocal+i)->lpRemoteName+2;

pHosten = gethostbyname(ptr);

if (!g_pThread) devuelve FALSO; p> if (pHostent)

{

memcpy(&dwIP, pHosten->h_addr_list[0], pHosten->h_length

pPcinfo=new pcinfo);

pPcinfo->uIP=dwIP

p>

pPcinfo->iflag=0;

pPcinfo->totalBytes=0;

pPcinfo->totalPacks=0

ZeroMemory(pPcinfo; ->szName,MAX_HOSTNAME_LAN);

memcpy(pPcinfo->szName,ptr,strlen(ptr));

m_pcArr.Add(pPcinfo

); }

más

dwIP=0

}

más

{

ptr=(lpnrLocal+i)->lpRemoteName;

dwIP=0;

}

HTREEITEM hNode1=m_treeview.InsertItem(ptr,hNode);

m_treeview.SetItemData(hNode1,dwIP);

if(RESOURCEUSAGE_CONTAINER == ((lpnrLocal+i)->dwUsage & RESOURCEUSAGE_CONTAINER) && (dwDsptype==1||dwDsptype= =5||dwDsptype==6))

{

m_treeview.SendMessage(TVM_EXPAND,TVE_EXPAND,(long)hNode1;

GetLanComputers((lpnrLocal); +i),hNodo1);

}

}

}

}

GlobalFree((HGLOBAL) ) lpnrLocal);

}

WNetCloseEnum(hEnum);

devuelve VERDADERO; Puedes consultarlo online

/vchelp/archive.asp?type_id=39&class_id=1&cata_id=5&article_id=653