
- •Лабораторная работа № 2 методы адресации узлов сети Цель работы
- •Постановка задачи
- •Краткие теоретические сведения
- •1. Методы адресации узлов сети.
- •2. Аппаратные адреса.
- •3. Числовые-составные адреса. Ip-адреса
- •4. Символьные адреса. Dns-имена
- •Методические указания
- •1. Получение адресов локального узла с помощью функций api Windows.
- •2. Получение адресов локального узла с помощью классов .Net Framework.
- •2. Работа с uri адресами.
- •Задания на лабораторную работу
- •Контрольные вопросы
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 будет работать быстрее.