C# - Mostrar mi interfaz de red Wifi

Iniciado por TickTack, 11 Julio 2017, 09:15 AM

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

TickTack

Hola,

queria mostrar mi interfaz de red Wifi o Adaptador con c#. En realidad, como he leido, deberia ser wlan0. Pero yo soy nuevo en el tema de Auditoria.

Yo hice un textBox multilineado.

Bueno en el evento del click de un boton escribi esto:


Adapters obj = new Adapters();
var value = obj.net_adapters();
textBox1.AppendText(value);


Y despues hice una clase:


public class Adapters
    {
        public string net_adapters()
        {
            string value = string.Empty;
            foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                value = nic.Name;
            }
            return value;
        }
    }


Pero al probar el codigo, en el textBox multilineado me sale conexión Lan* 2.
Esta bien eso?

O tiene que salir wlan0?

Alguien me puede ayudar que hasta ahora solo estuve probando ya que no tengo experiencia en el tema de Auditoria.

Gracias y saludos
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."

Eleкtro

#1
Cita de: TickTack en 11 Julio 2017, 09:15 AM
en el evento del click de un boton escribi esto:


Adapters obj = new Adapters();
var value = obj.net_adapters();

Lo que estás haciendo no es del todo correcto, estás creando una instancia de una clase solamente para usar un miembro de uso genérico; en su lugar deberías asignarle un nivel de acceso global (keyword static en C#) al método, y llamarlo diréctamente, de esta forma estarás escribiendo código rehutilizable que te servirá para cualquier otro proyecto en el futuro...

Código (csharp) [Seleccionar]
public class Adapters {
   public static string net_adapters() {
       // ...
   }
}


Código (csharp) [Seleccionar]
string value = Adapters.net_adapters();




Cita de: TickTack en 11 Julio 2017, 09:15 AM
Código (csharp,6) [Seleccionar]
       public string net_adapters()
       {
           string value = string.Empty;
           foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
           {
               value = nic.Name;
           }
           return value;
       }


Pero al probar el codigo, en el textBox multilineado me sale conexión Lan* 2.
Esta bien eso?

Fíjate bien en el código que has escrito, sobre todo en la linea que he resaltado...    la función NetworkInterface.GetAllNetworkInterfaces() devuelve todas las interfaces de red que tienes (el propio nombre de la función se explica por si mismo), y en cada iteración tú estás reemplazando el valor de la variable "value", esto quiere decir que al final de ese bloque de código solo devuelves el nombre de la interfáz de la última iteración del búcle, y esa puede tener cualquier nombre... dependiendo del equipo, idioma del S.O y su configuración.

Partiendo de la premisa de que el programador no puede tener la certeza de la cantidad de interfaces/conexiones de red existentes en un equipo, tu función y la forma en que vas a representar dicha información en la UI debes adaptarlo todo para esperar devolver y representar una secuencia de elementos (un array), no esperar solamente que se devuelva 1 única interfáz, por que esa asunción no puedes hacerla. A través de tu UI puedes permitir la selección manual o automática de una de las interfaces de red que estén disponibles. Y para devolver unicamente interfaces wi-fi debes añadir un criterio adicional, evaluando el valor de la propiedad NetworkInterface.NetworkInterfaceType en cada iteración...

No tengo wi-fi presente en este PC, así que el siguiente código que he escrito no he podido verificarlo, pero en teoría solamente debería devolverte las interfaces wi-fi/wireless:

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.NetworkInformation;


Código (csharp) [Seleccionar]
public sealed class NetworkUtils {

   [DebuggerNonUserCode()]
   private NetworkUtils() {}

   [DebuggerStepThrough()]
   public static IEnumerable<NetworkInterface> EnumerateWirelessAdapters() {

       foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) {
           if (adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) {
               yield return adapter;
           }
       }

   }

}


Código (csharp) [Seleccionar]
IEnumerable<NetworkInterface> adapters = NetworkUtils.EnumerateWirelessAdapters();

foreach (NetworkInterface adapter in adapters) {
   Console.WriteLine(adapter.Name);
}


Saludos








TickTack

#2
Hola Elektro,

gracias por tu aporte. De veras, muchisimas gracias.

Citar
Fíjate bien en el código que has escrito, sobre todo en la linea que he resaltado...    la función NetworkInterface.GetAllNetworkInterfaces() devuelve todas las interfaces de red que tienes (el propio nombre de la función se explica por si mismo), y en cada iteración tú estás reemplazando el valor de la variable "value", esto quiere decir que al final de ese bloque de código solo devuelves el nombre de la interfáz de la última iteración del búcle, y esa puede tener cualquier nombre... dependiendo del equipo, idioma del S.O y su configuración.

Joder. Ya quiero dejar de cometer esas estupideces. Como haces tu? No se pero yo puedo estar mucho tiempo revisando una y otra vez el codigo pero siempre se me escapa a los ojos. Creo que nunca voy a poder a hacer un buen programa el dia de manana porque estara lleno de bugs...



Bueno. Probe tu codigo.

Antes me fije en tu codigo. Y entiendo a lo que vas. Anque sinceramente tengo que ver todavia lo que significa [DebuggerNonUserCode()] y [DebuggerStepperBoundary()].

Al probar tu codigo me larga esto: "Conexión de red inalámbrica"

Como esta?

Gracias y saludos

PD.: Cabe destacar que modifique Console.WriteLine(adapter.Name); por textBox1.AppendText(adapter.Name);
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."

Eleкtro

#3
Cita de: TickTack en 11 Julio 2017, 14:42 PM
Creo que nunca voy a poder a hacer un buen programa el dia de manana porque estara lleno de bugs...

Dicen que la práctica hace al maestro (yo no soy un gurú ni mucho menos, que no se me mal interprete). Cuantos más bugs hayas solucionado, más experiencia irás obteniendo y menos fallos tendrás que corregir...

Cita de: TickTack en 11 Julio 2017, 14:42 PM
PD.: Cabe destacar que modifique Console.WriteLine(adapter.Name); por textBox1.AppendText(adapter.Name);

Te sugiero utilizar un ListBox, es un control más..."representativo" para estos fines, al menos lo es más que un TextBox multilinea.

Cita de: TickTack en 11 Julio 2017, 14:42 PMtengo que ver todavia lo que significa [DebuggerNonUserCode()] y [DebuggerStepperBoundary()].

No te fijes mucho en eso por el momento, son atributos de clase (metadatos) que utilizo para modificar (optimizar) el comportamiento del debugger de Visual Studio y mi productividad. Es util para la depuración con o sin el uso de breakpoints... dependiendo del atributo de clase que le asignes a un miembro, y siempre que la característica Just My Code esté activada en Visual Studio.

( Por cierto, el atributo que le quise poner en realidad es 'DebuggerStepThrough', no 'DebuggerStepperBoundary', pero lo escribí tan deprisa el código que no me fijé demasiado bien xD. )

Cita de: TickTack en 11 Julio 2017, 14:42 PMAl probar tu codigo me larga esto: "Conexión de red inalámbrica"
Como esta?

Eso puedes averiguarlo tú mismo... abre el panel de control, dirígete a: Panel de control\Redes e Internet\Conexiones de red y comprueba si es la interfáz correcta.

Saludos!








TickTack

#4
Hola Elektro,

lo averigue, y si, dice Conexion de red inalambrica. Esta bien.
O no?

Si esta bien... hay una forma de poner mi tarjeta wifi en modo premiscuo? (No quize abrir un nuevo tema porque no sabia si seria adecuado) De que maneras?

Gracias y saludos
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."