Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 146

Автор Уильям БтивСнс

ПослС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ сообщСниС записываСтся Π² сокСт.

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

19-30 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° считываСт сообщСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print_sadb_msg. ПослСднСС сообщСниС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ порядковый Π½ΠΎΠΌΠ΅Ρ€ 0, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ Β«ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°Β».

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ сокСта PF_KEY

31 ΠœΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сокСт управлСния ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

38-48 ΠΠ° долю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main остаСтся Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” Ρ‚ΠΈΠΏ соглашСний ΠΎ бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΈΠ· Π±Π°Π·Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏ Ρ€Π°Π²Π΅Π½ SADB_SATYPE_UNSPEC. Π£ΠΊΠ°Π·Π°Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ записи. Наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΡˆΡƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getsatypebyname, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° (константу) ΠΏΠΎ Π΅Π³ΠΎ названию.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sadb_dump

49 ΠΠ°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sadb_dump, которая ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° описана.

ΠŸΡ€ΠΎΠ±Π½Ρ‹ΠΉ запуск

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π°ΠΌΠΏΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… бСзопасности Π² систСмС с двумя статичСскими соглашСниями ΠΎ бСзопасности.

macosx % dump Sending dump message:

SADB Message Dump, errno 0, satype Unspecified, seq 0, pid 20623

Messages returned:

SADB Message Dump, errno 0. satype IPsec AH, seq 1, pid 20623

SA: SPI=258 Replay Window=0 State=Mature

Authentication Algorithm: HMAC-MD5

Encryption Algorithm: None

[unknown extension 19]

Current lifetime:

0 allocations, 0 bytes

added at Sun May 18 16:28:11 2003, never used

Source address: 2.3.4.5/128 (IP proto 255)

Dest address: 6.7.8.9/128 (IP proto 255)

Authentication key. 128 bits: 0x20202020202020200202020202020202

SADB Message Dump, errno 0, satype IPsec AH, seq 0, pid 20623

SA: SPI=257 Replay Window=0 State=Mature

Authentication Algorithm: HMAC-MD5

Encryption Algorithm: None

[unknown extension 19]

Current lifetime:

0 allocations, 0 bytes

added at Sun May 18 16:26:24 2003, never used

Source address: 1.2.3.4/128 (IP proto 255)

Dest address: 5.6.7.8/128 (IP proto 255)

Authentication key, 128 bits: 0x10101010101010100101010101010101

19.4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ статичСского соглашСния ΠΎ бСзопасности

НаиболСС прямолинСйным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ добавлСния соглашСния ΠΎ бСзопасности Π² Π±Π°Π·Ρƒ являСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния SADB_ADD с Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ПослСднСС затрудняСт смСну ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, которая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для прСдотвращСния криптоаналитичСских Π°Ρ‚Π°ΠΊ, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ настройку. Элис ΠΈ Π‘ΠΎΠ± Π΄ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎ ΠΊΠ»ΡŽΡ‡Π°Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… Π±Π΅Π· использования Π»ΠΈΠ½ΠΈΠΉ связи. ΠœΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий ΠΏΠΎ созданию ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ сообщСния SADB_ADD.

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ SADB_ADD обязано ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ: соглашСниС ΠΎ бСзопасности, адрСс ΠΈ ΠΊΠ»ΡŽΡ‡. Оно ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ: Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ, Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ваТности (sensitivity). Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ опишСм ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ SA описываСтся структурой sadb_sa, прСдставлСнной Π² листингС 19.3.

Листинг 19.3. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ SA

struct sadb_sa {

 u_int16_t sadb_sa_len;     /* Π΄Π»ΠΈΠ½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ / 8 */

 u_int16_t sadb_sa_exttype; /* SADB_EXT_SA */

 u_int32_t sadb_sa_spi;     /* индСкс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² бСзопасности (SPI) */

 u_int8_t  sadb_sa_replay;  /* Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π½ΡƒΠ»ΡŒ */

 u_int8_t  sadb_sa_state;   /* состояниС SA. см. Ρ‚Π°Π±Π». 19.4 */

 u_int8_t  sadb_sa_auth;    /* Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, см. Ρ‚Π°Π±Π». 19.5 */

 u_int8_t  sadb_sa_encrypt; /* Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, см. Ρ‚Π°Π±Π». 19.5 */

 u_int32_t sadb_sa_flags;   /* Ρ„Π»Π°Π³ΠΈ */

};


Π’Π°Π±Π»ΠΈΡ†Π° 19.4. ИспользованиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ

БостояниС SA ОписаниС Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования SADB_SASTATE_LARVAL Π’ процСссС создания НСт SADB_SASTATE_MATURE ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сформированноС Π”Π° SADB_SASTATE_DYING ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΎ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° врСмя ΠΆΠΈΠ·Π½ΠΈ Π”Π° SADB_SASTATE_DEAD ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΎ ТСсткоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° врСмя ΠΆΠΈΠ·Π½ΠΈ НСт

Π’Π°Π±Π»ΠΈΡ†Π° 19.5. Алгоритмы Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

Алгоритм ОписаниС Бсылка SADB_AALG_NONE Π‘Π΅Π· Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ SADB_AALG_MD5HMAC HMAC-MD5-96 RFC 2403 SADB_AALG_SHA1HMAC HMAC-SHA-1-96 RFC 2404 SADB_EALG_NONE Π‘Π΅Π· ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ SADB_EALG_DESCBC DES-CBC RFC 2405 SADB_EALG_3DESCBC 3DES-CBC RFC 1851 SADB_EALG_NULL NULL RFC 2410

ПолС sadb_sa_spi содСрТит индСкс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² бСзопасности (security parameters index, SPI). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вмСстС с адрСсом получатСля ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, IPSec АН) ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ соглашСниС ΠΎ бСзопасности. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SPI ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска соглашСния, относящСгося ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ помСщаСтся Π² Π½Π΅Π³ΠΎ для использования ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ. Никаких ΠΈΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ SPI Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, поэтому Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² случайном порядкС ΠΈΠ»ΠΈ с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ³ΠΎ собСсСдником. ПолС sadb_sa_replay Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ статичСскиС соглашСния ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ Π½Π΅ Π΄Π°ΡŽΡ‚ возмоТности Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ эту Π·Π°Ρ‰ΠΈΡ‚Ρƒ, ΠΌΡ‹ устанавливаСм ΠΏΠΎΠ»Π΅ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля sadb_sa_state мСняСтся Π² зависимости ΠΎΡ‚ состояния динамичСски создаваСмых соглашСний ΠΎ бСзопасности (см. Ρ‚Π°Π±Π». 19.4). Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ соглашСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² состоянии SADB_SASTATE_MATURE. Π‘ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ состояниями ΠΌΡ‹ встрСтимся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 19.5.

Поля 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.