begin process at 2012 02 11 09:47:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > FONCTIONS RÉSEAU DE BASE

FONCTIONS RÉSEAU DE BASE


 Information sur la source

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Classé sous :reseau, api, enumeration, ordinateur, utilisateur Niveau :Initié Date de création :16/07/2004 Vu :8 092

Auteur : crenaud76

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

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

  • 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
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


 Sources du même auteur

Source avec Zip Source avec une capture LILO : NOUVEAU LANGAGE DE PROGRAMMATION
Source avec Zip WMI BROWSER : UTILISATION DES CLASSES WMI
Source avec Zip SUPEROPTION
Source avec Zip EVALUER UNE EXPRESSION MATHÉMATIQUE
Source avec Zip CONNECTER/DÉCONNECTER DES RESSOURCES RÉSEAU

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OCX REGISTRE par gta126
CRÉER UN COMPTE UTILISATEUR SOUS WINDOWS NT, 2000 OU XP par JuanedaEr
Source avec Zip Source avec une capture REDIRIGER LES MSGS DE MESSENGER par EBArtSoft
Source avec Zip CONNECTER/DÉCONNECTER DES RESSOURCES RÉSEAU par crenaud76
Source avec Zip RECHERCHE D'UN UTILISATEUR SUR RESEAU par Korn_Deftones

Commentaires et avis

Commentaire de logedu le 20/07/2004 16:51:54

Intéressant ton code : ya plein d'API qui ne sont pas dans l'API-guide d'Allapi.net...
Mais ne pourrais-tu pas fournir un exemple d'utilisation ? J'arrive pas à utiliser des proc.
Es-tu sûr que dans GetDomainComputerNames et GetDomainUserNames le paramètre Tableau est de type String ?

Commentaire de crenaud76 le 20/07/2004 22:39:54

ben pouraquoi voudrais-tu qu'il soit d'un autre type ?! Il est déclaré en tant que tel dans la signature des fonctions.
Pour ce qui est de l'utilisation de GetDomainComputerNames() par exemple, voici une idée de code :
Dim T() as String, Ret as Long, i As Long
Ret = GetDomainComputerNames(T,"","NomDuDomaine")
For i = 0 to Ret
  MsgBox T(i)
Next

Commentaire de logedu le 21/07/2004 12:44:35

GetDomainComputerNames(T, "NomServeur", "NomDomaine") retourne une liste blanche
GetDomainComputerNames(T, "", "Ariane") retourne seulement le nom de l'ordinateur local

Pour avoir la liste des ordinateurs du réseau il faut faire : GetDomainUserNames(T, "Serveur", FILTER_WORKSTATION_TRUST_ACCOUNT)

... ce n'est pas tout à fait ce qu'on attend des commentaires attachés aux fonctions proposées...

Commentaire de logedu le 21/07/2004 12:56:17

Excuse, j'ai tout faux...
Mais comment on récupère les noms des utilisateurs actuellement connectés sur le réseau ?

Commentaire de crenaud76 le 21/07/2004 14:53:22

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 ?

Commentaire de racattac13 le 22/08/2004 11:48:15

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

Commentaire de racattac13 le 22/08/2004 11:58:48

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



Commentaire de ratala le 20/11/2005 14:51:20

Tres bien le sendmessage je mets 6/10

Commentaire de ratala le 20/11/2005 14:55:26

Tres bien le sendmessage je mets 6/10

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

lister les utilisateur de mon reseau [ par vince54 ] Bonjour, je souhaiterais avec un control genre FolderBrowser récuperer le nom des ordinateur sur mon reseau et cliquer sur un d'entre eux pour recuper dir sur ordinateur du reseau [ par Hercule_Babeuf ] Alors voila je recherche un moyen d effetuer un dir sur un repertoire d un ordinateur du réseau, sachant que la commande dir("\\Bob\C:\repertoire")ne Récupérer le nom de l'ordinateur sur lequel une session d'utilisateur est démarée. [ par sylvainvwvb ] Chers Tous,Je suis débutant dans le monde du développement et un ami m'a vivement conseillé de me rendre sur ce site pour trouver des solutions VB.Po utilisateur dun reseau [ par Spe6men ] je voudrai faire apparaitre dans une list box les different uitlisateur dun reseau (sous forme soit du nom de lordinateur ou alors du nom de la lutili tester si utilisateur connecté au reseau [ par sebtralalaetph ] Bonjour à tous, comme dit dans le titre j'aimerai connaitre le moyen de savoir si un utilisateur est connecte a un reseau (serveur citrix).Si quelqu'u Erreur d'exécution n° 430 [ par PierreRIVET ] Après avoir saisi un utilisateur (en Windows 98) j'obtiens le message suivant:Erreur d'exécution n° 430 - La classe ne gère pas Automation ou l'inter Erreur d'exécution n° 430 [ par PierreRIVET ] Après avoir saisi un utilisateur (en Windows 98) j'obtiens le message suivant: Erreur d'exécution n° 430 - La classe ne gère pas Automation ou l'inte liste ordinateur sur le reseau [ par farradjs ] Svp comment on peut lister dans une listbox tout les noms des ordinateurs presents dan le reseau ainsi que leur session ouverte.........si qlq le sait API Windows [ par rutabaga ] Bonjour,Exite-t-il une API ou au moins une solution pour détecter si un fichier partagé en réseau (un fichier excel par ex) est ouvert par un autre ut ordinateurs en reseau: utilisateur [ par Ishamael ] b'soirj' aimerais savoir s' il existe une methode (autre que le nbtstat) pour savoir si un ordinateur du reseau a un utilisateur de connecte ou non.Me


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales