OVH Cloud OVH Cloud

Connaitre l'username qui est loggé sur une machine à partir de son IP

8 réponses
Avatar
Technicatome
[This followup was posted to fr.comp.reseaux.ip and a copy was sent to the =
cited author.]

Bonsoir,

J'aimerais retrouve dans un r=E9seau Windows et par programme (en c++) le=
=20
nom de l'utilisateur qui est logg=E9 sur une machine dont je connais=20
l'adresse IP.

Y a-t-il une m=E9thode, cette information est elle stock=E9e quelquepart=20
dans AD, DNS...

8 réponses

Avatar
Alni
Bonjour,


[This followup was posted to fr.comp.reseaux.ip and a copy was sent
to the cited author.]

Bonsoir,

J'aimerais retrouve dans un réseau Windows et par programme (en c++)
le
nom de l'utilisateur qui est loggé sur une machine dont je connais
l'adresse IP.

Y a-t-il une méthode, cette information est elle stockée quelquepart
dans AD, DNS...


En utilisant la commande NCBSSTAT (session status) dans une structure
NCB utilisée en argument d'une fonction Netbios().

C'est l'équivalent d'une commande : nbtstat -A adresse_ip en invite de
commande.
Si tu fouilles un peu le msdn sur les structures NCB, SESSION_HEADER et
SESSION_BUFFER tu devrais t'en sortir en C. J'avais fait un truc
semblable il y a un peu plus de 10 ans pour récuperer toutes les infos
d'une machine qui se connecte sur un des serveurs (NT à l'époque).

Avec l'AD, il doit y avoir plus simple, mais je ne me suis pas penché
sur le truc.

Avatar
Patrick_91
Technicatome wrote:

[This followup was posted to fr.comp.reseaux.ip and a copy was sent to the
[cited author.]

Bonsoir,

J'aimerais retrouve dans un réseau Windows et par programme (en c++) le
nom de l'utilisateur qui est loggé sur une machine dont je connais
l'adresse IP.

Y a-t-il une méthode, cette information est elle stockée quelquepart
dans AD, DNS...



Hello ,

Non nulle part l'adresse ip d'un host n'a aucune relation avec le nom
d'utilisateur ? un "user" se signale en general en tant qu'utilisateur
d'une application (couche 5 tcp/ip) l'adresse ip ne sert qu'au routage vers
le host concerne ..

Amicalement

--
Patrick
Dept 91

Avatar
Alni
Bonjour,


Technicatome wrote:

[This followup was posted to fr.comp.reseaux.ip and a copy was sent
to the [cited author.]

Bonsoir,

J'aimerais retrouve dans un réseau Windows et par programme (en c++)
le nom de l'utilisateur qui est loggé sur une machine dont je connais
l'adresse IP.

Y a-t-il une méthode, cette information est elle stockée quelquepart
dans AD, DNS...



Hello ,

Non nulle part l'adresse ip d'un host n'a aucune relation avec le nom
d'utilisateur ? un "user" se signale en general en tant qu'utilisateur
d'une application (couche 5 tcp/ip) l'adresse ip ne sert qu'au
routage vers le host concerne ..


Oui, mais s'il s'agit comme je le pense d'un réseau d'entreprise ou il
n'y a pas de firewall sur les machines. Alors le port netbios des
machines Windows est certainement accessible, donc l'API netbios est
utilisable. On peut donc concevoir facilement un prg c++ qui interroge
l'API netbios de la machine distante en envoyant à son adresse IP une
commande netbios "session status".
Ou tout simplement utiliser la commande nbtstat -A <adresse IP> et en
traiter le résultat. La dernière ligne indique le nom du user connecté.


Avatar
Patrick_91
Alni wrote:

Bonjour,


Technicatome wrote:

[This followup was posted to fr.comp.reseaux.ip and a copy was sent
to the [cited author.]

Bonsoir,

J'aimerais retrouve dans un réseau Windows et par programme (en c++)
le nom de l'utilisateur qui est loggé sur une machine dont je connais
l'adresse IP.

Y a-t-il une méthode, cette information est elle stockée quelquepart
dans AD, DNS...



Hello ,

Non nulle part l'adresse ip d'un host n'a aucune relation avec le nom
d'utilisateur ? un "user" se signale en general en tant qu'utilisateur
d'une application (couche 5 tcp/ip) l'adresse ip ne sert qu'au
routage vers le host concerne ..


Oui, mais s'il s'agit comme je le pense d'un réseau d'entreprise ou il
n'y a pas de firewall sur les machines. Alors le port netbios des
machines Windows est certainement accessible, donc l'API netbios est
utilisable. On peut donc concevoir facilement un prg c++ qui interroge
l'API netbios de la machine distante en envoyant à son adresse IP une
commande netbios "session status".
Ou tout simplement utiliser la commande nbtstat -A <adresse IP> et en
traiter le résultat. La dernière ligne indique le nom du user connecté.


Hello ,

Non il y a confusion , seule une application peut recueillir le nom d'un
utilisateur (login , password ou tout autre systeme d'identification) .
Quant a netbios (hors sujet ici) c'est aussi un nom de machine et non pas
d'utilisateur ...

Amicalement


--
Patrick
Dept 91



Avatar
Patrick MATHEVON
: Bonsoir,
:
: J'aimerais retrouve dans un réseau Windows et par programme (en c++)
: le
: nom de l'utilisateur qui est loggé sur une machine dont je connais
: l'adresse IP.
:
: Y a-t-il une méthode, cette information est elle stockée quelquepart
: dans AD, DNS...

Solution manuelle que j'utilise mais qui doit pouvoir se programmer :
j'interroge le serveur WINS pour connaitre TOUS les enregistrements relatifs
à une adresse IP. Et la, on trouve un enregistrmeent de type 03h (Messenger)
dont le Record Name est le login du compte utilisé...

Patrick
Avatar
Annie D.
Patrick MATHEVON wrote:

j'interroge le serveur WINS pour connaitre TOUS les enregistrements relatifs
à une adresse IP. Et la, on trouve un enregistrmeent de type 03h (Messenger)
dont le Record Name est le login du compte utilisé...


Utilisé pour quoi faire ?
Ne me dites pas qu'une station Windows a besoin qu'un utilisateur ouvre
une session pour être enregistrée dans le WINS ? Et quid d'une station
sur laquelle plusieurs sessions d'utilisateurs distincts sont ouvertes
simultanément ?

Avatar
holespaces
"Patrick MATHEVON" wrote in message news:<bv8r7m$97m$...
: Bonsoir,
:
: J'aimerais retrouve dans un réseau Windows et par programme (en c++)
: le
: nom de l'utilisateur qui est loggé sur une machine dont je connais
: l'adresse IP.
:
: Y a-t-il une méthode, cette information est elle stockée quelquepart
: dans AD, DNS...

Solution manuelle que j'utilise mais qui doit pouvoir se programmer :
j'interroge le serveur WINS pour connaitre TOUS les enregistrements relatifs
à une adresse IP. Et la, on trouve un enregistrmeent de type 03h (Messenger)
dont le Record Name est le login du compte utilisé...

Patrick


Salut,

Tu peux également utiliser le protocole netbios avec nbtstat -A <IP>
et tu récupère le nom de l'utilisateur connecté <03> (utilisé par
Winpopup).

En espérant t'élaircir. Fluxy

Avatar
Alni
Bonjour,


Patrick MATHEVON wrote:

j'interroge le serveur WINS pour connaitre TOUS les enregistrements
relatifs à une adresse IP. Et la, on trouve un enregistrmeent de
type 03h (Messenger) dont le Record Name est le login du compte
utilisé...


Utilisé pour quoi faire ?
Ne me dites pas qu'une station Windows a besoin qu'un utilisateur
ouvre une session pour être enregistrée dans le WINS ? Et quid d'une
station sur laquelle plusieurs sessions d'utilisateurs distincts sont
ouvertes simultanément ?


Dans ce cas, je vois dans la base WINS les différents utilisateurs
connectés associés à la même adresse IP. Jusqu'a ce que je me connecte
avec ce même utilisateur sur une autre machine, auquel cas l'adresse IP
de cette machine se trouve associée à ce nom d'utilisateur.

Si je fais un nbtstat -A sur une machine sur laquelle plusieurs
utilisateurs soint connectés (console + terminal server par exemple)
alors le nbtstat me renvoie 1 ligne en ID 03h pour chacun des
utilisateurs connectés.

L'ID 03h est identifiée dans la base WINS comme correspondant au service
d'affichage des messages. Je suppose que c'est sur cette ID que le
sevice d'affichage des messages se base pour trouver l'IP sur laquelle
se trouve un user lorsque l'on s'en sert comme argument d'un net send
plutôt que de cibler un nom de machine.
Je constate aussi que la base WINS ne tiens pas vraiment compte de la
déconnexion d'un USER. Je me suis connecté à un moment "administrateur"
sur une des machines, et son adresse IP reste associée au nom
"administrateur" dans la base WINS bien que j'ai fermée cette session et
réouvert avec un user normal. Par contre le nbtstat -A, qui s'adresse
aussi bien au serveur WINS quand il y en a un, qu'a la station retrouve
bien le nom d'un user qui est connecté sur plusieurs machines sur toutes
les machines ou il est connecté et non pas seulement la dernière comme
ce qui apparait dans la bas WINS.

exemple station ayant 2 users connectés 1 en console, l'autre en TS :
C:>nbtstat -A 192.168.x.y
Connexion au réseau local:
Adresse IP du noeud : [192.168.x.z ID d'étendue : []

Table de noms NetBIOS des ordinateurs distants

Nom Type État
---------------------------------------------
STATION <00> UNIQUE Inscrit
STATION <20> UNIQUE Inscrit
WORKGROUP <00> Groupe Inscrit
WORKGROUP <1E> Groupe Inscrit
WORKGROUP <1D> UNIQUE Inscrit
..__MSBROWSE__.<01> Groupe Inscrit
STATION <03> UNIQUE Inscrit
USER1 <03> UNIQUE Conflit
USER2 <03> UNIQUE Conflit

Adresse MAC = 00-XX-XX-XX-XX-XX


Les 2 users apparaissent en conflit certainement car ils sont aussi
connectés sur d'autres machines à cet instant, et que, comme ils se sont
connectés en dernier sur les autres machines, c'est l'IP des autres
machines qui apparait dans la base WINS pour ces 2 users.

Si ça peut faire avancer le schmilblick.

Sinon, la solution que j'avais utilisée il y a une dizaine d'années pour
glaner ce genre de renseignements, consiste à écrire un petit prg en C
(20-30ko il me semble) que l'on glisse dans le script de netlogon qui va
collecter tout un tas d'infos sur la machine et qui va les écrire dans
un fichier sur un serveur à chaque ouverture de session sur le domaine.
La plupart des infos réseau comme le nom machine et le nom user sont
récupérables en API netbios.

Je pouvais récuperer de cette façon :
heure date de cnx, nom machine, nom user, adresse IP (il n'y avait pas
de DHCP à cette époque sur ce réseau), taille ram installée, espace
disque restant, adresse MAC de la station (utile pour retrouver la
station qui a une IP dupliquée quand une autre station affiche "conflit
d'adresse IP avec l'adresse 00:60:25:12:34:56")
Tout ça sur une ligne dans un fichier, permettait de garder trace de
toutes les connexions sur toutes les machines et de faire un peu de
préventif quand à la saturation des disques durs.
Facile à exploiter par la suite avec n'importe quel viewer de fichiers
textes capable de faire des recherches en partant du bas pour retrouver
les dernières connexions.