Трасування маршруту за допомогою команди traceroute

Для відображення усіх точок маршрутизації, через які проходять мережеві пакети на шляху до вузла призначення, використовується команда traceroute (аналог в Windows - tracert ). У разі проблем при доставці даних програма дозволяє визначити, на якій саме ділянці мережі виникли несправності . Для визначення проміжних маршрутизаторів traceroute відправляє серію (зазвичай три) пакетів вузлу призначення, при цьому кожного разу збільшуючи на 1 значення поля TTL. Перша серія пакетів вирушає з TTL, рівним 1, і тому перший маршрутизатор повертає назад повідомлення ICMP, що вказує на неможливість доставки даних. Потім traceroute повторює відправку серії пакетів, але вже з TTL, рівним 2, що дозволяє першому маршрутизатору пропустити їх далі. Процес повторюється до тих пір, поки при певному значенні TTL пакет не досягне вузла призначення.

Для встановлення traceroute в Debian GNU\Linux слід використовувати команду:

# # apt - get install traceroute

Основним параметрів команди traceroute являється ім'я або IP -адрес видаленого вузла. Виведення команди traceroute містить інформацію про точки маршрутизації (IP -адрес і/або символьне ім'я) і параметр RTT для кожної спроби серії. Ключ - n забороняє звернення до підсистеми DNS для визначення символьних імен маршрутизаторів, що прискорює роботу traceroute.

Використовуючи ключ - s, можна вказати traceroute вказати, який початковий IP -адрес використовувати (в даному випадку 192.168.1.11) :

# # traceroute - s 192.168.1.11 192.168.2.5

11.1.4. Статистика інтерфейсів за допомогою команди netstat

Утиліта netstat є зручним засобом моніторингу мережевої активності. Фактично ця утиліта служить для відображення різних структур даних, пов'язаних з мережею.

Для відображення статистики мережевих інтерфейсів слід використовувати netstat з ключем - i (приклад 11.6.). Усі мережеві інтерфейси відображуються за допомогою ключа - a.

# # netstat - aiKernel Interface tableIface MTU Met RX - OK RX - ERR RX - DRP RX - OVR TX - OK TX - ERR TX - DRP TX - OVR Flgeth0 1500 0 2012 0 0 0 244 0 0 0 BMRUeth1 1500 0 1341 0 0 0 1118 0 0 0 BMRUlo 16436 0 0 0 0 0 0 0 0 0 LRU

Лістинг 11.6. Відображення статистики інтерфейсів за допомогою netstat

Кожен рядок містить інформацію про окремий інтерфейс: ім'я, MTU, метрику інтерфейсу (див. нижче); колонки RX і TX показують кількість пакетів, які були отримані і відправлені без помилок ( RX - OK, TX - OK ), з помилками ( RX - ERR, TX - ERR ), були відкинуті ( RX - DRP, TX - DRP ), були втрачені ( RX - OVR, TX - OVR ). Набір символів у кінці рядка - прапори стану інтерфейсу в стилі ifconfig (В - встановлена широкомовна адреса, L - локальний інтерфейс, M - "хаотичний режим", R - інтерфейс запущений, U - інтерфейс піднятий і так далі)

Ключові терміни

ICMP (Internet Control Message Protocol) - мережевий протокол повідомлень, що управляють, використовуваний для діагностики стека TCP/IP.

TTL (Time - To - Live) - ціле число, що визначає кількість проміжних маршрутизаторів, пройдених мережевим пакетом; на узле-источники встановлюється в максимальне значення; кожен маршрутизатор віднімає від поточного значення TTL одиницю.

RTT (Round Trip Time) - час між відправкою запиту і отриманням відповіді на цей запит.

Ping - утиліта, що зазвичай входить в набір програмного забезпечення операційної системи і дозволяє перевірити доступність видаленого вузла засобами протоколу ICMP

Traceroute - утиліта, що дозволяє відобразити усі проміжні вузли на шляху дотримання пакету до вузла призначення; використовує протокол ICMP.

Netstat - утиліта, використовувана для моніторингу мережевої активності.

Короткі підсумки

Протокол ICMP (протокол мережевого рівня; використовує для доставки протокол IP) надає прості засоби для передачі видаленим системам повідомлень про виняткові ситуації в процесі функціонування мережевого стека на вузлі.

Простим застосуванням протоколу ICMP є утиліта ping. Вказавши їй ім'я або IP -адресу видаленого вузла, можна перевірити його доступність.

Для трасування маршруту (відображення усіх точок маршрутизації) до видаленої системи використовується ICMP –додаток traceroute.

Утиліта netstat з ключем - i відображає статистику роботи мережевих інтерфейсів. Подібну статистику також містить виведення команди ifconfig.

11.2. Транспортний та прикладний рівень моделі мережної взаємодії

11.2.1. Основи транспортного рівня

Протоколи транспортного рівня [7] [30] реалізують розподіл потоків даних між застосуваннями на одному комп'ютері, таким чином, що декілька застосувань можуть використовувати одне і те ж мережеве підключення. Розподіл здійснюється за допомогою портів ( числових номерів ). Іншими словами, для цього транспортного протоколу на цьому IP -адресе застосування резервує порт для мережевої взаємодії (інше застосування цей порт вже не може використовувати). Нумерації портів різних протоколів транспортного рівня не перетинаються.

Взаємодія між застосуваннями здійснюється за допомогою сокетів ( пара IP -адрес:порт ) : на кожному з взаємодіючих вузлів створюється сокет, з яким пов'язані вхідною і вихідною потоки для передачі даних (рис 11.1).

Трасування маршруту за допомогою команди traceroute - №1 - открытая онлайн библиотека

Рисунок 11.1. – Приклад клієнт-серверної взаємодії на основі сокетів

Інформація про порти, що використовуються записуються в заголовок одиниці передачі протоколу транспортного рівня.

Як транспорт для IP використовуються два протоколи:

1. Протокол TCP (Transmission Control Protocol) - протокол транспортного рівня зі встановленням з'єднання, управлінням потоком передачі і гарантованою доставкою даних. Одиниці передачі зазвичай називаються сегментами.

2. Протокол UDP (User Datagram Protocol) - протокол транспортного рівня без встановлення з'єднання (не гарантує доставку датаграм - одиниць передачі).

За найбільш популярними мережевими службами номера портів закріплені стандартні значення. У Linux ця інформація знаходиться у файлі /etc/services (приклад 11.7).

$ $ cat services | grep "^http\|^ssh\|^www\|^pop3\|^smtp\|^ftp"ftp - data 20/tcpftp 21/tcpssh 22/tcp # SSH Remote Login Protocolssh 22/udpsmtp 25/tcp mailwww 80/tcp http # WorldWideWeb HTTPwww 80/udp # HyperText Transfer Protocolpop3 110/tcp pop - 3 # POP version 3pop3 110/udp pop - 3https 443/tcp # http protocol over TLS/SSLhttps 443/udpftps - data 989/tcp # FTP over SSL (data)ftps 990/tcppop3s 995/tcp # POP - 3 over SSLpop3s 995/udphttp-alt 8080/tcp webcache # WWW caching servicehttp-alt 8080/udp # WWW caching service

Лістинг 11.7 – Фрагмент файлу /etc/services

Вміст файлу /etc/services має рекомендаційний характер, т. б. адміністратор системи може використовувати нестандартні значення портів для мережевих служб. У Linux порти менші 1024 можуть бути задіяні тільки суперкористувачем. Для клієнтських підключень використовуються порти із старшими номерами, вибирані випадково з незайнятих.

Максимальна кількість портів, яка може використовувати протокол визначається розміром відповідних полів в заголовку транспортного рівня (16 біт для TCP і UDP ).

11.2.2. Перегляд інформації про поточні з'єднання і відкриті порти в Linux

Для отримання інформації про роботу транспортного рівня на вузлі можна використовувати утиліту ss з пакету iproute2 або утиліту netstat.

# # ss - 4antuNetid State Recv - Q Send - Q Local Address : Port Peer Address : Port udp UNCONN 0 0 *:67 *:* tcp LISTEN 0 128 *:22 *:* tcp ESTAB 0 0 192.168.1.1:55469 192.168.1.10:22 tcp ESTAB 0 0 192.168.56.102:22 192.168.56.1:50405

Лістинг 11.8 – Використання ss для висновку інформації про поточні з'єднання і відкриті порти

У цьому прикладі локальний порт UDP/67 використовується деякою службою на усіх IP -адресах вузла (перший рядок); локальний порт TCP/22 чекає ( LISTEN ) підключень на усіх IP -адресах (другий рядок); з видаленої адреси 192.168.56.1 встановлено з'єднання ( ESTAB ) із службою, що використовує локальний порт TCP/22 (останній рядок); з локальної системи також встановлено клієнтське підключення з видаленою службою на вузлі 192.168.1.10, що використовує віддалений порт TCP/22 (третій рядок).

Ключ - 4 вказує виводити відомості по протоколу IPv4, - a - виводити усю інформацію, - n -выводить вузли і порти в числовому вигляді; - t - протокол TCP, - u - протокол UDP. Для того, щоб упізнати які процеси використовують мережеві з'єднання в команді ss слід використовувати ключ - p. Ключ - l відображує тільки слухаючі порти. Детальнішу інформацію про команду ss можна отримати на сторінці керівництво ( man ss).

# # netstat - 4antuActive Internet connections (servers and established)Proto Recv - Q Send - Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 192.168.1.1:55469 192.168.1.10:22 ESTABLISHEDtcp 0 0 192.168.56.102:22 192.168.56.1:50405 ESTABLISHEDudp 0 0 0.0.0.0:67 0.0.0.0:*

Лістинг 11.9 – Використання netstat для висновку інформації про поточні з'єднання і відкриті порти

Ключі netstat аналогічні ключам ss в попередньому прикладі. Детальнішу інформацію про команду netstat можна отримати на сторінці допомоги (man netstat ).

11.2.3.Моніторинг мережевих з'єднань за допомогою утиліти IPTraf

Утиліта IPTraf є інтерактивним засобом відображення постійно оновлюваної мережевої статистики з текстовим інтерфейсом на основі бібліотеки ncurses [31]. IPTraf здатна відображувати різні дані, включаючи інформацію по TCP, лічильники UDP і ICMP, завантаження мережі Ethernet, статистику вузла і т. д.

Для встановлення IPTraf із стандартних репозиторіїв Debian можна використовувати команду:

# # apt - get install iptraf

Для використання IPTraf потрібні повноваження суперкористувача. IPTraf запускається в інтерактивному режимі. Після вітального повідомлення при натисненні будь-якої клавіші відкривається меню, в якому можна вибрати режим перегляду статистики, встановити фільтри або змінити налаштування програми.

Доступні наступні режими перегляду :

1. Мoнітор IP -трафика ( IP Traffic Monitor ). Для вибраного інтерфейсу (усіх інтерфейсів) включає списки TCP –з’єднань і статистику по них, а також монітор UDP -датаграмм.

2. Загальна статистика інтерфейсів ( General interface statistics ). Для кожного інтерфейсу відображує статистику пакетів.

3. Детальна статистика інтерфейсу ( Detailed interface statistics ). Для вибраного інтерфейсу відображує кількість переданих і отриманих одиниць передачі (IP -пакетов, TCP -сегментів і UDP -датаграмм і інших) і об'єм даних в байтах, а також поточну швидкість передачі пакетів і байт, об'єми широкомовного трафіку і кількість помилок в IP -пакетах.

4. Статистичний аналіз ( Statistical breakdowns ). В цьому інтерфейсі відображаєтсья розподіл трафіку за розміром пакетів або розподіл трафіку по портах.

5. Монітор станції локальної мережі ( LAN station monitor ). Для вибраного інтерфейсу (усіх інтерфейсів) показує статистику рівня мережевих інтерфейсів.

Відповідний режим відображення може бути встановлений за допомогою параметрів, що передані IPTraf при старті. Наприклад, для показу детальної статистики інтерфейсу eth0 (рис 11.2) слід використовувати ключ - d:

# # iptraf - d eth0

Детальну інформацію про ключі можна отримати з керівництва користувача ( man iptraf ).

Трасування маршруту за допомогою команди traceroute - №2 - открытая онлайн библиотека

Рисунок 11.2 – Детальна статистика інтерфейсу в IPTraf

Примітка. Існує і інші програми, подібні IPTraf [32], [33].

11.2.4. Тестування продуктивності мережі за допомогою утиліти iperf

Утиліта iperf є простим засобом для тестування пропускної спроможності між двома мережевими вузлами. Iperf є генератором TCP/UDP трафіку і має клієнт-серверну архітектуру.

Для встановлення цієї утиліти з репозиторіїв Debian :

# # apt - get install iperf

Для тестування мережевого з'єднання на одному з вузлів iperf, слід запустити в режимі сервера (ключ - s ) :

# # iperf - s

а на іншому - в режимі клієнта (ключ - c з вказівкою адреси сервера) :

$ $ iperf - c 192.168.1.12$ $ iperf - c 192.168.1.12 ------------------------------------------------------------Client connecting to 192.168.1.12, TCP port 5001TCP window size: 16.0 KByte (default)------------------------------------------------------------[ 3] local 192.168.1.3 port 51670 connected with 192.168.1.12 port 5001[ ID] Interval Transfer Bandwidth[ 3] 0.0-10.0 sec 85.4 MBytes 71.6 Mbits/sec

Лістинг 11.10 – Результат роботи клієнта iperf

За умовчанням iperf використовує протокол TCP. Для використання протоколу UDP слід вказати ключ - u. Детальнішу інформацію про параметри iperf можна отримати в керівництві користувача ( man iperf ).

Примітка. Результати роботи iperf можуть залежати не лише від пропускної спроможності каналу передачі. Наприклад, продуктивності вузла може бути недостатньо для генерації трафіку, що повністю навантажує канал; під час тестування канал може використовуватися іншими мережевими застосуваннями; параметри стека TCP/IP на вузлі можуть бути не налагоджені оптимально і так далі.

11.2.5. Протоколи прикладного рівня

Прикладні протоколи забезпечують доступ до прикладних мережевих сервісів і служб. Мережеві служби надають користувачам певні інформаційні послуги і зазвичай мають клієнт-серверну архітектуру (рідше розподілену). Клієнт і сервер у рамках прикладного протоколу обмінюються стандартними повідомленнями (часто текстового формату)[7].

Найбільш відомі прикладні протоколи:

· HTTP - протокол передачі гіпертексту (основний засіб передачі WEB -контента).

· Поштові протоколи SMTP (для відправки поштових повідомлень і взаємодії поштових серверів), POP3 і IMAP (для доступу до поштових скриньок).

· Протокол FTP (для обміну файлами).

· DNS - протокол взаємодії з серверами DNS і так далі

Багато протоколів прикладного рівня мають захищені версії, що дозволяють шифрувати передавану інформацію між клієнтом і сервером, а також ідентифікувати учасників мережевої взаємодії ( SSL і TLS ).

Для завдання діагностики прикладних протоколів корисна утиліта telnet, яка зазвичай є присутній в сучасних дистрибутивах Linux і дозволяє користувачеві взаємодіяти з текст-ориентированными TCP -сервисами засобами інтерфейсу командного рядка.

Примітка. Telnet - мережевий протокол, що реалізовує текстовий інтерфейс взаємодії поверх TCP/IP ; раніше застосовувався для діставання видаленого доступу до інтерфейсу командного рядка; використовується для реалізації текст-ориентированных протоколів взаємодії.

Встановлення утиліти telnet :

# # apt - get install telnet

Основними параметрами telnet виступають ім'я або адреса сервера і порт.

# # telnet 192.168.1.10 110Trying 192.168.1.10..Connected to 192.168.1.10Escape character is '^]'.++OK test.local Zimbra POP3 server readyuser testuser++OK hello testuser, please enter your passwordpass testpassword++OK server readylist++OK 6 messages1 47632 75813 33484 44495 24376 3350 quit++OK test.local closing connectionConnection closed by foreign host.

У цьому прикладі за допомогою утиліти telnet здійснюється підключення по протоколу POP3 до поштового сервера (192.168.1.10), що слухає на 110 порту. Клієнт передає команди, завершуючи їх переведеням рядка ( user, pass, list, quit ), а сервер кожну команду виконує. Прикладний протокол POP3 використовується клієнтом для роботи з поштовою скринькою на сервері; як видно з прикладу є діалоговим текст-орієнтованим протоколом.

Використовуючи telnet можна працювати з такими текст-орієнтовними протоколами як HTTP, POP3, SMTP і т. д. Можна також просто перевіряти наявність служби на цьому порту без знання безпосередньо синтаксису протоколу.

Ключові терміни

Порт - номер, використовуваний для ідентифікації каналу передачі застосування, що працює по цьому протоколу транспортного рівня.

Сокет - крайова точка каналу зв'язку, за допомогою якого застосування може використовувати мережеве підключення (пара IP -адрес:порт що однозначно визначає мережевий процес).

ТСP(Transmission Control Protocol) - протокол транспортного рівня зі встановленням з'єднання, управлінням потоком передачі і гарантованою доставкою даних.

UDP(User Datagram Protocol) - протокол транспортного рівня без встановлення з'єднання і що не гарантує доставку.

Сегменти- одиниці передачі протоколу TCP.

Датаграми - одиниці передачі протоколу UDP.

Клієнт-серверна архітектура - підхід до організації інформаційної системи, при якому мережеве навантаження розподілені між сервером (постачальником послуг) клієнтом (споживачем послуг).

HTTP (HyperText Transfer Protocol) - прикладний протокол передачі WEB -контента.

SMTP(Simple Mail Transfer Protocol) - прикладний поштовий протокол, використовуваний для відправки повідомлень електронної пошти і взаємодії серверів електронної пошти один з одним.

POP3(Post Office Protocol Version 3) - прикладний поштовий протокол, використовуваний програмою-клієнтом електронної пошти для отримання кореспонденції з сервера.

IMAP (Internet Message Access Protocol) - протокол прикладного рівня для доступу до електронної пошти з розширеними можливостями.

FTP (File Transfer Protocol) - прикладний протокол, використовуваний для передачі файлів

SSL (Secure Sockets Layer) - криптографічний протокол що забезпечує захищене з'єднання між клієнтом і сервером.

TLS (Transport Layer Security) - відкрита версія протоколу SSL.

Короткі підсумки

1. Протоколи транспортного рівня реалізують розподіл потоків даних між застосуваннями на одному комп'ютері за допомогою портів. Нумерації портів різних протоколів транспортного рівня не перетинаються. Номери портів записуються в заголовок одиниці передачі відповідного транспортного протоколу.

2. Поверх IP використовуються два транспортні протоколи: TCP (для надійної доставки) і UDP (для " швидкої" доставки).

3. Утиліти ss і netstat дозволяють отримати різну інформацію про активні мережеві з'єднання і відкриті порти.

4. Утиліта IPTraf дозволяє в " режимі реального часу" отримувати інформацію про роботу мережі і взаємодію систем один з одним.

5. Для тестування смуги пропускання каналу зв'язку між двома системами можна використовувати утиліту iperf.

6. Більшість протоколів прикладного рівня є текст-орєнтованими (взаємодіючі системи обмінюються текстовими сполученнями один з одним).

11.3. Аналіз мережевого трафіку

11.3.1. Прослуховування" мережевого трафіку

В деяких випадках для виявлення проблем функціонування мережевого стека вузла і сегментів мережі використовується аналіз мережевого трафіку. Існують засоби, які дозволяють відобразити (прослухати) і проаналізувати роботу мережі на рівні фреймів, мережевих пакетів, мережевих з'єднань, датаграм і прикладних протоколів, що передаються.

Залежно від ситуації для діагностики може бути доступний як трафік вузла, на якому проводиться прослуховування мережевого трафіку, так і трафік мережевого сегменту, порту маршрутизатора і т. д. Розширені можливості для перехоплення трафіку засновані на "безладному" (promiscuous) режимі роботи мережевого адаптера : обробляються усі фрейми (а не тільки ті, які призначені цій MAC -адресі і широкомовні, як в нормальному режимі функціонування).

У мережі Ethernet існують наступні основні можливості прослуховування трафіку :

· У мережі на основі концентраторів весь трафік домена колізій доступний будь-якій мережевій станції.

· У мережах на основі комутаторів мережевої станції доступний її трафік, а також увесь широкомовний трафік цього сегменту.

· Деякі керовані комутатори мають функцію копіювання трафіку цього порту на порт моніторингу ("зеркалирование", моніторинг порту).

· Використання спеціальних засобів (відгалужувачів), що включаються в розрив мережевого підключення і передавальних трафік підключення на окремий порт.

· "Трюк" з концентратором - порт комутатора, трафік якого необхідно прослухати, включають через концентратор, підключивши до концентратора також вузол-монітор (при цьому в більшості випадків зменшується продуктивність мережевого підключення).

Існують програми (мережеві монітори або аналізатори, sniffer), які реалізують функцію прослуховування мережевого трафіку (в т.ч. в безладному режимі), відображення його або запису у файл. Додатково ПО для аналізу може фільтрувати трафік на основі правил, декодувати (розшифрувати) протоколи, рахувати статистику і діагностувати деякі проблеми.

Примітка: Хорошим вибором базового інструменту для аналізу мережевого трафіку в графічному середовищі являється безкоштовний пакет wireshark [43], доступний для Windows і в репозиторіях деяких дистрибутивів Linux.

11.3.3. Утиліта tcpdump

Консольна утиліта tcpdump входить до складу більшості Unix -систем і дозволяє перехоплювати і відображувати мережевий трафік [44]. Утиліта використовує libpcap, переносиму C/C++ бібліотеку для перехоплення мережевого трафіку.

Для встановлення tcpdump в Debian можна використовувати команду:

# # apt - get install tcpdump

Для запуску цієї утиліти необхідно мати права суперкористувача (зокрема, у зв'язку з необхідністю перекладу мережевого адаптера в "безладний" режим). У загальному вигляді формат команди має наступний вигляд:

tcpdump <опції> <фільтр-вираження>

Для виведення на консоль опису заголовків (розшифровані дані) перехоплених пакетів необхідно вказати інтерфейс для аналізу трафіку (опція - i ) :

# # tcpdump - i eth0

Можна відключити перетворення IP адрес в доменні імена (оскільки при великих об'ємах трафіку створюється велике число запитів до DNS -серверу) - опція - n:

# # tcpdump - n - i eth0

Для виведення даних канального рівня (наприклад, mac адреси і інше) - опція - e:

# # tcpdump - en - i eth0

Виведення додаткової інформації (наприклад, TTL, опції IP) - опція - v:

# # tcpdump - ven - i eth0

Збільшення розміру захоплюваних пакетів (більше 68 байт за умовчанням) - опція - s з вказівкою розміру ( - s 0 - захоплювати пакети цілком) :

# # tcpdump - s 0

Запис у файл (безпосередньо пакети - "дамп" ) - опція - w з вказівкою імені файлу :

# # tcpdump - w traf.dump

Читання пакетів з файлу - опція - r з вказівкою імені файлу :

# # tcpdump - r traf.dump

За умовчанням tcpdump працює в безладному режимі. Ключ - p вказує tcpdump перехоплювати тільки трафік, призначений цьому вузлу. Додаткову інформацію по ключах і форматі фільтрів tcpdump можна отримати в довідковому керівництві ( man tcpdump ).

11.3.4. Аналіз трафіку на рівні мережевих інтерфейсів і мережевому рівні за допомогою tcpdump

Для виділення Ethernet -фреймів використовуються наступні конструкції tcpdump (загальний вигляд) :

tcpdump ether { src | dst | host } MAC_ADDRESS

де src - MAC -адреса джерела, dst - MAC -адреса призначення, host - src або dst, а також для виділення широкомовного трафіку :

tcpdump ether broadcast

Наприклад:

# # tcpdump - n - i vlan0 ether src 0:2: b3: d8: d8 :2 c# # tcpdump - n - e - i vlan0 ether broadcast

У першому випадку вибираються з інтерфейсу vlan0 фрейми з вказаним MAC -адресом джерела. У другому - вибирається широкомовний трафік на інтерфейсі vlan0.

Фільтрація по IP адресам ( net - мережа, для вказівки маски підмережі - mask ) :

tcpdump { src | dst } { net | host }

Наприклад:

# # tcpdump - n - i eth0 src 192.168.66.1# # tcpdump - n - i eth0 host 192.168.66.1# # tcpdump - n - i eth0 src net 10.0.0.0 mask 255.0.0.0

У першому випадку фільтруються мережеві пакети, в заголовку яких в полі джерело вказане IP -адрес 192.168.66.1. В другому випадку - пакети, в яких цей IP -адрес вказаний як джерело або як одержувач пакету. У третьому - пакети, в яких джерелом вказані вузли мережі 10.0.0.0/8.

Фільтрація по IP протоколу:

tcpdump { arp | rarp | ip | tcp | udp | icmp }

Наприклад, вибирати ICMP -пакеты:

# # tcpdump - n - i eth0 icmp

Складні фільтри можуть містити безліч примітивів, пов'язаних між собою з використанням логічних операторів and, or і not.

Наприклад: host 192.168.12.5 and host 192.168.13.4.

Аналіз роботи протоколу ARP

Використовуємо хостовую систему і віртуальну машину з мережевим адаптером, налаштованим на віртуальну мережу вузла. Встановимо на мережевому адаптері віртуальної машини IP -адрес з тієї ж підмережі, що і на адаптер vboxnet0 (адаптер віртуальної мережі вузла) основної системи.

Налаштування адаптера vboxnet0 в основній системі:

# # ip addr show dev vboxnet05: vboxnet0: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff: ff: ff: ff: ff: ff inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0 inet6 fe80::800:27 ff:fe00 :0/64 scope link valid_lft forever preferred_lft forever

Налаштування мережевого адаптера у віртуальній машині:

# # ip addr show dev eth13: eth1: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27: fd: e5: aa brd ff: ff: ff: ff: ff: ff inet 192.168.56.33/24 scope global eth1 inet6 fe80::a00 :27 ff: fefd: e5aa/64 scope link valid_lft forever preferred_lft forever

Можна перевірити командою ip neigh show dev vboxnet0, що в ARP -таблице основної системи немає записів пов'язаних з інтерфейсом vboxnet0.

Відкриємо ще одну консоль на основній системі і запустимо tcpdump:

# # tcpdump - ne - i vboxnet0tcpdump: verbose output suppressed, use - v or - vv for full protocol decodelistening on vboxnet0, link - type EN10MB (Ethernet), capture size 65535 bytes

Запустимо ping віртуальної машини з основної системи:

# # ping - c 1 192.168.56.33 PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data. 64 bytes from 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms --- --- 192.168.56.33 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.067/1.067/1.067/0.000 ms

У ARP -таблице основної системи з'явилася запис про IP -адресе віртуальної машини :

# # ip neigh show dev vboxnet0192.168.56.33 lladdr 08:00:27: fd: e5: aa STALE

Виведення tcpdump :

# # tcpdump - ne - i vboxnet0tcpdump: verbose output suppressed, use - v or - vv for full protocol decodelistening on vboxnet0, link - type EN10MB (Ethernet), capture size 65535 bytes12:16:29.465780 0a:00:27:00:00:00 > ff: ff: ff: ff: ff: ff, ethertype ARP (0x0806), length 42: Request who - has 192.168.56.33 tell 192.168.56.1, length 2812:16:29.466786 08:00:27: fd: e5: aa > 0a:00:27:00:00:00, ethertype ARP (0x0806), length 42: Reply 192.168.56.33 is - at 08:00:27: fd: e5: aa, length 2812:16:29.466815 0a:00:27:00:00:00 > 08:00:27: fd: e5: aa, ethertype IPv4 (0x0800), length 98: 192.168.56.1 > 192.168.56.33: ICMP echo request, id 5284, seq 1, length 6412:16:29.467934 08:00:27: fd: e5: aa > 0a:00:27:00:00:00, ethertype IPv4 (0x0800) length 98: 192.168.56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64^C4 packets captured4 packets received by filter0 0 packets dropped by kernel

Кожен запис про мережевий пакет в такому форматі містить час перехоплення пакету, MAC -адреса відправника і одержувача, тип протоколу, довжину пакету і зведення про вміст пакету. Перший запис описує широкомовний ARP -запрос з MAC -адреса інтерфейсу vboxnet0 основної системи ("У кого адреса 192.168.56.33 дай відповідь 192.168.56.1"). Другий запис - відповідь з MAC -адреса віртуальної машини на MAC -адрес основної системи ("192.168.56.33 має певний MAC - адреса"). Третя і четверта запису (ICMP -запрос і ICMP -ответ) є результатом роботи команди ping на основній системі.

Таким чином, основна система для того, щоб відправити стандартний ехо-камеру-запит віртуальній машині, заздалегідь по протоколу ARP отримала MAC -адреса віртуальної машини і внесла його з прив'язкою до IP -адресу у свою ARP -таблицу.

Робота tcpdump була перервана комбінацією клавіш Ctrl+C. Перед завершенням роботи tcpdump друкує статистику роботи : кількість перехоплених, отриманих фільтром і відкинутих ядром пакетів.

11.3.5. Аналіз трафіку на транспортному рівні за допомогою tcpdum

Для фільтрації трафіку певного порту на транспортному рівні можна використовувати ключове слово port. Наприклад:

# # tcpdump - n - i eth0 src port 53# # tcpdump - n - i eth0 tcp port 80

У першому випадку відбиратимуться пакети, що несуть одиниці передачі транспортного рівня (TCP або UDP), в яких порт-джерело встановлене в 53. В другому випадку, - пакети з TCP -сегментами, у яких порт джерела або призначення дорівнює 80.

Звернемося з основної системи до WEB -серверу, встановленому на віртуальній машині, :

# # lynx 192.168.56.33

заздалегідь, запустивши tcpdump на іншій консолі:

# # tcpdump - n - i vboxnet0 host 192.168.56.33 and port 80tcpdump: verbose output suppressed, use - v or - vv for full protocol decodelistening on vboxnet0, link - type EN10MB (Ethernet), capture size 65535 bytes15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options [mss 1460, sackOK, TS val 2934847 ecr 0, nop, wscale 7], length 015:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, ack 1209026236, win 5792, options [mss 1460, sackOK, TS val 3275261 ecr 2934847, nop, wscale 2], length 015:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46, options [nop, nop, TS val 2934847 ecr 3275261], length 015:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, ack 1, win 46, options [nop, nop, TS val 2934847 ecr 3275261], length 22115:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, options [nop, nop, TS val 3275262 ecr 2934847], length 015:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, ack 222, win 1716, options [nop, nop, TS val 3275264 ecr 2934847], length 44515:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, win 54, options [nop, nop, TS val 2934848 ecr 3275264], length 015:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446, ack 222, win 1716, options [nop, nop, TS val 3275264 ecr 2934848], length 015:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222 ack 447, win 54, options [nop, nop, TS val 2934848 ecr 3275264], length 015:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, options [nop, nop, TS val 3275265 ecr 2934848], length 0…

Лістинг 11.11 – Аналіз роботи протоколу TCP

У цьому прикладі клієнт (192.168.56.1) c TCP -порта 41533 встановлює з'єднання з сервером (192.168.56.33), що слухає на порту 80, робить запит, отримує необхідні дані і з'єднання завершується.

Заголовок TCP -сегмента, окрім номерів портів одержувача і відправника містить ряд параметрів [7]:

· Номер послідовності ( seq ). Визначає порядок дотримання байт в потоці (зміщення першого байта в сегменті відносно початку потоку даних), що відправляється в мережу.

· Підтверджений номер ( ACK ). Максимальний номер байта в отриманому сегменті збільшений на 1. Що відправляються відправникові підтвердження одночасно служать запитом нової порції даних.

· Прапори ( SYN - S, ACK, FIN - F, RST - R, PSH - P, URG ), що управляють

· Вікно ( win ) - кількість байтів даних, очікуваних відправником даного, починаючи з байта номер якого вказаний в полі ack. Для оптимізації передачі відправник не чекає підтвердження для кожного відправленого сегменту, а може відправити до мережі групу сегменту (але в байтах не більше розміру вікна). Якщо якість каналу погане (багато запитів на повторну передачу, втрачаються підтвердження) вікно зменшується, якщо хороше - вікно збільшується.

· Опції. Використовуються для вирішення допоміжних завдань. Наприклад, передається MSS (Maximum segment size) - максимальний розмір сегменту.

Процес встановлення двонаправленого з'єднання по протоколу TCP являється відбивають перші три записи tcpdump :

· Клієнт відправляє серверу TCP -сегмент з установленым прапором SYN, початковим "випадковим" номером ( 1209026235 ), з якого нумеруватимуться байти в потоці, що відправляється їм, максимальний розмір вікна - об'єм, який дозволено передавати серверу без підтвердження від клієнта (5840), :

15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options [mss 1460, sackOK, TS val 2934847 ecr 0, nop, wscale 7], length

· Сервер відправляє клієнтові TCP -сегмент зі встановленими прапорами SYN і ACK, початковим "випадковим" номером ( 370041518 ), з якого нумеруватимуться байти в потоці, що відправляється їм, і максимальний розмір вікна для клієнта (5792). Цей сегмент також є підтвердженням отримання запиту на встановлення з'єднання від клієнта:

15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, ack 1209026236, win 5792, options [mss 1460, sackOK, TS val 3275261 ecr 2934847, nop, wscale 2], length

· Клієнт відправляє серверу TCP -сегмент зі встановленим прапором ACK, який є підтвердженням отримання сегменту від сервера (далі tcpdump відображує відносні значення seq і ask ), :

15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46 options [nop, nop, TS val 2934847 ecr 3275261], length

Після цього з'єднання вважається встановленим.

У наступній парі записів клієнт передає в секції даних сегменту серверу запит протоколу прикладного рівня (221 байт) і отримує від сервера підтвердження його отримання :

15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, ack 1, win 46, options [nop, nop, TS val 2934847 ecr 3275261], length 22115:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, options [nop, nop, TS val 3275262 ecr 2934847], length 0

При цьому прапор PSH (P) використовується для сповіщення відправляючої сторони про те, що та, що приймає готова приймати дані.

Далі сервер відправляє дані клієнтові (445 байт) і отримує від нього підтвердження отримання :

15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, ack 222, win 1716, options [nop, nop, TS val 3275264 ecr 2934847], length 44515:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, win 54, options [nop, nop, TS val 2934848 ecr 3275264], length 0

Потім за ініціативою сервера з'єднання завершується. Сервер шле сегмент зі встановленим прапором FIN :

15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446 ack 222, win 1716, options [nop, nop, TS val 3275264 ecr 2934848], length 0

Клієнт у відповідь також відправляє сегмент зі встановленим прапором FIN ; цей сегмент одночасно є підтвердженням отримання запиту на завершення з'єднання від сервера:

15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222, ack 447, win 54, options [nop, nop, TS val 2934848 ecr 3275264], length 0

Серверу залишається лише підтвердити отримання FIN -сегмента від клієнта.

15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223 win 1716, options [nop, nop, TS val 3275265 ecr 2934848], length 021:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Flags [S], seq 2956835311 win 5840, options [mss 1460, sackOK, TS val 5164501 ecr 0, nop, wscale 7], length 021:56:14.381688 IP 192.168.56.33.23 > 192.168.56.1.54040: Flags [R.], seq 0, ack 2956835312, win 0, length 0

Лістинг 11.12 – Реакція на спробу підключення до закритого порту TCP

У цьому прикладі з системи 192.168.56.1 робиться спроба підключиться до неіснуючому TCP -сервису на вузлі 192.168.56.33. Видалена система реагує відправкою сегменту зі встановленим прапором RST (скидання з'єднання).

21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28)21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp port 53 unreachable, length 64

Лістинг 11.13 – Реакція на спробу відправки UDP -датаграммы на закритий порт

У цьому прикладі зроблена спроба відправити UDP -датаграмму на неіснуючий порт видаленої системи. Протокол UDP зазвичай реагує відправкою ICMP -сообщения початковому вузлу про недосяжність порту.

Ключові терміни

Безладний (хаотичний) (promiscuous) режим - режим роботи мережевого адаптера, при якому приймаються усі фрейми, а не ті, які призначені цьому вузлу, як в звичайному стані.

Мережевий монітор або аналізатор (sniffer) - засіб для перехоплення і аналізу мережевого трафіку.

Короткі підсумки

1. Для аналізу трафіку вузла (а також для аналізу трафіку мережевого сегменту)

2. можна використовувати спеціальні засоби - мережеві аналізатори або монітори.

3. У Unix -подобных ОС утиліта tcpdump дозволяє виконувати базові операції по перехопленню мережевого трафіку, декодування протоколів, записи і читання мережевого трафіку у файл, фільтрації трафіку для аналізу і т. д.

4. Для аналізу трафіку в графічному режимі користувача можна використовувати пакет wireshark.