Tcpdump - моніторимо мережу, rizloff

моніторимо

Досить часто виникає необхідність дізнатися про працездатність мережі. Або просто з загальноосвітньою метою — дізнатися як взаємодіють між собою об'єкти мережі. Або щоб дослідити де сидить страшний bug :). І ось саме для цих цілей у unix-и керують. Тому що все розумне написано для ніксів і вже потім портовано під вінду. Ось про одну таку утиліту ми сьогодні і поговоримо -tcpdump.

tcpdump (від TCP і англ. dump - звалище, скидати) - утиліта UNIX, що дозволяє перехоплювати та аналізувати мережевий трафік, що проходить через комп'ютер, на якому запущена дана програма.

Основні призначення tcpdump:

  • Налагодження мережевих програм.
  • Налагодження мережі та мережевої конфігурації в цілому.

Як працює Tcpdump

Тобто, ми при запуску вказуємо, що ми хочемо знайти в тій горі інформацію, яка проходитиме через інтерфейс. А вказувати потрібно через ключі та вирази.

Опис деяких ключів

Фільтруючий вираз

Вираз вибирає які пакети вибиратимуться із загального потоку. Якщо воно не вказано, то будуть вибиратися і виводиться всі пакети, що йдуть через інтерфейс. Інакше будуть оброблені лише ті пакети, для яких перевірка з виразом видасть значення «істина» (true).

Вираз складається з одного чи більше примітивів. Примітиви зазвичай складаються з ID (ім'я чи номер) наступного за одним чи більше класифікаторами.

Три види класифікаторів:

  • type Кажуть до якого виду відносити ID. Можливе значення host, net або port. Приклад: 'host foo', 'net 128.3', 'port 20'. Якщо класифікатор type не вказаний, мається на увазі host.
  • dir Визначає конкретний напрямокпередачі «до» та/або «від» ID. Можливі значення src, dst, src або dst і src і dst. Приклад, 'src foo', 'dst net 128.3', 'src or dst port ftp-data'. Якщо не вказано, мається на увазі src or dst. Для з'єднань нульового (null) рівня (наприклад, протокол точка-точка, такий як slip) зазначенням напряму можуть бути класифікатори inbound і outbound.
  • proto Обмежує збіг конкретним протоколом. Можливі протоколи: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp та udp. Приклад, 'ether src foo', 'arp net 128.3', 'tcp port 21'. Якщо класифікатор proto не вказано, маються на увазі усі перелічені типи протоколів. Наприклад, 'src foo означає '(ip або arp або rarp) src foo', 'net bar' означає '(ip or arp або rarp) net bar', а 'port 53' означає '(tcp or udp) port 53' .

На додаток, існує кілька спеціальнихпримітивів - ключових слів:gateway,broadcast,less,greater таарифметичні вирази.

Більш складні вирази, що фільтрують, можуть бути побудовані за допомогою слів and, or і not, що поєднують примітиви. Наприклад, 'host foo and not port ftp and not port ftp-data'. Щоб зменшити кількість інформації, що вводиться, ідентичні списки класифікаторів можуть бути опущені. Наприклад, 'tcp dst port ftp or ftp-data or domain' це те саме, що й 'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'

Деякі з допустимих примітивів (за більш повним списком man tcpdump):

Перш ніж переходить до прикладів, розглянемо, що може нам видати tcpdump при виконанні. Типові результати роботиtcpdump -ttt :

Конкретні приклади

  • 1. Ловимо весь вхідний трафік з локальної мережі на сервер. Тут усе просто.

Якщо ви запускаєте його в SSHсесії, то підготуйтеся - поллється дуже багато і дуже швидко ... 2. Ловимо весь вхідний трафік, виключаючи трафік, що генерується нашою SSH-сесією.

Ось тепер у потоці пакетів можна розібратись. 3. Потрібна інформація про DNS-спілкування між сервером та яким-небудь вузлом мережі.

Тут, до речі, бігатиме не тільки DNS-трафік. А взагалі весь, що йде UDP. Виправити це можна так: