Шрифт:
Таблица 11.5. Четыре типа данных, относящихся к сетям
Тип данных | Файл | Структура | Функции поиска по ключу |
---|---|---|---|
Узлы | /etc/hosts | Hostent | gethostbyaddr, gethostbyname |
Сети | /etc/networks | Netent | getnetbyaddr, getnetbyname |
Протоколы | /etc/protocols | Protoent | getprotobyname, getprotobynumber |
Службы | /etc/services | Servent | getservbyname, getservbyport |
Как это применяется, если используется DNS? Прежде всего, с помощью DNS возможен доступ только к информации об узле и о сети. Информация о протоколе и службах всегда считывается из соответствующего файла. Ранее в этой главе мы отмечали (см. подраздел «Альтернативы DNS»), что в разных реализациях отличаются способы, с помощью которых администратор определяет, что именно использовать для получения информации об узле и сети — DNS или файл.
Далее, если DNS используется для получения информации об узле и о сети, имеют смысл только функции поиска по ключу. Используя, например, функцию
Хотя информацию о сети можно сделать доступной с помощью DNS, очень немногие пользуются этим. На с. 347-348 [1] рассказывается об этой возможности. Однако обычно администраторы создают и обслуживают файл /etc/networks, используемый вместо DNS. Программа netstat с параметром -i использует этот файл, если он есть, и выводит имя каждой сети. Однако бесклассовая адресация (см. раздел А.4) делает эти функции бесполезными, а поскольку они не поддерживают IPv6, новые приложения не должны использовать их.
11.22. Резюме
Набор функций, вызываемых приложением для преобразования имени узла в IP- адрес и обратно, называется распознавателем. Две функции,
Для работы с именами служб и номерами портов широко используется функция
Альтернативой DNS, которую мы не упомянули, является непосредственный вызов функций распознавателя вместо использования функций
Упражнения
1. Измените программу, представленную в листинге 11.1, так, чтобы для каждого возвращаемого адреса вызывалась функция
2. Устраните проблему, показанную в предыдущем упражнении.
3. Запустите программу, показанную в листинге 11.4, задав имя службы
4. Запустите программу, показанную в листинге 11.4, задав IP-адрес в точечно- десятичной записи в качестве имени узла. Допускает ли это ваш распознаватель? Измените листинг 11.4, чтобы разрешить IP-адрес в виде строки десятичных чисел с точками в качестве имени узла и строку с десятичным номером порта в качестве имени службы. В каком порядке должно выполняться тестирование IP-адреса для строки в точечно-десятичной записи и для имени?
5. Измените программу в листинге 11.4 так, чтобы можно было работать либо с IPv4, либо с IPv6.
6. Измените программу в листинге 8.5 так, чтобы сделать запрос DNS, и сравните возвращаемый IP-адрес со всеми IP-адресами узла получателя, то есть вызовите функцию
7. Измените листинг 11.6, чтобы вызвать функцию