Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр_2_Методы адресации.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
183.3 Кб
Скачать

2. Получение адресов локального узла с помощью классов .Net Framework.

Для получения адресов локального узла можно воспользоваться классами .NET Framework.

Пространство имен System.Net.NetworkInformation содержит классы и методы, позволяющие получить все виды адресов локального узла.

Например, свойство HostName класса IPGlobalProperties возвращает символьное имя локального компьютера.

Ниже приведен пример получения символьного имени узла, его доменного имени и всех физических адресов. (Пример взят из MSDN, язык С#)

public static void ShowNetworkInterfaces()

{

IPGlobalProperties computerProperties=IPGlobalProperties.GetIPGlobalProperties();

Console.WriteLine("Interface information for {0}.{1} ",

computerProperties.HostName, computerProperties.DomainName);

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

if (nics == null || nics.Length < 1)

{

Console.WriteLine("No network interfaces found.");

return;

}

Console.WriteLine("Number of interfaces .......... : {0}", nics.Length);

foreach (NetworkInterface adapter in nics)

{

IPInterfaceProperties properties = adapter.GetIPProperties();

Console.WriteLine();

Console.WriteLine(adapter.Description);

Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length,'='));

Console.WriteLine(" Interface type ... : {0}",adapter.NetworkInterfaceType);

Console.Write(" Physical address ............ : ");

PhysicalAddress address = adapter.GetPhysicalAddress();

byte[] bytes = address.GetAddressBytes();

for(int i = 0; i< bytes.Length; i++)

{

// Display the physical address in hexadecimal.

Console.Write("{0}", bytes[i].ToString("X2"));

// Insert a hyphen after each byte, unless we are at the end of the

// address.

if (i != bytes.Length -1)

{

Console.Write("-");

}

}

Console.WriteLine();

}

}

Класс Dns пространства имен System.Net также содержит методы, позволяющие получить имя локального узла и его IP-адреса.

Метод GetHostName() возвращает строку, содержащую имя локального компьютера.

Метод GetHostAddresses запрашивает у DNS-сервера IP-адреса, связанные с указанным именем узла. Если в качестве имени узла передается пустая строка, этот метод возвращает IPv4-адреса локального узла.

В следующем примере кода из MSDN (язык С#) показано использование метода GetHostAddresses для разрешения IP-адреса в массив типа IPAddress.

string hostname

IPAddress[] ips;

ips = Dns.GetHostAddresses(hostname);

Console.WriteLine("GetHostAddresses({0}) returns:", hostname);

foreach (IPAddress ip in ips)

{

Console.WriteLine(" {0}", ip);

}

2. Работа с uri адресами.

Класс Uri.

Класс Uri из пространства имен System.Net инкапсулирует универсальный идентификатор ресурсов. Он содержит свойства и методы для анализа, сравнения и комбинирования URI.

Объект Uri можно создать, передав конструктору строку URI:

В классе Uri есть несколько статических полей только для чтения, позволяющих получить некоторые широко распространенные схемы.

Uri.UriSchemeFile. Файловая схема используется для доступа к файлам локально или на совместно используемых сетевых ресурсах, для которых могут применяться имена, соответствующие соглашению об универсальном назначении имен (UNC – Universal Naming Convention).

Uri.UriSchemeFtp. Схема ftp используется с протоколом FTP для получения файлов с ftp-сервера и помещения файлов на ftp-сервер.

Uri.UriSchemeHttp, Uri.UriSchemeHttps. Схема http используется с протоколом HTTP. Схема https также применяется с протоколом http, но для защиты информации между прикладным и транспортным уровнями используется Протокол защищенных сокетов SSL.

Uri.UriSchemeMailto. Схема используется для отправки почтовых сообщений.

Uri.UriSchemeNews, Uri.UriSchemeNntp. Схемы применяются для доступа к группам новостей по протоколу NNTP.

В классе Uri есть статические методы для проверки правильности схемы и имени хоста.

Метод UriCheckSchemeName() возвращает true, если имя схемы задано правильно.

Метод UriCheckHostName() используется для проверки, правильную ли строку ввел пользователь для имени хоста. Он не проверяет, существует ли хост с таким именем и доступен ли он. Метод возвращает значение перечисления UriHostNameType, указывающее тип хоста.

Таблица 2 – Тип хоста

Значение UriHostNameType

Описание

Basic

Имя хоста установлено, но его тип неопределен

Dns

Доменное имя

IPv4

IP-адрес для протокола IPv4 (4 байта) в точечно-десятичной нотации

IPv6

IP-адрес для протокола IPv6 (16 байт)

Unknown

Имя хоста содержит недопустимые символы

Свойства класса Uri.

В классе Uri имеются доступные только для чтения свойства, позволяющие обращаться ко всем частям URI. В таблице приведены основные свойства.

Таблица 3 – Свойства класса Uri

Свойство

Описание

AbsoluteUri

Свойство показывает полный URI.

Если указанный номер порта для протокола равен номеру порта по умолчанию, конструктор Uri автоматически его удаляет.

Если конструктору класса Uri передается имя файла, данное свойство автоматически помещает перед ним схему file://

Scheme

Свойство возвращает значение схемы.

Host

Свойство возвращает имя хоста из URI (DNS или IP).

Authority

Свойство показывает номер порта и имя хоста.

Если номер порта равен номеру, используемому протоколом по умолчанию, свойство показывает только имя хоста.

HostNameType

Тип хоста (аналогично UriHostNameType).

Port

Номер порта.

AbsolutePath

Абсолютный путь (начинается после номера порта и заканчивается перед строкой запроса).

LocalPath

Локальный путь. Для протокола HTTP возвращается такое же значение, как и абсолютный путь. Если URI содержит адрес общего сетевого ресурса, то возвращается только локальная часть пути.

Query

Показывает строку запроса, следующую после пути.

PathAndQuery

Показывает путь и строку запроса.

Fragment

Возвращает фрагмент.

Segments

Возвращает массив строк, сформированный из пути.

UserInfo

Позволяет получить имя пользователя.

После создания конструктором экземпляр класса Uri не может изменяться, его свойства доступны только для чтения. Поэтому для динамического изменения URI-адреса можно использовать класс UriBuilder. Его свойства аналогичны свойствам класса Uri, но их значения можно изменять. Однако класс Uri будет работать быстрее.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]