Ordi sur un réseau

Résolu
vangeurmasker Messages postés 99 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 29 mars 2006 - 14 nov. 2005 à 13:22
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 nov. 2005 à 13:38
Je cherche a savoir comment récupérer le nom et l'adresse ip de tous
les ordinateurs situés sur le même réseau local que le mien.



Merci de votre aide

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2005 à 13:38
En 1 peu plus court:

void __stdcall SearchIP(char *szname)
{
HOSTENT* host;
SOCKADDR_IN valip;
int n;
char szip[20], *c;
if(host = gethostbyname(szname)) {
// RECUPERATION DU DERNIER ENTIER n TEL QUE host->h_addr_list[n] != NULL
for(n = 0; host->h_addr_list[n+1]; n++) {}
memcpy(&valip.sin_addr.s_addr, host->h_addr_list[n], host->h_length);
if(c = inet_ntoa(valip.sin_addr)) {
strcpy(szip + 1, c);
szip[0] = '\t';
SendMessage(htxt, EM_REPLACESEL, 0, (long) szip);
}
}
}


void __stdcall PcEnumReso(NETRESOURCE *nr)
{
HANDLE hEnum;
DWORD count = -1;
DWORD bufsize = 16384;
NETRESOURCE *NetRes;
if(WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER, nr, &hEnum)) return;
NetRes = (LPNETRESOURCE) VirtualAlloc(0, bufsize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if(!NetRes) goto closeENUM;

while(!WNetEnumResource(hEnum, &count, NetRes, &bufsize)) {
while(count--) {
if(*((WORD*)NetRes[count].lpRemoteName) == 0x5C5C) { // 2 premiers char == '\\'
SendMessage(htxt, EM_REPLACESEL, 0, (long) (NetRes[count].lpRemoteName + 2));
SearchIP(NetRes[count].lpRemoteName + 2);
SendMessage(htxt, EM_REPLACESEL, 0, (long) "\r\n");
} // DESSOUS RECURRENCE POUR TROUVER L'ENSEMBLE DES PCs
if(NetRes[count].dwUsage & RESOURCEUSAGE_CONTAINER) PcEnumReso(&NetRes[count]);
}
}
VirtualFree(NetRes, 0, MEM_RELEASE);
closeENUM: WNetCloseEnum(hEnum);
}

APPEL:
SetWindowText(htxt, 0);
PcEnumReso(0);

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
14 nov. 2005 à 18:58
J'ai déjà fait ça sur un de mes progs.

Regarde dans mes sources, c'est le "Petit chat assez complet...".

Après regarde dans le fichier "VoirRéseau.h", si je me trompe pas.

Mais avant essaie le prog pour voir si c'est bien ce que tu veux.


YOYO, @+.
YOYO
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 nov. 2005 à 22:32
HWND htxt; // EDIT SUR LEQUEL JE METS RESULTAT
HANDLE hthrd = 0;
DWORD thrdID;
char szERROR[] = "ERREUR";


void __stdcall SearchIP(char *Tmp)
{
HOSTENT* ip_resolue;
SOCKADDR_IN valip;
int c;
char IPAdress[20];
ip_resolue = gethostbyname(Tmp);
if(ip_resolue) {
// RECUPERATION DU DERNIER ENTIER 'c' TEL QUE ip_resolue->h_addr_list[c] != NULL
for(c = 0; ip_resolue->h_addr_list[c+1]; c++) {}
memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[c], ip_resolue->h_length);
IPAdress[0] = '\t';
strcpy(IPAdress + 1, inet_ntoa(valip.sin_addr));
SendMessage(htxt, EM_REPLACESEL, 0, (long) IPAdress);
}
}


void PcEnumReso(NETRESOURCE *nr)
{
HANDLE hEnum;
DWORD Result;
DWORD count = -1;
DWORD BufferSize = 0;
DWORD ReturnVal = 0;
NETRESOURCE *NetRes;
Result = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER, nr, &hEnum);
if(Result) return;
NetRes = (LPNETRESOURCE) VirtualAlloc(0, 1024, MEMDISPO, PAGE_READWRITE);
while(1) {
ReturnVal = WNetEnumResource(hEnum, &count, NetRes, &BufferSize);
if(ReturnVal == ERROR_MORE_DATA) { // On recalcul la taille du Buffer
count = -1;
VirtualFree(NetRes, 0, MEM_RELEASE);
NetRes = (LPNETRESOURCE) VirtualAlloc(0, BufferSize, MEMDISPO, PAGE_READWRITE);
ReturnVal = WNetEnumResource(hEnum, &count, NetRes, &BufferSize);
}
if(ReturnVal) break;
while(count--) {
if(*((WORD*)NetRes[count].lpRemoteName) == 0x5C5C) { // 2 premiers char == '\\'
SendMessage(htxt, EM_REPLACESEL, 0, (long) (NetRes[count].lpRemoteName + 2));
SearchIP(NetRes[count].lpRemoteName + 2);
SendMessage(htxt, EM_REPLACESEL, 0, (long) "\r\n");
}
// RECURRENCE POUR TROUVER L'ENSEMBLE DES PCs
if(NetRes[count].dwUsage & RESOURCEUSAGE_CONTAINER) PcEnumReso(&NetRes[count]);
}
if(ReturnVal == ERROR_NO_MORE_ITEMS) {
VirtualFree(NetRes, 0, MEM_RELEASE);
WNetCloseEnum(hEnum);
}
}
VirtualFree(NetRes, 0, MEM_RELEASE);
WNetCloseEnum(hEnum);
}

Appeler ainsi:
PcEnumReso(0);

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
vangeurmasker Messages postés 99 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 29 mars 2006
19 nov. 2005 à 13:28
merci brunew pour ta source mais je ne sait pas quoi passer comme parametre a la fonction (NETRESOURCE *nr);
J'utilise
0
Rejoignez-nous