Lire la carte réseau, suite ?
Le
LE TROLL
Bonjour,
Débutant vbNet, je cherche des informations réseau, sur lesquelles je ne
connais absolument rien.
A force de demander (sur presqu'un mois quand même), j'ai pu en obtenir
quelques-unes (qui peuvent sans doute être améliorées), soit :
- la connexion
- le nom du PC
- l'adresse IP principale
- le trafic
- la vitesse.
Il me manque 3 informations qui sont :
- la durée (peut se calculer à la rigueur)
- SSID wifi (nom utilisateur wifi)
- qualité de réception (0 à 5)
En fin de compte, tout ça se trouve en cliquant sur l'icône réseau du
systray (ou panneau de configuration), puis centre de réseaux et partages,
puis "voir le statut".
A ce lien, on trouvera un exemple de code vbNet qui permettrait de compléter
ce qu'il me manque, si j'y comprenais quelque chose, c'est ici :
http://mesromans.free.fr/wifivbnet.zip
Notons dans un autre registre, qu'il y a aussi l'api wLanApi.dll qui fait ce
que je cherche, mais c'est encore plus compliqué !
Et voici le code que j'ai actuellement en vbNet, des fonctions sus-citées
que je possède désormais. Ce code comme je le disais est sans doute aussi à
améliorer, mais je n'en ai pas le savoir. Par exemple, parfois je fais une
boucle each, et je récupère seulement l'information du premier passage, ce
qui me convient, mais pourquoi c'est la première information qui est la
bonne (IP par exemple), je n'en sais rien, et je ne sais pas davantage non
plus si ceci va fonctionner dans tous les cas, je constate simplement qu'à
défaut de connaître la chose, et bien ça tourne
Voici mon code vbNet (compilation d'informations fournies un peu partout :
' cle3Gusb form1
Option Explicit On
Imports System.Net.NetworkInformation
Imports System.Net
Imports System.Math
' IL ME MANQUE : durée, SSID wifi, qualité de réception
Public Class Form1
Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim Statistics As IPv4InterfaceStatistics
Dim varHostEntry As IPHostEntry
Dim t1
Dim p1 As Double
Dim p2 As Double
'
TextBox1.Text = ""
t1 = ""
'
' connexion
If My.Computer.Network.IsAvailable Then TextBox1.Text = TextBox1.Text &
"Etat : Connecté" & vbCrLf
If Not My.Computer.Network.IsAvailable Then TextBox1.Text =
TextBox1.Text & "Etat : Déconnecté" & vbCrLf
'
TextBox1.Text = TextBox1.Text & "Computer : " & Environment.UserName &
vbCrLf
'
' IP
varHostEntry = Dns.GetHostByName(System.Net.Dns.GetHostName.ToString)
For Each varAnAddress In varHostEntry.AddressList
t1 = varAnAddress.ToString
Next
TextBox1.Text = TextBox1.Text & "Adr I.P : " & t1 & vbCrLf
'
' Trafic
For Each NetInterface As NetworkInterface In
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
If NetInterface.NetworkInterfaceType =
NetworkInterfaceType.Wireless80211 Then
Statistics = NetInterface.GetIPv4Statistics
p1 = System.Math.Round(Statistics.BytesSent / 1048576, 2)
p2 = Round(Statistics.BytesReceived / 1048576, 2)
TextBox1.Text = TextBox1.Text & "Trafic : " & Format(Round(p1 +
p2, 3), "# ##0.000") & " Mo" & vbCrLf
End If
Next
'
' vitesse
Dim MonInterface As System.Net.NetworkInformation.NetworkInterface
For Each MonInterface In
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
TextBox1.Text = TextBox1.Text & "Vitesse : " &
MonInterface.Speed.ToString \ 1048576 & " Mo/s" & vbCrLf
Exit For
Next
End Sub ' form1
End Class
' MANQUE
'- la durée (peut se calculer à la rigueur)
'- SSID wifi (nom utilisateur wifi)
'- qualité de réception (0 à 5)
--
En vous remerciant, très cordialement.
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
Débutant vbNet, je cherche des informations réseau, sur lesquelles je ne
connais absolument rien.
A force de demander (sur presqu'un mois quand même), j'ai pu en obtenir
quelques-unes (qui peuvent sans doute être améliorées), soit :
- la connexion
- le nom du PC
- l'adresse IP principale
- le trafic
- la vitesse.
Il me manque 3 informations qui sont :
- la durée (peut se calculer à la rigueur)
- SSID wifi (nom utilisateur wifi)
- qualité de réception (0 à 5)
En fin de compte, tout ça se trouve en cliquant sur l'icône réseau du
systray (ou panneau de configuration), puis centre de réseaux et partages,
puis "voir le statut".
A ce lien, on trouvera un exemple de code vbNet qui permettrait de compléter
ce qu'il me manque, si j'y comprenais quelque chose, c'est ici :
http://mesromans.free.fr/wifivbnet.zip
Notons dans un autre registre, qu'il y a aussi l'api wLanApi.dll qui fait ce
que je cherche, mais c'est encore plus compliqué !
Et voici le code que j'ai actuellement en vbNet, des fonctions sus-citées
que je possède désormais. Ce code comme je le disais est sans doute aussi à
améliorer, mais je n'en ai pas le savoir. Par exemple, parfois je fais une
boucle each, et je récupère seulement l'information du premier passage, ce
qui me convient, mais pourquoi c'est la première information qui est la
bonne (IP par exemple), je n'en sais rien, et je ne sais pas davantage non
plus si ceci va fonctionner dans tous les cas, je constate simplement qu'à
défaut de connaître la chose, et bien ça tourne
Voici mon code vbNet (compilation d'informations fournies un peu partout :
' cle3Gusb form1
Option Explicit On
Imports System.Net.NetworkInformation
Imports System.Net
Imports System.Math
' IL ME MANQUE : durée, SSID wifi, qualité de réception
Public Class Form1
Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim Statistics As IPv4InterfaceStatistics
Dim varHostEntry As IPHostEntry
Dim t1
Dim p1 As Double
Dim p2 As Double
'
TextBox1.Text = ""
t1 = ""
'
' connexion
If My.Computer.Network.IsAvailable Then TextBox1.Text = TextBox1.Text &
"Etat : Connecté" & vbCrLf
If Not My.Computer.Network.IsAvailable Then TextBox1.Text =
TextBox1.Text & "Etat : Déconnecté" & vbCrLf
'
TextBox1.Text = TextBox1.Text & "Computer : " & Environment.UserName &
vbCrLf
'
' IP
varHostEntry = Dns.GetHostByName(System.Net.Dns.GetHostName.ToString)
For Each varAnAddress In varHostEntry.AddressList
t1 = varAnAddress.ToString
Next
TextBox1.Text = TextBox1.Text & "Adr I.P : " & t1 & vbCrLf
'
' Trafic
For Each NetInterface As NetworkInterface In
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
If NetInterface.NetworkInterfaceType =
NetworkInterfaceType.Wireless80211 Then
Statistics = NetInterface.GetIPv4Statistics
p1 = System.Math.Round(Statistics.BytesSent / 1048576, 2)
p2 = Round(Statistics.BytesReceived / 1048576, 2)
TextBox1.Text = TextBox1.Text & "Trafic : " & Format(Round(p1 +
p2, 3), "# ##0.000") & " Mo" & vbCrLf
End If
Next
'
' vitesse
Dim MonInterface As System.Net.NetworkInformation.NetworkInterface
For Each MonInterface In
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
TextBox1.Text = TextBox1.Text & "Vitesse : " &
MonInterface.Speed.ToString \ 1048576 & " Mo/s" & vbCrLf
Exit For
Next
End Sub ' form1
End Class
' MANQUE
'- la durée (peut se calculer à la rigueur)
'- SSID wifi (nom utilisateur wifi)
'- qualité de réception (0 à 5)
--
En vous remerciant, très cordialement.
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.

Poser une question


Bonjour Le Troll,
Je pense par contre, que ce n'est pas forcément la 1ère IP qui sera la
bonne.
Sans avoir vérifié, la boucle Each va te lister les différentes cartes,
peut-être même dans le même ordre que lorsque l'on tape la commande IPCONFIG
sous l'invite de commande.
Soit la carte a obtenu 1 IP, soit non.
Soit la carte connait la passerelle qui te permet d'accéder à internet, soit
non.
Si ca marche quasiment tout le temps avec la 1ère occurence de la boucle
Each, pour moi, je pense que ce ne sera pas forcément obligatoire.
Je vais prendre l'exemple d'un PC portable qui a 1 carte réseau WiFi, et 1
carte réseau filaire.
Teste en connectant ce PC portable au réseau une fois via le WiFi, et une
nouvelle fois via le RJ45.
Sans avoir vérifié, je suis persuadé que l'IP ne sera pas la 1ère occurence
de la boucle Each dans ces 2 cas.
Si tel est le cas, je pense qu'il faut vérifier que les données attendues
soient de format correct avant de sortir de la boucle.
Bonne journée,
Stéphane.
Dans cette boucle chaque élément trouvé est "rangé" dans t1,
donc tu ne récupères que le dernier élément trouvé. Il
te faut ranger chaque élément trouvé dans un tableau ou
l'afficher dans une grille ou par un msgbox selon ce que tu
veux en restant à l'intérieur de la boucle.
Pas de problème ici, tu récupère bien un élément que tu
recherches et sélectionne par le if. Toutefois si le if
peut retrouver plusieurs éléments correspondants dans la
boucle tu ne récupéreras que le dernier comme ci-dessus.
Donc dans le if il te faut récupérer tes éléments et les
conserver pour pouvoir tous les observer et utiliser.
Exit for te fait sortir de la boucle dès le premier
élément trouvé. Soit la boucle est inutile parce que tu n'as
besoin que d'un seul élément, soit le exit for est à enlever
et tu récupères tous les éléments.
Bonjour,
J'ai isolé les boucles pour répondre.
Noter que dans les boucles For each la recherche des éléments
se fait dans un ordre indifférent et pas toujours le même d'où
la nécessité d'analyser le résultat à chaque tour de boucle.
--
Jacques dit Jacquouille
Ben oui... en fait, moi, ce que je cherche c'est l'adresse IP du PC qui
se connecte en mode wifi (donc pas le filaire), toutefois on fait comment
pour savoir si c'est la bonne IP, ah ?
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
<Stéphane> a écrit dans le message de
news:uueMjo%
Oui, en effet, c'est la dernière info qu'est la bonne et nom la
première, si je veux la première faut mettre un exit for après la primo
lecture.
Non, je ne savais pas que Each sortait dans n'importe quel ordre, j'en
tiendrai compte dorénavant, toutefois tu me dis de vérifier ensuite, oui,
mais de vérifier par rapport à quoi et comment, ah ah !
Mais bon, au point où j'en suis... bof... comment vérifier si c'est l'IP
wifi du PC, ah ?
Je sors des infos je ne sais même pas trop comment, maintenant on me dit
qu'elles peuvent être fausses, ouais, et de toute façon il m'en manque,
alors, bon...
Faut que je trouve quelqu'un qui sait le faire, sinon je ne m'en sortirai
pas, ça n'a pas l'air monstrueux en quantité, avec trente lignes j'ai déjà
cinq infos, certes à revoir, et il m'en manque trois (deux si on calcule la
durée), y a pas à chercher, faut une personne qui sache le faire...
Ben, merci néanmoins, cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
"Jacquouille14" news:4b1e1f74$0$31972$
Tes infos ne sont pas fausses, elles sont ce que tu as demandé
mais il en manque.
Quand j'écris vérifier je veux dire que tu regardes le résultat et
en tire tes conclusions.
Pour ne perdre aucune info venant de chaque boucle each tu fais
ce code en changeant le nom du tableau à chaque boucle:
dim mesresultats(20) as string 'création de tableau
dim i%=0
for each ...'tous les résultats vont dans le tableau
i%=i% + 1
mesresultats(i%) = MonInterface.Speed.ToString 1048576 & " Mo/s"
& vbCrLf
next
Pour voir les résultats:
for i% = 1 to 20
msgbox(mesresultats(i%),48,"résultat numéro " & cstr(i%))
next
Tu peux aussi utiliser des tableaux à dimensions variables.
J'ai choisi 20 résultats au pif, tu mets ce que tu veux, c'est selon
ce que tu crois avoir comme éléments dans tes boucles pour ne rien
rater.
Ton projet me semble intéressant, pour contrôler le trafic internet ?
--
Jacques dit Jacquouille