русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Програма tcpdump


Дата додавання: 2014-11-28; переглядів: 870.


 

Програма tcpdump використовується як сніфер – мережний аналізатор, який може використовуватись для налагодження мережних додатків та пошуку несправностей у мережі. Традиційно мережний аналізатор — це дорогий спеціалізований пристрій, але сучасні комп’ютери у змозі виконувати їхні функції в межах окремого процесу. Сніфери відіграють також роль засобів дослідження в мережі — динаміки та взаємодії в мережі. Програма tcpdump працює на канальному рівні і складається з двох компонент: перша працює в ядрі, перехоплює та фільтрує пакети, а друга — діє в адресному просторі користувача й визначає інтерфейс користувача, а також форматує й фільтрує пакети, якщо це не робить ядро.

Користувацька компонента tcpdump взаємодіє з компонентою в ядрі за допомогою бібліотеки libcap (бібліотека для перехоплення пакетів). У системах BSD libcap взаємодіє з пакетним фільтром BPF-BSD packet filter, який аналізує кожний пакет, який проходить повз канальний рівень, і зіставляє його параметри з опціями, заданими користувачем для цього фільтру. Якщо пакет задовольняє критерієві фільтрування, його копія розміщується у виокремленому ядром буфері, який асоціюється з даним фільтром. Коли буфер заповнюється або закінчується заданий користувачем тайм-аут, вміст буфера передається додаткові за допомогою libcap. На рис. 2.6 зазначено, як tсpdump читає неопрацьовані пакети за допомогою BPF, а праворуч, для порівняння, подано ще один додаток, який читає дані із стека TCP/IP, як за звичай. BPF перехоплює пакети на рівні драйверу пристрою, тобто відразу після їхнього зчитування з хосту, на відміну від читання з простого сокету, де можна отримати лише IP-дейтаграми, вже опрацьовані рівнем IP та передані безпосередньо додаткові, оминаючи транспортний рівень (TCP або UDP).

Для використання tсpdump треба отримати дозвіл, за умовчанням tсpdump конфігурується з повноваженнями суперкористувача root. Можна також зробити tсpdump setuid-програмою. Можна викликати tсpdump взагалі без параметрів, тоді вона перехоплюватиме всі мережні пакети та виводитиме інформацію про них. Але краще зазначити певні потрібні атрибути фільтра:

▬ протокол;

▬ хост відправляння та/або призначення;

▬ мережа відправляння та/або призначення;

▬ Ethernet-адресу відправляння та/або призначення;

▬ порти призначення та/або відправляння;

▬ розмір пакета;

▬ пакети, передавані на всю локальну мережу чи то на групу (у Ethernet та у IP);

▬ пакет, використовуваний як шлюз по зазначеним хостом.

Можна також перевірити конкретні біти чи байти у заголовках протоколів. Наприклад, аби добирати лише TCP-сегменти, в яких встановлено біт терміновості, слід використовувати фільтр: tcp [13] & 16, тому що четвертий біт чотирнадцятого байта заголовка TCP — біт терміновості. Фільтр

icmp and not src net localnet

відфільтровує ICMP-пакети, що вони надходять із зовнішньої мережі.

 


 

 
 

 

 


Рисунок 2.6 — Перехоплювання пакетів за допомогою BPF

 

Інформація, надавана tcpdump, залежить від протоколу. На рис. 2.7 подано трасування сеансу за протоколом SMTP (простий протокол електронної пошти). У першому терміналі (bsd) надсилається електронний лист користувачеві з адресою в домені gte.net, тобто user@gte.net.

Рядки 1...4 описують пошук адреси SMTP-серверу, який обслуговує домен gte.net. У рядку 1 клієнт bsd запитує у серверу імен свого сервіс-провайдера (ns1.ix.netcom.com) ім’я чи імена поштового серверу gte.net. У першому полі знаходиться перший штамп пакета (12:54:32.920881). Оскільки таймер на машині bsd має дозвіл 1мкс, то зазначено шість десяткових знаків. Пакет вийшов з порту 1067 на bsd до порту 53 (domain) на машині nsl. Далі виводиться інформація щодо даних в пакеті. Перше поле (45801) — номер запиту, використовуваний функціями дозволу імен на bsd для зіставляння відповідей та запитів. Знак “+”означає, що функція дозволу задає опитування DNS-сервером інших серверів, якщо в нього не має інформації. Рядок “MX?” показує, що це запит про запис поштового обміну для мережі, ім’я якої стоїть у наступному полі (gte.net) а (25) — це довжина запиту — 25 байтів. Рядок 2 — це відповідь на запит у рядку 1. Число 45801 — номер запиту, до якого належить відповідь. Наступні три поля — кількість записів у відповіді, записів від серверу імен тощо. “371”вказує на кількість байтів у відповіді. “DF” означає, що в IP-заголовку було встановлено біт “Don’t fragment” (не фрагментувати). Перші два рядки ілюструють використання системи DNS для пошуку опрацьовувачів пошти.

 

1 12:54:32.920881 bsd.1067 > nsl.ix.netcom.com.domain:

45801+ MX? gte.net

2 12:54:33.254981 nsl.ix.netcom.com.domain > bsd.1067:

45801 5/4/9 (371) (DF)

3 12:54:33.256127 bsd.1068 > nsl.ix.netcom.com.domain:

45802+ A? mtapop2.gte.net (33)

4 12:54:33.534962 nsl.ix.netcom.com.domain > bsd.1068:

45802 1/4/4 (202) (DF)

5 12:54:33.535737 bsd.1059 > mtapop2.gte.net.smtp:

S 585494507:585494507 (0) win 16384

<mss 1460,nop,wscale 0,nop,nop,

timestamp 6112 0> (DF)

6 12:54:33.784963 mtapop2.gte.net.smtp > bsd.1059

S 1257159392:1257159392 (0) ack 585494509 win 49152

<mss 1460,nop,wscale 0,nop,nop,

timestamp 7853753 6112> (DF)

7 12:54:33.785012 bsd.1059 > mtapop2.gte.net.smtp:

. ack 1 win 17376 <nop,nop,

timestamp 6112 > 7853753 (DF)

8 12:54:33.235066 mtapop2.gte.net.smtp > bsd.1059

P 1:109(108) ack 1 win 49152

<nop,nop,timestamp 7853754 6112> (DF)

9 12:54:33.235277 bsd.1059 > mtapop2.gte.net.smtp:

P 1:19(18) ack 109 win 17376

<nop,nop,timestamp 6113 7853754> (DF)

14 строк опущено

24 12:54:33.675105 bsd.1059 > mtapop2.gte.net.smtp:

P 663:663(0) ack 486 win 17376

<nop,nop,timestamp 6118 7853758> (DF)

25 12:54:33.685080 mtapop2.gte.net.smtp > bsd.1059

F 486:486(0) ack 663 win 49152

<nop,nop,timestamp 7853758 6117> (DF)

26 12:54:33.685126 bsd.1059 > mtapop2.gte.net.smtp:

. ack 487 win 17376

<nop,nop,timestamp 6118 7853758> (DF)

27 12:54:33.934985 mtapop2.gte.net.smtp > bsd.1059

F 486:486(0) ack 664 win 49152

<nop,nop,timestamp 7853759 6118> (DF)

28 12:54:33.935020 bsd.1059 > mtapop2.gte.net.smtp:

. ack 487 win 17376

<nop,nop,timestamp 6118 7853759> (DF)

 

Рисунок 2.7 — Трасування SMTP-сеансу з вмиканням обміну

за протоколами DNS та TСP

 

У двох наступних рядках йде пошук IP-адреси опрацьовувача пошти мережі gte.net. “A” у рядку 3 зазначає, що це запит IP-адреси хосту mtapop2.gte.net. — одного з відомих поштових серверів у США. Рядки 5…28 вміщують деталі обміну за протоколом SMTP. Процедура трибічного квітування розпочинається в рядку 5 і завершується в рядку 7. Перше поле після часового штампу та імен хостів — це поле flags. “S” у рядку 5 зазначає, що у сегменті встановлено прапорця SYN. Інші можливі значення прапорця: “F” (FIN),”U” (URG), “P” (PUSH), “R” (RST) та “.” (немає прапорців). Далі йдуть порядкові номери першого та останнього байтів, а за ними в дужках — кількість байтів даних. Перше число — порядковий номер першого байта в сегменті (SYN або інформаційному), а друге — порядковий номер першого байту плюс кількість байтів у сегменті. За умовчанням подані реальні порядкові номери для SYN-сегментів та зміщення — для наступних сегментів.

У всіх сегментах, окрім першого SYN, є поле АСК, яке зазначає, на який наступний порядковий номер очікує відправляч. Це поле (у вигляді ack nnn) за умовчанням вміщує зміщення відносно порядкового номера, зазначеного в сегменті SYN.

За полем АСК йде поле Window — кількість байтів даних, які готовий прийняти віддалений хост. Зазвичай воно відбиває обсяг вільної пам’яті в буферах з’єднання.

У кутових дужках зазначено опції ТСР. У рядках 8...23 подано діалог поміж програмою senmail на клієнтському боці bsd та SMTP-сервером на машині mtapop2. Рядки 24...28 відбивають процедуру розривання з’єднання. Спочатку bsd надсилає FIN у рядку 24, потім надходить FIN від mtapop2 (рядок 25). У рядку 27 mtapop2 вдруге надсилає FIN, тому що не отримав від bsd підтвердження АСК на свій перший FIN.

Один з недоліків tсpdump — неповна підтримка виведення даних. Часто під час налаштовування мережних додатків треба знати, які дані надсилаються. Цю інформацію можна отримати, задавши опції -s та -x. Опція -s зазначає, скільки даних з пакета треба виводити, а –x — вказує на шістнадцяткову форму виведення даних. За умовчанням tcpdump виводить лише перші 68 байтів, що є достатнім для заголовків більшості протоколів.

Програма tсpdump — це незамінний інструмент для аналізування того, що відбувається у мережі. Якщо знати, що насправді надсилається чи то приймається, значно легше вдається віднайти й виправити помилки у додатках.

 


<== попередня лекція | наступна лекція ==>
Програма ttcp | Програма netstat


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн