Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

4 {

5 char *ptr, **pptr;

6 char str[INET_ADDRSTRLEN];

7 struct hostent *hptr;

8 while (--argc > 0) {

9 ptr = *++argv;

10 if ((hptr = gethostbyname(ptr)) == NULL) {

11 err_msg("gethostbyname error for host, %s: %s",

12 ptr, hstrerror(h_errno));

13 continue;

14 }

15 printf("official hostname: %s\n", hptr->h_name);

16 for (pptr = hptr->h_aliases; *pptr != NULL; pptr++)

17 printf("\talias: %s\n", *pptr);

18 switch (hptr->h_addrtype) {

19 case AF_INET:

20 pptr = hptr->h_addr_list;

21 for (; *pptr != NULL; pptr++)

22 printf("\taddress: %s\n",

23 Inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));

24 break;

25 default:

26 err_ret("unknown address type");

27 break;

28 }

29 }

30 exit(0);

31 }

8-14
Функция
gethostbyname
вызывается для каждого аргумента командной строки.

15-17
Выводится каноническое имя узла, за которым идет список альтернативных имен.

18-24
Переменная
pptr
указывает на массив указателей на индивидуальные адреса. Для каждого адреса мы вызываем функцию
inet_ntop
и выводим возвращаемую строку.

Сначала мы выполняем программу с именем нашего узла

aix
, у которого имеется только один адрес IPv4:

freebsd % hostent aix

official hostname: aix.unpbook.com

address: 192.168 42.2

Обратите внимание, что официальное имя узла — это FQDN. Кроме того, хотя у узла имеется адрес IPv6, возвращается только адрес IPv4. Следующим будет веб-сервер с несколькими адресами IPv4:

solaris % hostent cnn.com

official hostname: cnn.com

address: 64.236.16.20

address: 64.236.16.52

address: 64.236 16.84

address: 64.236.16.116

address: 64.236.24.4

address: 64.236.24.12

address: 64.236.24.20

address: 64.236.24.28

Далее идет имя, представленное в разделе 11.2 как имя с записью типа CNAME:

solaris % hostent www

official hostname: linux.unpbook.com

alias: www.unpbook.com

address: 206.168.112.219

Как мы и предполагали, официальное имя узла отличается от нашего аргумента командной строки.

Чтобы увидеть строки ошибок, возвращаемые функцией

hstrerror
, мы сначала задаем несуществующее имя узла, а затем имя, имеющее только запись типа MX:

solaris % hostent nosuchname.invalid

gethostbyname error for host: nosuchname.invalid: Unknown host

  • Читать дальше
  • 1
  • ...
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: