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

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

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

Π’ этой ΠΊΠ½ΠΈΠ³Π΅ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ (Π±ΠΎΠ»Π΅Π΅ 2000 строк Π½Π° языкС Π‘), Π½ΠΎ ΠΎΠ½ находится Π² свободном доступС (см. прСдисловиС).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP.

1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ стандартного Π²Π²ΠΎΠ΄Π° ΠΈ стандартного Π²Ρ‹Π²ΠΎΠ΄Π° (рис. Π’.1).


Рис. Π’.1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ sock: стандартный Π²Π²ΠΎΠ΄ ΠΈ стандартный Π²Ρ‹Π²ΠΎΠ΄

Π’ клиСнтском Ρ€Π΅ΠΆΠΈΠΌΠ΅ всС, Ρ‡Ρ‚ΠΎ считываСтся ΠΈΠ· стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°, пСрСдаСтся Π² ΡΠ΅Ρ‚ΡŒ, Π° всС, Ρ‡Ρ‚ΠΎ получаСтся ΠΈΠ· сСти, записываСтся Π² стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°. Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ IP-адрСс сСрвСра ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΈ Π² случаС TCP выполняСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅.

2. Π‘Π΅Ρ€Π²Π΅Ρ€ стандартного Π²Π²ΠΎΠ΄Π° ΠΈ стандартного Π²Ρ‹Π²ΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° связываСт Π·Π°Ρ€Π°Π½Π΅Π΅ извСстный ΠΏΠΎΡ€Ρ‚ со своим сокСтом ΠΈ Π² случаС TCP осущСствляСтся пассивноС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅.

3. ΠšΠ»ΠΈΠ΅Π½Ρ‚-ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ (рис. Π’.2).

Рис. Π’.2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sock Π² качСствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°-отправитСля

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° осущСствляСт фиксированноС количСство ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² ΡΠ΅Ρ‚ΡŒ.

4. Π‘Π΅Ρ€Π²Π΅Ρ€-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ (рис. Π’.3).


Рис. Π’.3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sock Π² качСствС сСрвСра-получатСля

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° осущСствляСт фиксированноС количСство считываний ΠΈΠ· сСти.

Π­Ρ‚ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ:

sock [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] ΡƒΠ·Π΅Π» слуТба

sock [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] -s [ΡƒΠ·Π΅Π»] слуТба

sock [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] -i ΡƒΠ·Π΅Π» слуТба

sock [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] -is [ΡƒΠ·Π΅Π»] слуТба

Π³Π΄Π΅ ΡƒΠ·Π΅Π»β€” это имя ΠΈΠ»ΠΈ IP-адрСс ΡƒΠ·Π»Π°, Π° слуТба β€” это имя ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°. Π’ Π΄Π²ΡƒΡ… сСрвСрных Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… выполняСтся связываниС с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ адрСсом, Ссли Π½Π΅ Π·Π°Π΄Π°Π½ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠ·Π΅Π».

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 40 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сокСтов, упомянутыС Π² Π³Π»Π°Π²Π΅ 7. Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

-b n связываСт n Π² качСствС клиСнтского локального Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π°

-с   ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ символ Π½ΠΎΠ²ΠΎΠΉ строки Π² CR/LF ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚

-f a.b.c.d.p ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ IP-адрСс = a.b.c.d, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° = Ρ€

-g a.b.c.d свободная ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ

-h   ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ TCP ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ EOF ΠΈΠ· стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°

-i   ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сокСт, ΠΏΡ€ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… с сокСта (w/-s)

-j a.b.c.d присоСдинСниС ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ многоадрСсной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ

-k   осущСствляСт write ΠΈΠ»ΠΈ writev порциями

-l a.b.c.d.p клиСнтский Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ IP-адрСс = a.b.c.d. Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° = Ρ€

-n n Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° для записи ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ "рассылки" (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1024)

-ΠΎ   НЕ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ UDP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚

-Ρ€ n врСмя оТидания (Π² мс) ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ считываниСм ΠΈΠ»ΠΈ записью (рассылка/ΠΏΡ€ΠΈΠ΅ΠΌ)

-q n Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠΌ сокСтС для сСрвСра TCP

     (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 5)

-r n количСство Π±Π°ΠΉΡ‚ΠΎΠ² Π·Π° ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ считывания (read) для сСрвСра "ΠΏΡ€ΠΈΠ΅ΠΌΠ°"

     (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1024)

-s   Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ сСрвСр, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚

-u   ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ UDP вмСсто TCP

-v   ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄

-w n количСство Π±Π°ΠΉΡ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи (write) ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° "рассылки"

     (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1024)

-x n врСмя (Π² ms) для SO_RCVTIMEO (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°)

-y n врСмя (Π² ms) для SO_SNDTIMEO (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°)

-A   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_REUSEADDR

-B   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_BROADCAST

-D   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_DEBUG

-E   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IP_RECVDSTADDR

-F   ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов (fork) послС установлСния соСдинСния

     (ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ TCP-сСрвСр)

-G a.b.c.d ТСсткая ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ

-H n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IP_TOS (16=min del, 8=max thru, 4=max rel, 2=min cost)

-I   сигнал SIGIO

-J n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IP_TTL

-K   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_KEEPALIVE

-L n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_LINGER, n = linger time

-N   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ TCP_NODELAY

-O n врСмя (Π² мс) для оТидания послС Π²Ρ‹Π·ΠΎΠ²Π° listen, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ (accept)

-Π  n врСмя (Π² мс) ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ считываниСм ΠΈΠ»ΠΈ записью (рассылка/ΠΏΡ€ΠΈΠ΅ΠΌ)

-Q n врСмя (Π² мс) оТидания послС получСния FIN, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ

-R n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_RCVBUF

-S n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_SNDBUF

-Π’   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_REUSEPORT

-U n Π²ΠΎΠΉΡ‚ΠΈ Π² срочный Ρ€Π΅ΠΆΠΈΠΌ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ число n (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для отправитСля)

-V   ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ writev() вмСсто write(): Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ -k

-W   ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ошибки записи для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°

-X n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ TCP_MAXSEG (устанавливаСт MSS)

-Y   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SO_DONTROUTE

-Z   MSG_PEEK

-2   ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IP_ONESBCAST (255.255.255.255) для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ

Π’.4. НСбольшиС тСстовыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°Π²Ρ‚ΠΎΡ€ пользовался ΠΏΡ€ΠΈ написании ΠΊΠ½ΠΈΠ³ΠΈ, являСтся созданиС Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСстовых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ свойство Π² Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выстроСнной тСстовой ситуации. ΠŸΡ€ΠΈ написании Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСстовых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… простых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ использовались Π½Π° протяТСнии всСй ΠΊΠ½ΠΈΠ³ΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ создаваСмого ΠΊΠΎΠ΄Π° ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя обСспСчиваСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ошибок.

Π’.5. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° tcpdump

БСсцСнным срСдством ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² сСтСвом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ являСтся такая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠ°ΠΊ tcpdump. Она считываСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· сСти ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран большоС количСство ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± этих ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π½Π°ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΎΡ‚Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ этим критСриям. НапримСр,

% tcpdump '(udp and port daytime) or icmp'

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ UDP-Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Π° отправитСля ΠΈΠ»ΠΈ получатСля, Ρ€Π°Π²Π½Ρ‹ΠΌ 13 (сСрвСр Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹), ΠΈΠ»ΠΈ ICMP-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

% tcpdump 'tcp and port 80 and tcp[13:1] & 2 != 0'

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ TCP-сСгмСнты с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Π° отправитСля ΠΈΠ»ΠΈ получатСля, Ρ€Π°Π²Π½Ρ‹ΠΌ 80 (сСрвСр HTTP), Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн Ρ„Π»Π°Π³ SYN. Π€Π»Π°Π³ SYN ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2 Π² 13-ΠΌ Π±Π°ΠΉΡ‚Π΅ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° TCP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

% tcpdump 'tcp and tcp[0:2] > 7000 and tcp[0:2] <= 7005'

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ TCP-сСгмСнты, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° отправитСля Π»Π΅ΠΆΠΈΡ‚ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ ΠΎΡ‚ 7001 Π΄ΠΎ 7005. НомСр ΠΏΠΎΡ€Ρ‚Π° отправитСля Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π° Π² самом Π½Π°Ρ‡Π°Π»Π΅ TCP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ смСщСниС).

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А ΠΊΠ½ΠΈΠ³ΠΈ [111] Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано дСйствиС Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° доступна ΠΏΠΎ адрСсу http://www.tcpdump.org/ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ мноТСством Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Unix. Она написана Π’Π°Π½ Якобсоном (Van Jacobson), ΠšΡ€ΡΠ³ΠΎΠΌ ЛСрСсом (Craig Leres) ΠΈ Π‘Ρ‚ΠΈΠ²Π΅Π½ΠΎΠΌ МакКаном (Steven McCanne) ΠΈΠ· LBL, ΠΈ Π² настоящСС врСмя сопровоТдаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ tcpdump.org.

НСкоторыС поставщики ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ свои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ возмоТностями. НапримСр, Π² Solaris 2.x Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° snoop. Но ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° tcpdump Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ мноТСством вСрсий Unix, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ срСдства Π² Π½Π΅ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ являСтся большим прСимущСством.

Π’.6. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° netstat

Π’ тСкстС ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· использовалась ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° netstat. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° слуТит для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ.

β–  ΠžΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ статус Ρ‚ΠΎΡ‡Π΅ΠΊ доступа сСти. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 5.6, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ прослСТивали статус нашСй Ρ‚ΠΎΡ‡ΠΊΠΈ доступа ΠΏΡ€ΠΈ запускС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра.

β–  ΠžΠ½Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· интСрфСйсов ΡƒΠ·Π»Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ для этой Ρ†Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π»Π°Π³ -ia, Π° Π² Solaris 2.x ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π»Π°Π³ -g.

β–  Π‘ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -s эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сообщаСт статистику ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 8.13, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ нСдостаточном ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² UDP.

β–  ΠŸΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -r ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -i β€” ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± интСрфСйсС. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° использована Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 1.9, ΠΊΠΎΠ³Π΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ netstat ΠΌΡ‹ выясняли Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ сСти.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° netstat ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ возмоТностями, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ поставщики Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ свои собствСнныС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ руководству ΠΏΠΎ вашСй систСмС.

Π’.7. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° lsof

НазваниС lsof происходит ΠΎΡ‚ Β«list open filesΒ» (ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹). Как ΠΈ tcpdump, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° являСтся общСдоступной ΠΈ прСдставляСт собой ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ срСдство для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ пСрСнСсСно Π½Π° мноТСство вСрсий Unix.