Сетевое программирование в .NET. Расшифровка IP-адреса (IP address specification). Обеспечение надежности доставки пакетов, страница 19

¨  Any — представляет собой любой из IP-адресов локальной сети,

¨  Broadcast — представляет широковещательный адрес локальной сети (адрес подсети):

¨  Loopback — представляет адрес заглушки (имитации сетевой карты), используемой для отладки приложений,

¨  None — адрес, имитирующий отсутствие в системе сетевого интерфейса.

Console.WriteLine("\n\nSpecial Addresses" + line.Substring(0, 18) +

"\n\n{0,-20}: {1}\n{2,-20}: {3}\n{4,-20}: {5}\n{6,-20}: {7}",

"Broadcast address", IPAddress.Broadcast,

"None address", IPAddress.None,

"Any address", IPAddress.Any,

"Test Parse address", IPAddress.Parse("192.168.1.1"));

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

foreach (IPAddress addr in host.AddressList)

{

IPEndPoint point = new IPEndPoint(addr, 80);

Console.WriteLine("\n{0,-20}: {1}\n{2,-20}: {3}\n{4,-20}: {5}",

"Local IP address", addr,

"Address Family", addr.AddressFamily,

"IP End Point", point);

Console.Write("Address Bytes       : ");

foreach (byte b in addr.GetAddressBytes())

Console.Write(b + " | ");

Console.Write("\n\nLoopback address is ");

if (addr.Equals(IPAddress.Loopback))

Console.WriteLine("the same as local address\n");

else

Console.WriteLine("different from local address\n");

if (addr.AddressFamily.ToString() == ProtocolFamily.InterNetworkV6.ToString())

Console.WriteLine("Scope Id: " + addr.ScopeId);

}

if (IPAddress.IsLoopback(IPAddress.Loopback))

Console.WriteLine("{0,-20}: {1}", "Loopback address", IPAddress.Loopback);

else

Console.WriteLine("Error obtaining the loopback address");

short nw = (short)0x1234;

Console.WriteLine("\nTest Byte Order" + line.Substring(0, 16) +

"\n\n{0,-20}: {1:x}\n{2,-20}: {3:x}\n{4,-20}: {5:x}\n",

"Network Byte order", nw,

"Host Byte order", IPAddress.NetworkToHostOrder(nw),

"Back to Network", IPAddress.HostToNetworkOrder(IPAddress.NetworkToHostOrder(nw)));

IPAddress a;

if (IPAddress.TryParse("127.0.0.1", out a))

Console.WriteLine("\nTest TryParse" + line.Substring(0, 14) + "\n{0,-20}: {1}\n",

"Valid IP-address", a);

¨  Класс IPHostEntry ассоциирует DNS-имя (Domain Name System) хост-компьютера с массивом его альтернативных имен (aliases—псевдонимов) и массивом соответствующих им IP-адресов.

¨  Метод NetworkToHostOrder класса IPAddress выполняет ту же роль, что и функция htons в предыдущем примере—меняет порядок байтов (big-endian, little-endian).

¨  Класс IPEndPoint инкапсулирует функциональность пары (сетевой адрес, порт), он содержит те же данные, что и структура sockaddr_in в предыдущем примере.

Internet Control Message Protocol (ICMP)—это множество сообщений, используемых для получения отчетов об ошибках передачи пакетов информации. Существует два типа таких протоколов: версии 4 (IPv4) и версии 6 (IPv6). Свойство AddressFamily класса IPAddress позволяет определить используемый сервером тип протокола. Если он соответствует версии 4 (IPv4), то этому свойству соответствует строка текста: InterNetwork, если включена поддержка версии 6 (IPv6), то строка имеет вид: InterNetworkV6.

При выводе сетевого адреса автоматически срабатывает метод ToString(), который выбирает один из стандартных форматов. Если в системе установлен протокол IPv4, то сетевой адрес получает свой формат (четверка чисел, разделяемых точкой—dotted-quad notation), если установлен протокол IPv6, то используется другой формат (шестнадцатиричные числа, разделяемые двоеточием).

Свойства адаптеров