Π’Π°Π±Π»ΠΈΡΠ° 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. ΠΠ°ΠΌΠΏ Π±Π°Π·Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
ΠΠ»Ρ Π΄Π°ΠΌΠΏΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π±Π°Π·Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ SADB_DUMP. ΠΡΠΎ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, Π° ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· 16-Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° sadb_msg. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ SADB_DUMP ΡΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ°ΠΌΠΈ, ΡΠ΄ΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ SADB_DUMP ΠΏΠΎ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΎΠΊΠ΅ΡΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΎΠ΄Π½Π° Π·Π°ΠΏΠΈΡΡ Π±Π°Π·Ρ SADB. ΠΠΎΠ½Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0 Π² ΠΏΠΎΠ»Π΅ sadb_msg_seq.
ΠΠΎΠ»Π΅ sadb_msg_satype ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΠ°ΡΡ ΠΈΠ· ΡΠ°Π±Π». 19.2. ΠΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ SADB_SATYPE_UNSPEC Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π±Π°Π·Ρ. ΠΠ΅ Π²ΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ KAME ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ IPSec (SADB_SATYPE_AH ΠΈ SADB_SATYPE_ESP), ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°ΠΌΠΏ Π·Π°ΠΏΠΈΡΠ΅ΠΉ SADB_SATYPE_RIPV2 Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° EINVAL. ΠΡΠ»ΠΈ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌΡ ΡΠΈΠΏΡ, Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π½Π΅Ρ (Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ), ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ENOENT.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 19.2.
ΠΠΈΡΡΠΈΠ½Π³ 19.2. ΠΠ°ΠΌΠΏ Π±Π°Π·Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
//key/dump.c
1 void
2 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) {
23 int msglen;
24 struct sadb_msg *msgp;
25 msglen = Read(s, &buf, sizeof(buf));
26 msgp = (struct sadb_msg*)&buf;
27 print_sadb_msg(msgp, msglen);
28 if (msgp->sadb_msg_seq == 0)
29 goteof = 1;
30 }
31 close(s);
32 }
33 int
34 main(int argc, char **argv)
35 {
36 int satype = SADB_SATYPE_UNSPEC;
37 int c;
38 opterr = 0; /* ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² stderr Π΄Π»Ρ getopt() */
39 while ((c = getopt(argc, argv, "t:")) != -1) {
40 switch (c) {
41 case 't':
42 if ((satype = getsatypebyname(optarg)) == -1)
43 err_quit("invalid -t option %s", optarg);
44 break;
45 default:
46 err_quit("unrecognized option: %c", c);
47 }
48 }
49 sadb_dump(satype);
50 }
Π ΡΡΠΎΠΌ Π»ΠΈΡΡΠΈΠ½Π³Π΅ ΠΌΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΠΌΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ getopt, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ POSIX. Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΠΎΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ½ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ»ΡΠΊΠΎ t. ΠΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅Π΅, ΡΡΠΎ Π·Π° ΠΊΠ»ΡΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 29.3 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ 0i:l:v. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ»ΡΡΠΈ i ΠΈ l ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π° 0 ΠΈ v β Π½Π΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ.
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ΅ΡΡΡΡΠΌΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <unistd.h>.
extern char *optarg;
extern int optind, opterr, optopt;
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ getopt ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ opterr Π² Π½ΡΠ»Ρ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ»Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ POSIX Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ β Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, ΡΠΎ ΡΡΠΎ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° PF_KEY1-8 Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ PF_KEY. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠΊΠ΅Ρ Π΄Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ°ΠΌΠΈ.
Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° SADB_DUMP9-15 ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ sadb_msg, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°ΡΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π½Π°Ρ ΠΏΠΎΠ»Ρ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° PF_KEY_V2, Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ°ΠΊΠΎΠΉ ΡΠΎΠΊΠ΅Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π²Π΅ΡΡΠΈΡ PF_KEY_V2. ΠΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΡΠΈΠΏ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ β SADB_DUMP. ΠΠ»ΠΈΠ½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±Π΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π°ΠΌΠΏΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ SADB_DUMP16-18 ΠΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ print_sadb_msg. ΠΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π»ΠΈΡΡΠΈΠ½Π³ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΡΠΉ ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π΄Π»Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Ρ ΡΠ°ΠΉΡΠ° ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΡ ΡΠ΄ΡΠ°, ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡΡ Π² ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΠ΅.