MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
13 août 2006 à 01:18
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
13 août 2006 à 17:27
Bonjour à tous,
voilà je suis confronté à un bon problème et ça fait quelques heures que je cherche en vain.
J'aimerais lister les interfaces réseaux actives.
En gros, récupérer le nom des interfaces / connexions, ça serait déjà ça.
Après si il y avait possibilité de récupérer les adresses ip de l'interface, et le nom d'octets envoyés/reçus
Enfin c'est surtout déjà de pouvoir lister les noms des interfaces (ou connexions je ne sais pas)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 13 août 2006 à 01:38
Merci je suis en train de regarder ça (et si au pire je tombe mort de sommeil devant mon écran je regarde demain).
Effectivement j'avais pas du tout pensé au wmi, en ce moment je me suis familiarisé avec les compteurs de performance sous PDH et j'en oublie les wmi
(comme quoi je pensais tout le monde dormais à cette heure la )
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 13 août 2006 à 12:00
Merci jack, j'était tombé sur ta source et j'avais regardé, mais avec ton code on obtenait que les adresses ip (et masques) je crois. J'avais besoin de mon coté des noms des interfaces.
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 13 août 2006 à 16:19
Dites, j'arrive bien à récupérer toutes les interfaces réseaux (je n'ai sélectionné que les actives). Mais maintenant j'aimerais pouvoir récupérer nombre d'octets qui y transitent (par seconde ou au total).
J'ai essayé avec 2 façons :
Avec RasConnection
Dim Stats As RAS_STATS
RasGetConnectionStatistics hConnection, VarPtr(Stats)
Ici il faut fournir le handle de la connection de type RasConnection (que je ne connais pas, donc je n'y arrive pas)
Avec les WMI
dans Win32_PerfRawData_Tcpip_NetworkInterface
ou Win32_PerfFormattedData_Tcpip_NetworkInterface
J'arrive bien à récupérer les octets, mais le problème c'est pour faire le lien entre mes interfaces réseau que j'ai listé et les valeurs que j'obtient.
Ici en listant il n'y a que la propriété Name qui peut me renvoyer une indication de l'interface réseau, mais ça ne correspond pas à la propriété name des interfaces listées avec Win32_NetworkAdapter (ni même avec aucune autre de leurs propriétés)
Donc en gros, j'ai d'un coté mes interfaces réseau, de l'autre les statistiques, mais je n'arrive pas à les relier (la bonne interface pour les stat correspondantes).
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 13 août 2006 à 17:27
Bon je crois qu'il faudrait plutot que je regarde du coté des api "IP Helper"
En effet j'ai trouvé d'autre post en anglais de gens qui n'arrivait pas (tout comme moi) à relier Win32_PerfRawData_Tcpip_NetworkInterface et Win32_NetworkAdapter, et apparement ils n'ont pas trouvé de solution.
Pourtant, ouvrez le gestionnaire des taches, à l'onglet réseau, et vous voyez bien autant de graphes que de connexions actives (avec les titres des graphes exactement les meme que dans Win32_NetworkAdapter et avec le traffic )
Sur la msdn ils parlent donc des IP Helper et voici pour l'instant mon bout de code qui permettrais (à terme lol) de lister les interfaces réseau :
' Renvoie 0 si succès / NbInterface contient le nombre d'interfaces réseau
Public Declare Function GetNumberOfInterfaces Lib "iphlpapi" (NbInterfaces As Long) As Long
' Renvoie 0 si succès / Permet de récupérer les infos des interfaces réseau
Public Declare Function GetInterfaceInfo Lib "iphlpapi" (pIfTable As Long, lOutBufLen As Long) As Long
' Un adaptateur réseau
Public Type IP_ADAPTER_INDEX_MAP
Index As Long ' Index
'Name(255) as byte
Name As String ' Nom de l'adaptateur
End Type
' Une interface réseau
Public Type IP_INTERFACE_INFO
NumAdapters As Long ' Le nombre d'adaptateurs réseaux
Adaptater() As IP_ADAPTER_INDEX_MAP ' Le tableau des infos sur les adaptateurs
End Type
' Liste les interfaces réseau
Public Function mnetListNetworkInterfaces(ByRef NetWorkInterfaces As IP_INTERFACE_INFO)
Dim Info As IP_INTERFACE_INFO
Dim pInfo As Long
Dim lOutBufLen As Long
Dim NbInterfaces As Long
Dim T As Long
Const ERROR_INSUFFICIENT_BUFFER = &H7A
' Récupère le nombre d'interfaces
GetNumberOfInterfaces NbInterfaces
ReDim Info.Adaptater(NbInterfaces - 1) As IP_ADAPTER_INDEX_MAP
' Génère de la place pour la table
pInfo = LocalAlloc(LMEM_FIXED Or LMEM_ZEROINIT, Len(Info))
MoveMemory pInfo, Info, Len(Info)
' Récupère la bonne taille pour le tableau
If GetInterfaceInfo(pInfo, lOutBufLen) = ERROR_INSUFFICIENT_BUFFER Then
LocalFree pInfo
pInfo = LocalAlloc(LMEM_FIXED Or LMEM_ZEROINIT, lOutBufLen)
MoveMemory pInfo, Info, Len(Info)
End If
If GetInterfaceInfo(pInfo, lOutBufLen) = 0 Then
MoveMemory Info, pInfo, lOutBufLen
LocalFree pInfo
NetWorkInterfaces = Info
End If
End Function