PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment récupérer IP et Mac dans une session client Remote Desktop ?
Comment récupérer IP et Mac dans une session client Remote Desktop ?
Débuté par Roland Finné, 22 sep. 2017 16:54 - 1 réponse
Posté le 22 septembre 2017 - 16:54
Bonjour à tous,

Et par avance merci de me lire...

Voici ce qui me préoccupe depuis plusieurs jours.

Je dispose d'une application qui fonctionne en remote desktop a partir d'une machine qui sert de seveur sous Windows 7 Pro.
J'utilise un Client RDP pour connecter des iPad, Tel Windows, et autre joyeuseté Android.
Hors pour pouvoir reconnaître le périphérique concerné, je suis obligé de sauvegarder l'adresse Mac de la machine qui à fait une opération. Pour ce faire, j'utilise des API de Windows(WTSAPI32.DLL) avec comme fonction : WTSQuerySessionInformationA
Il apparaît que, et c'est bien indiqué sur le TechNet de Microsoft, selon le client de connexion utilisé l'adresse Ip peut être lisible ou pas.

Alors, sous IOs, ça fonctionne très bien mais même sous Windows Mobile, le problème est entier. Si j'utilise RD Client, ça ne fonctionne pas partout. Sour Parrallels client, si !
Pourquoi ne pas utiliser Parrallels client me direz vous ? Simplement parce que certaine fonctionnalités ne sont pas top.

Donc, me voilà avec un code qui ne fonctionne pas... Après beaucoup de recherche...

Bien sûr les fonctions NetAdresseIp, NetNomMachine et NetAdresseMac ne sont d'aucune utilité, car elle renvoi l'adresse de la session... Pas celle du client... Et je ne peux pas écrire ces infos dans un fichier quelconque type .ini, à relire..

Et c'est là que vous entrez en piste... Avez vous une solution à ce "problème"...

Je vous poste mon code, et si jamais vous avez une idée... je vous remercie mille fois par avance...

Windevement vôtre...

Roland.



Fonction GetMyMac()

WTS_SESSION_INFO est Structure
SessionId est entier
pWinStationName est entier
state est entier
FIN

STRUCT_WTS_CLIENT_ADDRESS est une Structure
AddressFamily est un entier
Address est un chaîne fixe sur 20
END


LOCAL
liDLLHandle, hServer sont entier
pCount , p, p1, pBytes, retval sont entier
fsWinStationName est ASCIIZ chaîne sur 128
dynarrSessionInfo est tableau dynamique de 1 WTS_SESSION_INFO
stStrucClient_Address est STRUCT_WTS_CLIENT_ADDRESS
sClientname est une chaîne = ExtraitChaîne(SysEnvironnement("CLIENTNAME"),2,"=") // Nom du poste client qui tourne l'appli
sMacAdd est une chaîne
sIp est une chaîne


retval=API("WTSAPI32","WTSQuerySessionInformationA", hServer,dynarrSessionInfo[i]:SessionID,14,&p1,&pBytes)

SI retval ALORS

SI pBytes>0 ALORS Transfert(&stStrucClient_Address,p1,pBytes)

sIp = ""

POUR nTcp = 3 A 6
sIp += (sIp = "" ? "" SINON ".") + NumériqueVersChaîne(Asc(stStrucClient_Address:Address[[nTcp]])) // Lecture de l'Ip
FIN

API("WTSAPI32","WTSFreeMemory",p1) // Libération

p1=0
FIN
fin

SI sIp <> "" ALORS sMacAdd = NetIPVersMAC(sIp) // On a l'Ip.. donc .. la Mac...

renvoyer sMacAdd
Membre enregistré
63 messages
Popularité : +4 (4 votes)
Posté le 23 mai 2023 - 17:45
Bonjour

J ai plus ou moins le même code et le même problème..
En fonction des clients je n'arrive pas forcement a recupérer l'IP... Quel dommage

Personne n'a avancé sur ce sujet depuis 2017 ??
Comment pourrait on a coup sur identifier l’appareil client TSE?? IMEI / IP / MAC...
Cela me semble incroyable que ça ne soit pas possible...

D avance merci!

--
Nicolas Magnien
oXalis [Supervision Industrielle - Procédés Batch - ERP - MES]
www.decobecq-automatismes.fr