Книга: UNIX: разработка сетевых приложений
Глава 13
Глава 13
13.1. Все сообщения об ошибках, даже ошибка загрузки, такая как неправильный аргумент командной строки, должны сохраняться в файлах журнала с помощью функции syslog
.
13.2. TCP-версии серверов echo
, discard
и chargen
запускаются как дочерние процессы, после того как демон inetd
вызовет функцию fork
, поскольку эти три сервера работают, пока клиент не прервет соединение. Два других TCP-сервера, time
и daytime
, не требуют использования функции fork
, поскольку эти службы легко реализовать (получить текущую дату, преобразовать ее, записать и закрыть соединение). Эти два сервера обрабатываются непосредственно демоном inetd
. Все пять UDP-служб обрабатываются без использования функции fork
, поскольку каждая из них генерирует единственную дейтаграмму в ответ на клиентскую дейтаграмму, которая запускает эту службу. Эти пять служб обрабатываются напрямую демоном inetd
.
13.3. Это известная атака типа «отказ в обслуживании» [18]. Первая дейтаграмма с порта 7 заставляет сервер chargen
отправить дейтаграмму обратно на порт 7. На эту дейтаграмму приходит эхо-ответ, и серверу chargen
посылается другая дейтаграмма. Происходит зацикливание. Одним из решений, реализованным в системе BSD/OS, является игнорирование дейтаграмм, направленных любому внутреннему серверу, если номер порта отправителя пришедшей дейтаграммы принадлежит одному из внутренних серверов. Другим решением может быть запрещение этих внутренних служб — либо с помощью демона inetd
на каждом узле, либо на маршрутизаторе, связывающем внутреннюю сеть организации с Интернетом.
13.4. IP-адрес и номер порта клиента могут быть получены из структуры адреса сокета, заполняемой функцией accept
.
Причина, по которой демон inetd
не делает этого для UDP-сокета, состоит в том, что чтение дейтаграмм (recvfrom
) осуществляется с помощью функции exec
сервером, а не самим демоном inetd
.
Демон inetd
может считать дейтаграмму с флагом MSG_PEEK
(см. раздел 14.7), только чтобы получить IP-адрес и номер порта клиента, но оставляет саму дейтаграмму для чтения серверу.
- Graphical Process and System Management Tools
- Манифест Хранителей огня
- 6.2.1. Объекты как ассоциативные массивы
- Операции
- 14.4. Функции readv и writev
- Сканирование
- Ссылающиеся на себя отношения
- Поддержка Fire Wire 400
- Сравнение значений
- Пример: подключение клиента к серверу
- 15.8.2. Определение геометрии элемента
- Конкуренты наготове