2009-12-16 5 views
0

Je veux créer un compteur de bande passante pour Windows en utilisant vb.net, mais je n'arrive pas à trouver quoi que ce soit dans le framework .net pour surveiller la quantité de données dans ou hors . Je veux créer ceci parce que je ne peux pas en trouver un bon gratuitement, et je pense que c'est quelque chose que les gens pourraient vouloir.Surveillance des données dans/hors de l'ordinateur via vb.net

S'il n'y a rien dans le framework .net pour surveiller cela, y a-t-il des appels P/Invoke que je peux faire? Si c'est vrai, que sont-ils?

Ce projet est-il faisable? Je veux essayer et mesurer la quantité exacte de données dans et hors de tous les programmes et connexions si possible.

Merci pour votre aide!

EDIT: Pour clarifier, bien que je doute qu'il y aura quelque chose de simple comme My.Computer.Network.IO ou quelque chose comme ça, je ne veux pas vraiment que cela soit trop complexe. ÉDITION: Peut-être que ce serait trop compliqué. Si je voulais simplement surveiller l'activité http sur le port 80, comment pourrais-je faire cela sans perturber les données?

Répondre

1

Vous devez descendre au niveau du pilote et surveiller votre périphérique Ethernet et compter les octets qui sortent et sortent.

Cela impliquera P/Invoke Je suis assez sûr. Ne pensez pas que c'est aussi simple que cela ...

+0

Je me suis dit autant. Un moyen de le faire simplement sans pilotes? Ensuite, nous entrons dans les problèmes de logo Windows avec l'avertissement lors de l'installation, puis personne ne veut utiliser votre programme. – Cyclone

1

Quelques possibilités:

  • WinPCAP - vous demande ne donnera pas, cependant
  • LSP - dans une DLL dans un processus qui utilise Winsock. Vous donne tout ce que vous voulez surveiller le trafic par application, mais n'est pas simple à écrire.
  • WMI - Les totaux agrégés par interface réseau: http://msdn.microsoft.com/en-us/library/aa394293(VS.85).aspx
+0

Hmm, y a-t-il un moyen de simplement surveiller même un navigateur pour la bande passante? Cela semble beaucoup trop de travail pour un si petit résultat – Cyclone

1

Vous pouvez tricher cela facilement:

  1. Créer un procédé utilisant cmd.exe
  2. Appelez la commande `netstat -e 10' (pendant 10 secondes)
  3. canaliser la sortie de retour à l'application en tant que flux d'entrée
  4. analyser le flux d'entrée
  5. Si l'utilisateur décide de quitter le programme, envoyer une séquence de rupture ctrl-c au processus.

Qu'en pensez-vous?

Espérons que cela aide, Cordialement, Tom.

+0

Avez-vous quelques conseils sur la façon de faire cela? Ça à l'air bon! – Cyclone

+0

@Cyclone: ​​Jetez un oeil ici sur la façon de récupérer les sorties de la console http://www.codeproject.com/KB/threads/CaptureConsole.aspx, Ce serait votre meilleur pari pour obtenir le nombre d'octets in/out par simple regex analyse syntaxique. :) – t0mm13b

+0

@Cyclone: ​​Juste pour le suivi, ce qui précède vous a-t-il aidé particulièrement le lien vers l'article de codeproject? – t0mm13b

1

Votre meilleur pari est d'utiliser les compteurs de performance ou WMI et faire l'échantillonnage à une fréquence qui vous convient. Si vous essayez d'obtenir quelque chose de similaire au nombre d'octets sur les propriétés de la carte réseau, ces compteurs sont dans le jeu de compteurs de performance.

Si vous essayez de mesurer également tous les périphériques (USB, etc.), vous aurez probablement besoin d'écrire vos propres pilotes clients pour intercepter les événements de transfert de données.

1

Il y a plusieurs compteurs de performance qui vous donnent des numéros de base sur le débit sur la carte d'interface réseau. Commencez par jeter un coup d'oeil à eux avec Perfmon.exe, vous verrez leur catégorie, nom et nom d'instance. Ces mêmes numéros sont disponibles avec la classe .NET PerformanceCounter. Les utiliser pour mesurer la bande passante est un peu difficile, vous avez plus de chances de mesurer la bande passante du serveur auquel vous parlez, combinée à la douzaine de routeurs qui transmettent le message IP à votre machine.

Questions connexes