Литмир - Электронная Библиотека
Содержание  
A
A

 char buffer[128];

 if (argc == 1) host = "localhost";

 else host = argv[1];

2. Найдите адрес узла и сообщите об ошибке, если адрес не найден:

 hostinfo = gethostbyname(host);

 if (!host info) {

  fprintf(stderr, "no host: %s\n", host);

  exit(1);

 }

3. Убедитесь, что на компьютере есть сервис

daytime
:

 servinfo = getservbyname("daytime", "tcp");

 if (!servinfo) {

  fprintf(stderr, "no daytime service\n");

  exit(1);

 }

 printf("daytime port is %d\n", ntohs(servinfo->s_port));

4. Создайте сокет:

 sockfd = socket(AF_INET, SOCK_STREAM, 0);

5. Сформируйте адрес для соединения:

 address.sin_family = AF_INET;

 address.sin_port = servinfo->s_port;

 address.sin_addr = *(struct in_addr *)*hostinfo->h_addr_list;

 len = sizeof(address);

6. Затем подключитесь и получите информацию:

 result = connect(sockfd, (struct sockaddr *)&address, len);

 if (result == -1) {

  perror("oops: getdate");

  exit(1);

 }

 result = read(sockfd, buffer, sizeof(buffer));

 buffer[result] = '\0';

 printf("read %d bytes: %s", result, buffer);

 close(sockfd);

 exit(0);

}

Вы можете применять программу

getdate
для получения времени суток с любого известного узла сети.

$ <b>./getdate localhost</b>

daytime port is 13

read 26 bytes: 24 JUN 2007 06:03:03 BST

$

Если вы получаете сообщение об ошибке, такое как

oops: getdate: Connection refused

или

oops: getdate: No such file or directory

причина может быть в том, что на компьютере, к которому вы подключаетесь, не включен сервис

daytime
. Такое поведение стало стандартным для большинства современных систем Linux. В следующем разделе вы увидите, как включать этот и другие сервисы.

Как это работает

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

daytime
определяется функцией сетевой базы данных
getservbyname
, которая возвращает сведения о сетевых сервисах таким же способом, как и при получении информации об узле сети. Программа
getdate
пытается соединиться с адресом, который указан первым в списке дополнительных адресов заданного узла. Если соединение успешно, программа считывает сведения, возвращаемые сервисом daytime, символьную строку, содержащую системные дату и время.

Интернет-демон (xinetd/inetd)

Системы UNIX, предоставляющие ряд сетевых сервисов, зачастую делают это с помощью суперсервера. Эта программа (интернет-демон xinetd или inetd) ожидает одновременно запросы на соединения с множеством адресов портов. Когда клиент подключается к сервису, программа-демон запускает соответствующий сервер. При таком подходе серверам не нужно работать постоянно, они могут запускаться по требованию.

Примечание

В современных системах Linux роль интернет-демона исполняет программа xinetd. Она заменила оригинальную UNIX-программу inetd, которую вы все еще можете встретить в более ранних системах Linux и других UNIX-подобных системах.

Программа xinetd обычно настраивается с помощью пользовательского графического интерфейса для управления сетевыми сервисами, но вы можете изменять и непосредственно файлы конфигурации программы. К ним относятся файл /etc/xinetd.conf и файлы в каталоге /etc/xinetd.d.

У каждого сервиса, предоставляемого программой xinetd, есть файл конфигурации в каталоге /etc/xinetd.d. Программа xinetd считает все эти файлы конфигурации во время запуска и повторно при получении соответствующей команды.

Далее приведена пара примеров файлов конфигурации xinetd, первый из них для сервиса

daytime
.

# По умолчанию: отключен

# Описание: сервер daytime. Это версия tcp.

service daytime

{

 socket_type = stream

 protocol    = tcp

 wait        = no

 user        = root

 type        = INTERNAL

 id          = daytime-stream

 FLAGS       = IPv6 IPv4

}

Следующий файл конфигурации предназначен для сервиса передачи файлов.

# По умолчанию: отключен

# Описание:

# FTP-сервер vsftpd обслуживает FTP-соединения. Он использует

# для аутентификации обычные, незашифрованные имена пользователей и

# пароли, vsftpd спроектирован для безопасной работы.

#

# Примечание: этот файл содержит конфигурацию запуска vsftpd для xinetd.

# Файл конфигурации самой программы vsftpd находится в

# /etc/vsftpd.conf

service ftp {

# server_args =

# log_on_success += DURATION USERID

# log_on_failure += USERID

# nice = 10

 socket_type = stream

 protocol    = tcp

 wait        = no

271
{"b":"285844","o":1}