UNIX: разработка сетевых приложений
Часть 212 из 399 Информация о книге
Таблица 19.2. Типы соглашений о безопасности
Тип соглашения Описание SADB_SATYPE_AH Аутентифицирующий заголовок IPSec SADB_SATYPE_ESP ESP IPSec SADB_SATYPE_MIP Идентификация мобильных пользователей (Mobile IP) SADB_SATYPE_OSPFV2 Аутентификация OSPFv2 SADB_SATYPE_RIPV2 Аутентификация RIPv2 SADB_SATYPE_RSVP Аутентификация RSVP SADB_SATYPE_UNSPECIFIED He определен Таблица 19.3. Типы расширений PF_KEY
Тип заголовка расширения Описание Структура SADB_EXT_ADDRESS_DST Адрес получателя SA sadb_address SADB_EXT_ADDRESS_PROXY Адрес прокси-сервера SA sadb_address SADB_EXT_ADDRESS_SRC Адрес отправителя SA sadb_address SADB_EXT_IDENTITY_DST Личность получателя sadb_ident SADB_EXT_IDENTITY_SRC Личность отправителя sadb_ident SADB_EXT_KEY_AUTH Ключ аутентификации sadb_key SADB_EXT_KEY_ENCRYPT Ключ шифрования sadb_key SADB_EXT_LIFETIME_CURRENT Текущее время жизни SA sadb_lifetime SADB_EXT_LIFETIME_HARD Жесткое ограничение на время жизни SA sadb_lifetime SADB_EXT_LIFETIME_SOFT Гибкое ограничение на время жизни SA sadb_lifetime SADB_EXT_PROPOSAL Предлагаемая ситуация sadb_prop SADB_EXT_SA Соглашение о безопасности sadb_sa SADB_EXT_SENSITIVITY Важность SA sadb_sens SADB_EXT_SPIRANGE Диапазон допустимых значений SPI sadb_spirange SADB_EXT_SUPPORTED_AUTH Поддерживаемые алгоритмы аутентификации sadb_supported SADB_EXT_SUPPORTED_ENCRYPT Поддерживаемые алгоритмы шифрования sadb_supported Рассмотрим несколько примеров сообщений и расширений, используемых в типичных операциях с сокетами управления ключами.
19.3. Дамп базы соглашений о безопасности
Для дампа текущей базы соглашений о безопасности используется сообщение
. Это самое простое из сообщений, поскольку оно не требует никаких расширений, а состоит только из 16-байтового заголовкаSADB_DUMP. Когда процесс отправляет сообщениеsadb_msgядру через сокет управления ключами, ядро отвечает последовательностью сообщенийSADB_DUMPпо тому же сокету. В каждом сообщении содержится одна запись базы SADB. Конец последовательности обозначается сообщением со значением 0 в полеSADB_DUMP.sadb_msg_seqПоле
позволяет запросить только записи определенного типа. Значения этого поля следует брать из табл. 19.2. При указании значенияsadb_msg_satypeвозвращаются все записи базы. Не все типы соглашений о безопасности поддерживаются всеми реализациями. Реализация KAME поддерживает только соглашения, относящиеся к IPSec (SADB_SATYPE_UNSPECиSADB_SATYPE_AH), поэтому при попытке получить дамп записейSADB_SATYPE_ESPбудет возвращена ошибкаSADB_SATYPE_RIPV2. Если же записей, относящихся к запрошенному типу, в таблице нет (но они поддерживаются), функция возвращает ошибкуEINVAL.ENOENTПрограмма, получающая записи из базы данных безопасности, приведена в листинге 19.2.
Листинг 19.2. Дамп базы соглашений о безопасности
//key/dump.c1 void2 sadb_dump(int type)3 {4 int s;5 char buf[4096];6 struct sadb_msg msg;7 int goteof;8 s = Socket(PF_KEY, SOCK_RAW, PF_KEY_V2);9 /* формирование и отправка запроса SADB_DUMP */10 bzero(&msg, sizeof(msg));11 msg.sadb_msg_version = PF_KEY_V2;12 msg.sadb_msg_type = SADB_DUMP;13 msg.sadb_msg_satype = type;14 msg.sadb_msg_len = sizeof(msg) / 8;15 msg.sadb_msg_pid = getpid();16 printf("Sending dump message:\n");17 print_sadb_msg(&msg, sizeof(msg));18 Write(s, &msg, sizeof(msg));19 printf("\nMessages returned:\n");20 /* считывание и вывод всех ответов SADB_DUMP */21 goteof = 0;22 while (goteof == 0) {