Gestire le interfacce e ottenere lo stato della rete

di Cristian Civera, in System.Net,

A partire dalla versione 2.0 del .NET Framework sono state introdotte delle API per gestire le interfacce di rete e quindi tutti gli aspetti della connettività. La classe principale è NetworkInterface che prima di tutto permette di conoscere se è disponibile una connessione valida.

// Stampa la disponibilità della rete
bool network = NetworkInterface.GetIsNetworkAvailable();
Console.WriteLine("IsNetworkAvailable: {0}", network);

Attraverso il metodo GetAllNetworkInterfaces si possono ottenere tutte le interfacce installate sulla macchina per conoscere tutti i dati inerenti, come il MAC, la velocità, gli indirizzi IP unicast, multicast, i DNS, gateways ecc. Ecco quindi come sfogliare gli IPv4 delle interfacce di rete installate:

// Stampa il MAC della scheda di rete
foreach (NetworkInterface networkInterface in
NetworkInterface.GetAllNetworkInterfaces())
{
  PhysicalAddress pa = networkInterface.GetPhysicalAddress();
  Console.WriteLine("MAC: {0}", pa);

  IPInterfaceProperties ipInterface = networkInterface.GetIPProperties();
  // Stampa gli IPv4
  foreach (UnicastIPAddressInformation ip in ipInterface.UnicastAddresses)
    if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
      Console.WriteLine("IP: {0}", ip.Address);
}

Infine con la classe NetworkChange si possono intercettare il cambio dello stato della connessione e il cambio degli indirizzi di rete associati, semplicemente con degli eventi.

// Intercetta il cambio di disponibilità della rete
NetworkChange.NetworkAvailabilityChanged += new
NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChan
ged);
// Intercetta il cambio di indirizzo
NetworkChange.NetworkAddressChanged += new
NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
static void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
  Console.WriteLine("Address changed");
}

static void NetworkChange_NetworkAvailabilityChanged(object sender,
NetworkAvailabilityEventArgs e)
{
  Console.WriteLine("Available: {0}", e.IsAvailable);
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi