Obtener subida y bajada de Internet en Megabytes

Iniciado por okik, 19 Junio 2015, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

okik

Hola

Me gustaría saber como puedo, con VB.NET, obtener los megabytes de datos de bajada y subida a través de mi conexión de Internet.

Gracias




He encontrado este código en la ayuda de vb.net. Si se mete en un timer al entrar en una nueva web los valores aumentan, porque me da unos números que representan paquetes recibidos creo. Pero no se es esto lo que busco, ni qué representan estos valores.

Código (vbnet) [Seleccionar]
   Dim properties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()
       Dim ipstat As IPGlobalStatistics = properties.GetIPv4GlobalStatistics()
       Label1.text= "Inbound Packet Data: "  & ipstat.ReceivedPackets
       Label2.text= "Forwarded: " & ipstat.ReceivedPacketsForwarded
       Label3.text= "Delivered: " &  ipstat.ReceivedPacketsDelivered
       Label4.text= "Discarded: " &  ipstat.ReceivedPacketsDiscarded

 


https://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalstatistics.receivedpackets%28v=vs.110%29.aspx




Finalmente parece que encontré la respueta:

Código (vbnet) [Seleccionar]
    Dim ipv4Stats As System.Net.NetworkInformation.IPv4InterfaceStatistics
       ipv4Stats = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(0).GetIPv4Statistics
       Label6.Text = ipv4Stats.BytesReceived.ToString
       Label7.Text = ipv4Stats.BytesSent.ToString


fuente:
http://www.sevenforums.com/network-sharing/193986-question-about-packets-bytes-sent-received-n-work-connection.html

Se obtiene la misma información que aquí:



Sl2

Eleкtro

#1
Solo por comentarlo, ten en cuenta que lo que estás haciendo aquí no es una metodología segura que puedas aplicar a otros PC's:
Citar
Código (vbnet) [Seleccionar]
ipv4Stats = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(0).GetIPv4Statistics

Estás accediendo a un índice específico sin haber identificado previamente si ese índice "0" hace referencia a la interfáz de red que esté activa y transfiriendo datos.

Esas classes que estás utilizando exponen miembros para identificar el adaptador en concreto que realmente quieras, mediante la MAC, el nombre de la interfáz, las DNS, la Id, el hostname, o cómo prefieras hacer la comprobación, deberías mejorarlo basándote en alguno de esos parámetros.

Esto tampoco sería un método seguro, ya que no identifico la red en concreto que quiero mostrar, pero al menos excluyes bastantes otras posibles interfaces:
Código (vbnet) [Seleccionar]
Public Shared Function GetEthernetAdapters() As IEnumerable(Of NetworkInterface)

   Return From adapter As NetworkInterface In NetworkInterface.GetAllNetworkInterfaces
          Where adapter.NetworkInterfaceType = NetworkInterfaceType.Ethernet AndAlso
                adapter.Supports(NetworkInterfaceComponent.IPv4) AndAlso
                Not adapter.IsReceiveOnly AndAlso
                Not adapter.OperationalStatus = OperationalStatus.Down

End Function

Private Sub Timer1_Tick(sender As Object, e As EventArgs) _
Handles Timer1.Tick

   Dim ipv4Stats As IPv4InterfaceStatistics = GetEthernetAdapters.First.GetIPv4Statistics

   Label16.Text = String.Format("{0} Bytes.", CStr(ipv4Stats.BytesReceived))
   Label7.Text = String.Format("{0} Bytes.", CStr(ipv4Stats.BytesSent))

End Sub


Saludos!








okik

#2
hola

No había caído, gracias. Aprecio tu aporte.


Como prueba he conectado el móvil para usarlo como modem y utilizar la conexión del mismo. El código sigue funcionado. He sustitiudo (0) por Firts.

Código (vbnet) [Seleccionar]
ipv4Stats = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces.First.GetIPv4Statistics

Pero supongo que es lo mismo.


En cuanto al código que me das, me da error en la lína 14.

Código (vbnet) [Seleccionar]
Dim ipv4Stats As IPv4InterfaceStatistics = GetEthernetAdapters.First.GetIPv4Statistics

Señala a GetIpv4Statistics y dice "La secuencia no contiene elementos"

Intentaré averiguar el índice de la red activa.


Sl2



Eleкtro

Cita de: okik en 19 Junio 2015, 23:33 PM"La secuencia no contiene elementos"

El error se explica por si mismo, te está indicando que la query de LINQ está vacía, ya que no se ha encontrado ningún elemento que cumpla las condiciones que especifiqué (en mi caso si funciona, con mi interfáz de red Ethernet), cambia esas condiciones.

saludos!