C# - Usando classes para a programação com a web (.NET Core) - III


Hoje vamos apresentar algumas classes que facilitam a programação para web na linguagem C#.


Continuando a segunda parte do artigo vamos tratar da classe IPAddress da linguagem C# na .NET Core.

 

A classe IPAddress

 

A classe IPAddress fornece um endereço IP.

 

O endereço em si esta disponível como um array de bytes através da propriedade GetAddressBytes e pode ser convertido em um formato decimal pontuando usando o método ToString.

 

Esta classe também implementa os métodos estáticos Parse e TryParse que realiza a conversão inversa de ToString, ou seja, convertendo de uma string decimal pontuada para um IPAddress.

 

Principais propriedades:

Address API obsoleta
AddressFamily Obtém a família de endereços do endereço IP.
IsIPv4MappedToIPv6   Determina se o endereço IP é um endereço IPv6 mapeado por IPv4.
IsIPv6LinkLocal Determina se o endereço é um endereço local do link IPv6.
IsIPv6MultiCast Determina se o endereço é um endereço global multicast IPv6.
IsIPv6SiteLocal Determina se o endereço é um endereço local de site IPv6.
IsIPv6Teredo Determina se o endereço é um endereço IPv6 Teredo.
IsScoped Obtém ou define o identificador de escopo de endereço IPv6.

 

Principais métodos:

GetAddressBytes Fornece uma cópia do IPAddress como um array de bytes.
HostToNetworkOrder    Converte um valor de ordem de byte de host em ordem de byte de rede.
IsLoopBack Indica se o endereço IP especificado é o endereço de loopback.
MapToIPv4 Mapeia o objeto IPAddress  para um endereço IPv4.
MapToIPv6 Mapeia o objeto IPAddress  para um endereço IPv6.
NetworkToHostOrder Converte um número de ordem de byte de rede em ordem de byte de host
Parse Converte uma cadeia de caracteres de endereços IP em uma instância IPAddress .
TryParse Determina se uma cadeia de caracteres é um endereço IP válido.

 

Vejamos a seguir alguns exemplos práticos usando esta classe.

 

Vamos começar validando um endereço IP.

 

Vamos criar um projeto .NET Core tipo Console no VS 2017 Community chamado NETCore_IPAdress.

 

No método main() do arquivo Program.cs inclua o código a seguir:

 

        static void Main(string[] args)
        {
            IPAddress IP;
            bool flag = false;

            WriteLine("Informe o endereço IP: ");
            string enderecoIP = ReadLine();
           try
            {
                flag = IPAddress.TryParse(enderecoIP, out IP);
                if (flag)
                    WriteLine($"{enderecoIP} é um endereço IP válido");
                else
                    WriteLine($"{enderecoIP} Não é um endereço IP Válido");
            }
            catch (Exception ex)
            {
                throw new Exception("Erro : " + ex.Message);
            }
           ReadLine();
        }

 

Neste código um objeto IP é criado a partir da classe IPAddress.

 

A seguir o endereço IP é obtido da entrada do usuário e é validado usando o método TryParse().

 

Este método valida se uma string é um endereço IP válido ou não.

 

Executando programa iremos obter:

 

 

Para obter o endereço IP a partir do hostname podemos usar o seguinte código:

 

       static void Main(string[] args)
        {
            ObtemEnderecoIP();
            ReadLine();
        }
        private static void ObtemEnderecoIP()
        {
            try
            {
                WriteLine("Endereço IP Local : " + GetIPAddress(Dns.GetHostName()));
                WriteLine("Endereço IP do Google:" + GetIPAddress("google.com"));
                WriteLine("Endereço IP da Microsoft:" + GetIPAddress("microsoft.com"));
                WriteLine("Endereço IP do portal Macoratti.net:" + GetIPAddress("macoratti.net"));
                ReadLine();
            }
            catch (Exception ex)
            {
                WriteLine("Erro : " + ex.Message);
            }
        }
        public static IPAddress GetIPAddress(string hostName)
        {
            Ping ping = new Ping();
            try
            {
                var replay = ping.Send(hostName);
                if (replay.Status == IPStatus.Success)
                {
                    return replay.Address;
                }
                return null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

O resultado obtido é mostrado na figura abaixo:

 

 

Vejamos a seguir um exemplo que acessa a propriedade AddressFamily e converte um endereço IPv4 em IPv6 e vice-versa e que também mostra como criar endereços especiais (loopback e broadcast)

 

No arquivo Program.cs vamos definir dois métodos :
 

1- Converter IPv4 para IPv6

 

        public static void IPAddressConversao(string ipAddressString)
        {
            IPAddress address;
            if (!IPAddress.TryParse(ipAddressString, out address))
            {
                WriteLine($"Não foi possível analisar : {ipAddressString}");
                return;
            }
            byte[] bytes = address.GetAddressBytes();
            for (int i = 0; i < bytes.Length; i++)
            {
                WriteLine($"byte {i}: {bytes[i]:X}");
            }
            WriteLine($"familia : {address.AddressFamily}, " + $"mapeia para ipv6: {address.MapToIPv6()},
 mapeia para ipv4: {address.MapToIPv4()}");
        }

 

2- Criar endereços

 

        public static void IPAddressCriaEnderecos(string ipAddressString)
        {
            WriteLine($"Criando endereços IP a partir de :  {ipAddressString}\n");
            WriteLine($"IPv4 endereço loopback: {IPAddress.Loopback}");
            WriteLine($"IPv6 endereço loopback: {IPAddress.IPv6Loopback}");
            WriteLine($"IPv4 broadcast address: {IPAddress.Broadcast}");
            WriteLine($"IPv4 qualquer endereço: {IPAddress.Any}");
            WriteLine($"IPv6 qualquer endereço: {IPAddress.IPv6Any}");
        }

 

Com um endereço de loopback, o hardware de rede é ignorado. Este é o endereço IP que representa o
nome do host localhost.

O endereço de broadcast é um endereço que endereça todos os nós de uma rede local. Esse endereço não esta
disponível com IPv6, pois esse conceito não é usado com a versão mais recente do Internet Protocol.


Depois da definição inicial do IPv4, o multicast foi adicionado para o IPv6. Com o multicast, um grupo de nós é
endereçada em vez de todos os nós. Com o IPv6, o multicast substitui completamente a transmissão.

No método Main() defina o código :
 

        static void Main(string[] args)
        {
            WriteLine("Usando IPAdress\n");
            WriteLine("Convertendo IPv4/IPv6\n");

            string enderecoIP = "65.52.128.33";

            IPAddressConversao(enderecoIP);
            ReadLine();

            WriteLine("Criando endereços\n");
            IPAddressCriaEnderecos(enderecoIP);
            ReadLine();
        }


Executando o projeto teremos o resultado abaixo:

 


Na próxima parte do artigo vamos tratar da classe Dns e IPHostEntry.

 

Pegue o projeto completo aqui:   NetCore_IPAdress.zip
 

Ninguém jamais viu a Deus; o Deus unigênito (Jesus), que está no seio do Pai, é quem o revelou.
João 1:17,18

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti