Чтение онлайн

на главную - закладки

Жанры

UNIX: разработка сетевых приложений
Шрифт:

Поскольку мы имеем дело с сервером, определяем флаги

NI_NUMERICHOST
и
NI_NUMERICSERV
, чтобы избежать поиска в DNS и
/etc/services
.

11.9. Первая проблема состоит в том, что второй сервер не может связаться (

bind
) с тем же портом, что и первый сервер, поскольку не установлен параметр сокета
SO_REUSEADDR
. Простейший способ справиться с такой ситуацией — создать копию функции
udp_server
, переименовать ее в
udp_server_reuseaddr
, сделать так, чтобы она установила параметр сокета, и вызывать ее в сервере.

11.10. Когда

клиент выводит
Trying 206.62.226.35...
, функция
gethostname
возвращает IP-адрес. Пауза перед этим выводом означает, что распознаватель ищет имя узла. Вывод
Connected to bsdi.unpbook.com.
значит, что функция
connect
возвратила управление. Пауза между этими двумя выводами говорит о том, что функция connect пытается установить соединение.

Глава 12

12.1. Далее приведен сокращенный листинг. Обратите внимание, что клиент FTP в системе

freebsd
всегда пытается использовать команду
EPRT
(независимо от версии IP), но если это не срабатывает, то он пробует команду
PORT
.

freebsd % ftp aix-4

Connected to aix-4.unpbook.com.

220 aix FTP server ...

...

230 Guest login ok. access restrictions apply.

ftp> debug

Debugging on (debug=1).

ftp> passive

Passive mode: off; fallback to active mode= off

ftp> dir

– --> EPRT |1|192 168.42.1|50484|

500 'EPRT |1|192.168.42.1|50484|' command not understood.

disabling epsv4 for this connection

– --> PORT 192.168.42.1.197.52

200 PORT command successful.

– --> LIST

150 Opening ASCII mode data connection for /bin/ls

...

freebsd % ftp ftp.kame.net

Trying 2001.200:0:4819:203:47ff:fea5:3085...

Connected to orange.kame.net.

220 orange.kame.net FTP server ...

...

230 Guest login ok. access restrictions apply.

ftp> debug

Debugging on (debug=1).

ftp> passive

Passive mode: off; fallback to active mode: off.

ftp> dir

– --> EPRT |2|3ffe:b80:3:9ad1::2|50480|

200 EPRT command successful

– --> LIST

150 Opening ASCII mode data connection for '/bin/ls'.

Глава 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-адрес и номер порта клиента, но оставляет саму дейтаграмму для чтения серверу.

Глава 14

14.1. Если не установлен обработчик, первый вызов функции

signal
будет возвращать значение
SIG_DFL
, а вызов функции
signal
для восстановления обработчика просто вернет его в исходное состояние.

14.3. Приведем цикл

for
:

for (;;) {

if ((n = Recv(sockfd, recvline, MAXLINE, MSG_PEEK)) == 0)

break; /* сервер закрыл соединение */

Ioctl(sockfd, FIONREAD, &npend);

printf("%d bytes from PEEK, %d bytes pending\n", n, npend);

n = Read(sockfd, recvline, MAXLINE);

recvline[n] = 0; /* завершающий нуль */

Fputs(recvline, stdout);

}

14.4. Данные продолжают выводиться, поскольку выход из функции

main
— это то же самое, что и возврат из этой функции. Функция
main
вызывается программой запуска на языке С следующим образом:

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

Шесть принцев для мисс Недотроги

Суббота Светлана
3. Мисс Недотрога
Фантастика:
фэнтези
7.92
рейтинг книги
Шесть принцев для мисс Недотроги

Брачный сезон. Сирота

Свободина Виктория
Любовные романы:
любовно-фантастические романы
7.89
рейтинг книги
Брачный сезон. Сирота

Выстрел на Большой Морской

Свечин Николай
4. Сыщик Его Величества
Детективы:
исторические детективы
полицейские детективы
8.64
рейтинг книги
Выстрел на Большой Морской

Адаптация

Уленгов Юрий
2. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Адаптация

Новый Рал 4

Северный Лис
4. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 4

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Имперский Курьер. Том 3

Бо Вова
3. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 3

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Ротмистр Гордеев 3

Дашко Дмитрий
3. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 3

Единственная для невольника

Новикова Татьяна О.
Любовные романы:
любовно-фантастические романы
5.67
рейтинг книги
Единственная для невольника

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII