Fonctions réseau de base

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 473 fois - Téléchargée 30 fois

Contenu du snippet

Voici trois petites fonctions de base pour la gestion réseau via les API windows
Elles permettent d'envoyer un message style "net send", d'obtenir la liste des utilisateurs d'un domaine et la liste des machines membres d'un domaine.

Source / Exemple :


Option Explicit

Private Const NERR_Success As Long = 0&
Public Const FILTER_INTERDOMAIN_TRUST_ACCOUNT As Long = &H8
Public Const FILTER_NORMAL_ACCOUNT As Long = &H2
Public Const FILTER_SERVER_TRUST_ACCOUNT As Long = &H20
Public Const FILTER_TEMP_DUPLICATE_ACCOUNT As Long = &H1
Public Const FILTER_WORKSTATION_TRUST_ACCOUNT As Long = &H10
Private Const SV_TYPE_WORKSTATION As Long = &H1

Private Declare Function NetServerEnum Lib "netapi32" (servername As Byte, ByVal level As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ByVal servertype As Long, domain As Byte, ResumeHandle As Long) As Long
Private Declare Function NetUserEnum Lib "netapi32" (servername As Byte, ByVal level As Long, ByVal lFilter As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long) As Long
Private Declare Function NetApiBufferFree Lib "NETAPI32.dll" (ByVal Ptr As Long) As Long
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function NetMessageBufferSend Lib "NETAPI32.dll" (yServer As Any, yToName As Byte, yFromName As Any, yMsg As Byte, ByVal lSize As Long) As Long
Private Declare Function PtrToInt Lib "kernel32" Alias "lstrcpynW" (RetVal As Any, ByVal Ptr As Long, ByVal nCharCount As Long) As Long
Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyW" (RetVal As Byte, ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "kernel32" Alias "lstrlenW" (ByVal Ptr As Long) As Long

Private Type MungeInt
    XLo As Integer
    XHi As Integer
    Dummy As Integer
End Type

Private Type MungeLong
    x As Long
    Dummy As Integer
End Type

Private Function GetStringFromBuffer(ByVal bufptr As Long, ByVal offset As Long, ByVal Valnum As Long, ByVal recordsize As Long) As String
Dim Result As Long, UnArray(1023) As Byte, TempPtr As MungeLong, TempStr As MungeInt

    Result = PtrToInt(TempStr.XLo, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2, 2)
    Result = PtrToInt(TempStr.XHi, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2 + 2, 2)
    LSet TempPtr = TempStr
    Result = PtrToStr(UnArray(0), TempPtr.x)
    GetStringFromBuffer = Left(UnArray, StrLen(TempPtr.x))
End Function

'---------------------------------------------------------------------------------------
' Procédure  : SendMessage
' Auteur     : Christophe RENAUD
' Objet      : Envoie un message style Popup sur le réseau
' Retour     : Renvoie True si le message a bien été envoyer et False sinon
' Arguments  : - sToUser (Entrée) : Nom du destinataire
'              - sFromUser (Entrée) : Nom de l'expéditeur
'              - sBody (Entrée) : Corps du message
'---------------------------------------------------------------------------------------
'
Public Function SendMessage(sToUser As String, sFromUser As String, sBody As String) As Boolean
Dim abTo() As Byte, abFrom() As Byte, abBody() As Byte

    abTo = sToUser & vbNullChar
    abFrom = sFromUser & vbNullChar
    abBody = sBody & vbNullChar
    If NetMessageBufferSend(ByVal 0&, abTo(0), ByVal 0&, abBody(0), UBound(abBody)) = NERR_Success Then
        SendMessage = True
    Else
        SendMessage = False
    End If
End Function

'---------------------------------------------------------------------------------------
' Procédure  : GetDomainUserNames
' Auteur     : Christophe RENAUD
' Objet      : Retourne la liste des utilisateurs d'un domaine NT
' Retour     : Indice du dernier élément du tableau retourné (base 0)
' Arguments  : - Tableau() (Sortie) : Liste des utilisateurs du domaine
'              - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
'              - Filtre (Entrée) : Filtre le type de compte renvoyé (Voir constante ci-dessus)
'---------------------------------------------------------------------------------------
'
Public Function GetDomainUserNames(ByRef Tableau() As String, sMachine As String, Filtre As Long) As Long
Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte
Dim Bcl As Long
    
    sName = sMachine & vbNullChar
    BufLen = 2047
    ResumeHandle = 0
    ReDim Tableau(0)
    Do
        Result = NetUserEnum(sName(0), 0, Filtre, bufptr, BufLen, entriesread, totalentries, ResumeHandle)
        If Result <> 0 And Result <> 234 Then
            Exit Function
        End If
        For Bcl = 1 To entriesread
            ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
            Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
        Next
    Loop Until entriesread = totalentries
    Result = NetApiBufferFree(bufptr)
    GetDomainUserNames = UBound(Tableau)
End Function

'---------------------------------------------------------------------------------------
' Procédure  : GetDomainComputerNames
' Auteur     : Christophe RENAUD
' Objet      : Retourne la liste des PC d'un domaine NT
' Retour     : Indice du dernier élément du tableau retourné (base 0)
' Arguments  : - Tableau() (Sortie) : Liste des PC du domaine
'              - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
'              - sNomdomaine (Entrée) : Nom du domaine NT dont on recherche les machines
'---------------------------------------------------------------------------------------
'
Public Function GetDomainComputerNames(ByRef Tableau() As String, sMachine As String, sNomDomaine As String) As Long
Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte, SDomain() As Byte
Dim Bcl As Long
    
    sName = sMachine & vbNullChar
    SDomain = sNomDomaine & vbNullChar
    BufLen = 2047
    ResumeHandle = 0
    ReDim Tableau(0)
    Do
        Result = NetServerEnum(sName(0), 100, bufptr, BufLen, entriesread, totalentries, SV_TYPE_WORKSTATION, SDomain(0), ResumeHandle)
        If Result <> 0 And Result <> 234 Then
            Exit Function
        End If
        For Bcl = 2 To entriesread * 2 Step 2
            ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
            Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
        Next
    Loop Until entriesread = totalentries
    Result = NetApiBufferFree(bufptr)
    GetDomainComputerNames = UBound(Tableau)
End Function

Conclusion :


Ce source est plus particulièrement destiné à Ducker88, rapport au thread dans le forum sur le sujet

A voir également

Ajouter un commentaire

Commentaires

ratala
Messages postés
248
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
22 juin 2008
-
Tres bien le sendmessage je mets 6/10
ratala
Messages postés
248
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
22 juin 2008
-
Tres bien le sendmessage je mets 6/10
racattac13
Messages postés
62
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
14 février 2010
-
Et pour la securité il n'y a pas de blocage chez moi, et je n'ai jamais dit que le compte admin s'appelle "administrateur"
pour afficher les comptes avec leur SID on peut utiliser mon script
http://www.vbfrance.com/code.aspx?ID=25414
ou pour un poste local regarder les noms des repertoire contenu dans "Documents and settings"

Et pour utiliser autre chose que les lettre y a qu'a remplacer 25 par 254
racattac13
Messages postés
62
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
14 février 2010
-
Bon je sais pas comment on mail, et comme on m'a effacer mon source que je venait de mettre a jour , il faut quand meme que je te reponde
je connais LC5, et on peut pas l'installer a partir d'un compte utilisateur et il ne decrypte que dalle quand j'importe le sam sur mon ordi
crenaud76
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
18 -
La fonction GetDomainUserNames() retourne la liste des comptes utilisateurs déclarés sur le domaine.
Je n'ai pas trouvé de fonction permettant d'obtenir la liste des utilisateur effectivement connecté à un instant T. Pour ce faire, j'ai ajouté au script de connection de mes utilisateur un petit bout de script DOS ou il enregistre leur nomde login dans un fichier sur le réseau, et ensuite je dépouille ce fichier.
Sinon pour la liste des compte d'ordinateur, c'est bon ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.