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

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

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

48      client[i].family == AF_INET6 &&

49      client[i].lport == sport) {


50      bzero(&dest, sizeof(dest));

51      dest.sin6_family = AF_INET6;

52 #ifdef HAVE_SOCKADDR_SA_LEN

53      dest.sin6_len = sizeof(dest);

54 #endif

55      memcpy(&dest.sin6_addr, &hip6->ip6_dst,

56       sizeof(struct in6_addr));

57      dest.sin6_port = udp->uh_dport;


58      icmpd_err.icmpd_type = icmp6->icmp6_type;

59      icmpd_err.icmpd_code = icmp6->icmp6_code;

60      icmpd_err.icmpd_len = sizeof(struct sockaddr_in6);

61      memcpy(&icmpd_err.icmpd_dest, &dest, sizeof(dest));


62      /* ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΊΠΎΠ΄Π° ICMPv6 ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ errno */

63      icmpd_err.icmpd_errno = EHOSTUNREACH; /* ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ */

64      if (icmp6->icmp6_type == ICMP6_DST_UNREACH &&

65       icmp6->icmp6_code ICMP6_DST_UNREACH_NOPORT)

66       icmpd_err.icmpd_errno = ECONNREFUSED;

67      if (icmp6->icmp6_type == ICMP6_PACKET_TOO_BIG)

68       icmpd_err.icmpd_errno = EMSGSIZE;

69      Write(client[i].connfd, &icmpd_err, sizeof(icmpd_err));

70     }

71    }

72   }

73  }

74  return(--nready);

75 #endif

76 }

28.8. РСзюмС

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сокСты ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‚Ρ€ΠΈ возмоТности:

1. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ICMPv4, IGMPv4 ΠΈ ICMPv6.

2. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись IP-Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠ»Π΅ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ обрабатываСтся ядром.

3. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ своих собствСнных Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² IPv4, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² диагностичСских цСлях (ΠΈΠ»ΠΈ, ΠΊ соТалСнию, Ρ…Π°ΠΊΠ΅Ρ€Π°ΠΌΠΈ).

Π”Π²Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… диагностичСских срСдства β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ping ΠΈ traceroute β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сокСты. ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ наши собствСнныС вСрсии этих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π΅ вСрсии ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° β€” ΠΈ IPv4, ΠΈ IPv6. Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ наш собствСнный Π΄Π΅ΠΌΠΎΠ½ icmpd, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт доступ ΠΊ сообщСниям ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ICMP Ρ‡Π΅Ρ€Π΅Π· сокСт UDP. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ дСскриптора Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ сокСт Unix ΠΌΠ΅ΠΆΠ΄Ρƒ нСродствСнными ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром.

УпраТнСния

1. Π’ этой Π³Π»Π°Π²Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всС поля Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° IPv6 ΠΈ всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ доступны ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сокСта ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Какая информация ΠΈΠ· Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ IPv6 Π½Π΅ доступна ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ?

2. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² листингС 28.30, Ссли ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пСрСстанСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ считываниС ΠΈΠ· своСго Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сокСта Unix ΠΈ Π΄Π΅ΠΌΠΎΠ½ icmpd Π½Π°ΠΊΠΎΠΏΠΈΡ‚ мноТСство сообщСний для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°? Π’ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹?

3. Π•сли Π·Π°Π΄Π°Ρ‚ΡŒ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ping адрСс ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эхо- запрос ICMP посылаСтся ΠΊΠ°ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос канального уровня, Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ Π½Π΅ установим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ сокСта SO_BROADCAST. ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

4. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ping, Ссли ΠΌΡ‹ запустим Π΅Π΅ Π½Π° ΡƒΠ·Π»Π΅ с нСсколькими интСрфСйсами, Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° возьмСм Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ адрСс 224.0.0.1?

Π“Π»Π°Π²Π° 29

Доступ ΠΊ ΠΊΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ

29.1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ настоящСС врСмя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΊΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

1. ΠžΡ‚слСТиваниС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… Π½Π° канальном ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ tcpdump, Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСмах (Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… устройствах для отслСТивания ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²). Если Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ этому ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сСтСвого интСрфСйса Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² смСшанном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (promiscuous mode), ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ смоТСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, проходящиС ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ кабСлю, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Ρ‚ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ΠΊΠΎΠΌΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… сСтях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС Π² послСднСС врСмя. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ пропускаСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли этот Ρ‚Ρ€Π°Ρ„ΠΈΠΊ адрСсован ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ устройству ΠΈΠ»ΠΈ устройствам, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ этому ΠΏΠΎΡ€Ρ‚Ρƒ, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½ΠΈ Π±Ρ‹Π»: Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ многоадрСсным. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π°, Π½ΡƒΠΆΠ½ΠΎ сначала ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свой ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π° Π² Ρ€Π΅ΠΆΠΈΠΌ контроля (monitor mode ΠΈΠ»ΠΈ port mirroring). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, Π½Π° самом Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. НапримСр, двухскоростной ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ‚ΠΎΡ€ 10/100 ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Π΄Π²ΡƒΡ…ΠΏΠΎΡ€Ρ‚ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ: ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ€Ρ‚ для сСтСй, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° 100 ΠœΠ±ΠΈΡ‚/с, Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” для сСтСй Π½Π° 10 ΠœΠ±ΠΈΡ‚/с.

2. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΊΠ°ΠΊ частСй ядра. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ вСрсий Unix сСрвСра RARP β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ запросы RARP с канального уровня (запросы RARP Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ IP), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

Π’Ρ€ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных срСдства получСния доступа ΠΊ ΠΊΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ Π² Unix β€” это ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ BSD (BPF, BSD Packet Filter), DLPI Π² SVR4 (Datalink Provider Interface β€” интСрфСйс поставщика канального уровня) ΠΈ интСрфСйс ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… сокСтов Linux (SOCK_PACKET). ΠœΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π² этой Π³Π»Π°Π²Π΅ ΠΎΠ±Π·ΠΎΡ€ пСрСчислСнных срСдств, Π° Π·Π°Ρ‚Π΅ΠΌ описываСм libcap β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ для свободного доступа Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми трСмя пСрСчислСнными срСдствами, ΠΈ использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ зависящими ΠΎΡ‚ фактичСского способа обСспСчСния доступа ΠΊ ΠΊΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ, примСняСмому Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. ΠœΡ‹ описываСм эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, разрабатывая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая посылаСт запросы сСрвСру ΠΈΠΌΠ΅Π½ DNS (ΠΌΡ‹ составляСм свои собствСнныС Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ UDP ΠΈ записываСм ΠΈΡ… Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ сокСт) ΠΈ считываСт ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ libcap, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, добавляСт Π»ΠΈ сСрвСр ΠΈΠΌΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму Π² Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ UDP.

29.2. BPF: ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ BSD

4.4BSD ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π‘Π΅Ρ€ΠΊΠ»ΠΈ-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ BPF β€” ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ BSD (BSD Packet Filter). РСализация BPF описана Π² Π³Π»Π°Π²Π΅ 31 [128]. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ BPF, описаниС псСвдопроцСссора BPF ΠΈ сравнСниС с ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ SunOs 4.1.x NIT ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² [72].

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ BPF сразу послС получСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π²Ρ‹ΡˆΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 29.1.

Рис. 29.1. Π—Π°Ρ…Π²Π°Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с использованиСм BPF

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для интСрфСйса Ethernet ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π° рис. 4.11 ΠΈ 4.19 Π² [128]. Π’Ρ‹Π·ΠΎΠ² BPF Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС послС получСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΎΠΊ.

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ само ΠΏΠΎ сСбС ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· канального уровня Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно, ΠΎΠ΄Π½Π°ΠΊΠΎ прСимущСство BPF Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² возмоТности ΠΈΡ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ устройство BPF, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ свой собствСнный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ BPF примСняСт ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ достаточно просты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ использовании Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° udp or tcp ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ UDP ΠΈ TCP), Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². НапримСр, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

tcp and port 80 and tcp[13:l] & 0x7 != 0

использовался Π² Π³Π»Π°Π²Π΅ 14 [128] для ΠΎΡ‚Π±ΠΎΡ€Π° сСгмСнтов TCP, Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ²ΡˆΠΈΡ…ΡΡ ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ 80 ΠΈΠ»ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈ содСрТащих Ρ„Π»Π°Π³ΠΈ SYN, FIN ΠΈΠ»ΠΈ RST. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ tcp [13:1] соотвСтствуСт ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ с 13-Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° TCP.

Π’ BPF Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ основанный Π½Π° рСгистрах ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСт спСцифичСскиС для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. Π₯отя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½Π° машинном языкС псСвдопроцСссора (ΠΎΠ½ описан Π² руководствС ΠΏΠΎ использованию BPF), ΠΏΡ€ΠΎΡ‰Π΅ всСго Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки ASCII (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ показанная строка, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с tcp) Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pcap_compile, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ рассказываСм Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 29.7.

Π’ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ BPF ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Π΅Π΅ использованиС.

1. Π€ΠΈΠ»ΡŒΡ‚рация BPF происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра, Π·Π° счСт Ρ‡Π΅Π³ΠΎ минимизируСтся количСство Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ядра Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· пространства ядра Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ пространство являСтся довольно дорогостоящим. Если Π±Ρ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Ρƒ BPF ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ взаимодСйствия с быстрыми ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ.

2. BPF ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Π΄Π»ΠΈΠ½Π΅ Π·Π°Ρ…Π²Π°Ρ‚Π° (capture length). Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° Π½Π΅ содСрТащиСся Π² Π½Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ BPF Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ tcpdump, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 68 Π±Π°ΠΉΡ‚, ΠΈ этого достаточно для размСщСния 14-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ethernet, 20-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° IP, 20-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° TCP ΠΈ 14 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…. Но для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DNS ΠΈΠ»ΠΈ NFS) трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ» это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ tcpdump.