Уильям Стивенс - UNIX - разработка сетевых приложений

Здесь есть возможность читать онлайн «Уильям Стивенс - UNIX - разработка сетевых приложений» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2007, ISBN: 2007, Издательство: Питер, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX: разработка сетевых приложений: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «UNIX: разработка сетевых приложений»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

UNIX: разработка сетевых приложений — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX: разработка сетевых приложений», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Поля sadb_sa_authи sadb_sa_encryptопределяют алгоритмы аутентификации и шифрования для данного соглашения. Возможные значения этих полей перечислены в табл. 19.5. Единственное значение поля sadb_sa_flagsопределено в POSIX как константа SADB_SAFLAGS_PFS. Этот флаг требует совершенной безопасности пересылки ( perfect forward security ), которая состоит в том утверждении, что значение ключа не должно зависеть от предыдущих подключений или какого-либо главного ключа. Флаг используется при запросе ключей у приложения, заведующего ими, но не при создании статических соглашений.

Следующее обязательное расширение команды SADB_ADDдолжно содержать адреса отправителя и получателя, задаваемые константами SADB_EXT_ADDRESS_SRCи SADB_EXT_ADDRESS_DST. При необходимости может быть указан адрес прокси-сервера SADB_EXT_ADDRESS_PROXY. Подробнее об обработке адресов прокси-серверов вы можете прочесть в RFC 2367 [73]. Адреса задаются в структуре sadb_address, представленной в листинге 19.4. Поле sadb_address_exttypeопределяет тип адреса (отправителя, получателя или прокси-сервера). Поле sadb_address_protoпозволяет выбрать протокол IP или произвольный протокол (значение 0). Поле sadb_address_prefixlenописывает значимый префикс адреса. Это позволяет использовать одно соглашение для множества адресов. За структурой sadb_addressследует структура sockaddrсоответствующего семейства (например, sockaddr_inили sockaddr_in6). Номер порта из структуры sockaddrиспользуется только в том случае, если поле sadb_address_protoзадает протокол, поддерживающий номера портов (например, IPPROTO_TCP).

Листинг 19.4. Структура sadb_address

struct sadb_address {

u_int16_t sadb_address_len; /* длина расширения с адресом / 8 */

u_int16_t sadb_address_exttype; /* SADB_EXT_ADDRESS_{SRC,DST,PROXY} */

u_int8_t sadb_address_proto; /* протокол IP или 0 (любой) */

u_int8_t sadb_address_prefixlen; /* # значащих битов адреса */

u_int16_t sadb_address_reserved; /* зарезервирован для послед. использования */

};

/* далее следует структура sockaddr соответствующего семейства */

Завершают список обязательных расширений сообщения SADB_ADDключи аутентификации и шифрования — расширения SADB_EXT_KEY_AUTHи SADB_EXT_KEY_ENCRYPT, описываемые структурой sadb_key(листинг 19.5). Поле sadb_key_exttypeопределяет тип ключа (ключ аутентификации или шифрования), поле sadb_key_bitsзадает длину ключа в битах, а сам ключ следует за структурой sadb_key.

Листинг 19.5. Структура sadb_key

struct sadb_key {

u_int16_t sadb_key_len; /* длина расширения с ключом / 8 */

u_int16_t sadb_key_exttype; /* SADB_EXT_KEY_{AUTH,ENCRYPT} */

u_int16_t sadb_key_bits; /* # битов в ключе */

u_int16_t sadb_key_reserved; /* зарезервировано для расширения */

};

/* далее следуют данные о самом ключе */

Программа, добавляющая статическую запись в базу данных безопасности, представлена в листинге 19.6.

Листинг 19.6. Программа, использующая команду SADB_ADD

//key/add с

33 void

34 sadb_add(struct sockaddr *src, struct sockaddr *dst, int type, int alg,

35 int spi, int keybits, unsigned char *keydata)

36 {

37 int s;

38 char buf[4096], *p; /* XXX */

39 struct sadb_msg *msg;

40 struct sadb_sa *saext;

41 struct sadb_address *addrext;

42 struct sadb_key *keyext;

43 int len;

44 int mypid;

45 s = Socket(PF_KEY, SOCK_RAW, PF_KEY_V2);

46 mypid = getpid();

47 /* Формирование и запись запроса SADB_ADD */

48 bzero(&buf, sizeof(buf));

49 p = buf;

50 msg = (struct sadb_msg*)p;

51 msg->sadb_msg_version = PF_KEY_V2;

52 msg->sadb_msg_type = SADB_ADD;

53 msg->sadb_msg_satype = type;

54 msg->sadb_msg_pid = getpid();

55 len = sizeof(*msg);

56 p += sizeof(*msg);

57 saext = (struct sadb_sa*)p;

58 saext->sadb_sa_len = sizeof(*saext) / 8;

59 saext->sadb_sa_exttype = SADB_EXT_SA;

60 saext->sadb_sa_spi = htonl(spi);

61 saext->sadb_sa_replay = 0; /* статические ключи не защищают от повтора */

62 saext->sadb_sa_state = SADB_SASTATE_MATURE;

63 saext->sadb_sa_auth = alg;

64 saext->sadb_sa_encrypt = SADB_EALG_NONE;

65 saext->sadb_sa_flags = 0;

66 len += saext->sadb_sa_len * 8;

67 p += saext->sadb_sa_len * 8;

68 addrext = (struct sadb_address*)p;

69 addrext->sadb_address_len = (sizeof(*addrext) + salen(src) + 7) / 8;

70 addrext->sadb_address_exttype = SADB_EXT_ADDRESS_SRC;

71 addrext->sadb_address_proto = 0; /* any protocol */

72 addrext->sadb_address_prefixlen = prefix_all(src);

73 addrext->sadb_address_reserved = 0;

74 memcpy(addrext + 1, src, salen(src));

75 len += addrext->sadb_address_len * 8,

76 p += addrext->sadb_address_len * 8;

77 addrext = (struct sadb_address*)p;

78 addrext->sadb_address_len = (sizeof(*addrext) + salen(dst) + 7) / 8;

79 addrext->sadb_address_exttype = SADB_EXT_ADDRESS_DST;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «UNIX: разработка сетевых приложений»

Представляем Вашему вниманию похожие книги на «UNIX: разработка сетевых приложений» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «UNIX: разработка сетевых приложений»

Обсуждение, отзывы о книге «UNIX: разработка сетевых приложений» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x