Tcpdump http запити. Tcpdump інструкція та приклади. Показати тільки трафік ip6

22.05.2023 Новини

Цей літературу буде показувати, що ізолювати traffic в різних способах — від IP, до порту, до протоколу, до application-layer traffic — щоб зробити виразно, щоб виконати, як завжди потрібно якомога швидше.

tcpdump is the tool everyone should learn as their base для пакета analysis.

Install tcpdump with apt install tcpdump (Ubuntu), або yum install tcpdump (Redhat/Centos)

Let's start with a basic command that will get us HTTPS traffic:

tcpdump -nn S X port 443

04:45:40.573686 IP 78.149.209.110.27782 > 172.30.0.144 .443 : Flags [.], ack 278239097, win 28, options , length 0 0x0 4500 0034 0014 0000 2e06 c005 4e8e d16e E..4........N..n 0x0010: ac1e 0090 6c86 01bb 8e0a b73e 1095 9779 ....l......>...y 0x0020: 8010 001c d202 0000 0101 080a 3803 7b55 ............8.(U 0x0030: 4801 8100

Ви можете отримати single packet with -c 1 , or n number with -c n .

Цей показує деякий HTTPS traffic, with hex display visible on right portion of the output (alas, it's encrypted). Just remember—when in doubt, run the command above with the port you’re interested in, and you should be on your way.

Examples

PacketWizard™ isn’t реально trademarked, but it should be.

a practitioner preparing to run tcpdump

Тепер, що ви можете отримати basic traffic, let's step через численні приклади, що ви є необхідні для виконання вашої роботи в мережі, безпеки, або будь-якого типу PacketWizard™.

Everything on an interface

Just see what’s going on, by looking at what’s hitting your interface.

Or get all interfaces with -i any.

tcpdump -i eth0

Find Traffic by IP

Один з найбільш загальних проблем, використовуючи host , може казати, що йти до або від 1.1.1.1.

Expression Types:

host, net, and port.

src і dst .

host, net, and port.

tcp , udp , icmp , and more more.

tcpdump host 1.1.1.1

06:20:25.593207 IP 172.30.0.144.39270 > one.one.one.one .domain : 12790+ A? google.com. (28) 06:20:25.594510 IP one.one.one.one .domain > 172.30.0.144.39270: 12790 1/0/0 A 172.217.15.78 (44)

Якщо ви тільки хочете перевірити в одному напрямі або іншим, ви можете використовувати src і dst .

tcpdump src 1.1.1.1
tcpdump dst 1.0.0.1

Finding Packets by Network

Для завершення пакетів йти до або від конкретних мереж або subnet, використовувати мережу option.

Ви можете поєднати це з src і dst options як добре.

tcpdump net 1.2.3.0/24

Get Packet Contents with Hex Output

Hex output is useful when you want to content of the packets in question, and it's often best used when you're isolating few candidates for closer scrutiny.

tcpdump -c 1 -X icmp

Summary

Тут є такаways.

  1. tcpdump is valuable tool for anyone looking to get into networking or .
  2. Raw way it interfaces with traffic, combined with precision it offers inspecting packets make it the best possible tool for learning TCP/IP.
  3. Protocol Analyzers як Wireshark є великий, але якщо ви збираєтеся вірно master packet-fu, ви повинні стати одним з tcpdump першим.

Вельми, цей перший повинен отримати, що йде сильний, але людина сторінка повинна бути краще за широке місце для більш широкого і одного з використанням сценаріїв. I truly hope this has been useful to you, and feel free to if you have any questions.

Notes

  1. I'm currently (sort of) писати на book on tcpdump for No Starch Press.
  2. Leading image is from SecurityWizardry.com .
  3. Декілька ізоляційних filtrів borrowed from

Якщо вам необхідно проаналізувати або перехопити мережеві пакети в Linux, то найкраще для цього використовувати консольну утиліту tcpdump. Але проблема виникає у досить складному її управлінні. Пересічному користувачеві здасться, що працювати з утилітою незручно, але це тільки на перший погляд. У статті буде розказано, як влаштовано tcpdump, який синтаксис вона має, як їй користуватися, а також будуть наведені численні приклади її використання.

Читайте також: Посібники з налаштування інтернет-з'єднання в Ubuntu , Debian , Ubuntu Server

Більшість розробників операційних систем на базі Linux включають утиліту tcpdump до списку встановлених, але якщо з якоїсь причини вона у вашому дистрибутиві відсутня, її можна завжди завантажити та встановити через «Термінал». Якщо у вас ОС заснована на Debian, а це Ubuntu, Linux Mint, Kali Linux та подібні до них, потрібно виконати цю команду:

sudo apt install tcpdump

Під час встановлення вам потрібно ввести пароль. Зверніть увагу, що під час набору він не відображається, також для підтвердження установки потрібно ввести символ "Д"та натиснути Enter.

Якщо у вас Red Hat, Fedora або CentOS, то команда для встановлення матиме такий вигляд:

sudo yam install tcpdump

Після того, як утиліта буде встановлена, їй відразу ж можна користуватися. Про це та багато іншого буде розказано далі за текстом.

Синтаксис

Як і будь-яка інша команда, tcpdump має синтаксис. Знаючи його, ви зможете задавати всі необхідні параметри, які враховуватимуться під час виконання команди. Синтаксис має такий вигляд:

tcpdump опції -i інтерфейс фільтри

При використанні команди обов'язково необхідно вказувати інтерфейс для відстеження. Фільтри та опції - це не обов'язкові змінні, але вони дозволяють виконати гнучкіше налаштування.

Опції

Хоча опцію і не обов'язково вказувати, перерахувати доступні все ж таки потрібно. У таблиці продемонстровано не весь їх список, а лише найбільш популярні, але їх вистачить, щоб вирішити більшість поставлених завдань.

Опція Визначення
-A Дозволяє відсортувати пакети з ASCII
-l Додає функцію прокручування
-i Після введення потрібно вказати мережний інтерфейс, який відстежуватиметься. Щоб почати відстежувати всі інтерфейси, впишіть після налаштування слово «any»
-c Завершує процес відстеження після перевірки зазначеної кількості пакетів
-w Генерує текстовий файл із звітом перевірки
-e Показує рівень інтернет-з'єднання пакета даних
-L Виводить лише протоколи, які підтримує вказаний мережевий інтерфейс
-C Створює інший файл під час запису пакета, якщо його розмір більший за заданий
-r Відкриває файл для читання, створений за допомогою опції -w
-j Для запису пакетів використовуватиметься формат TimeStamp
-J Дозволяє переглянути всі доступні формати TimeStamp
-G Для створення файлу з логами. Опція вимагає також вказівки тимчасового значення, після якого буде створюватися новий лог
-v, -vv, -vvv Залежно від кількості символів в опції, виведення команди буде докладніше (збільшення прямо пропорційно кількості символів)
-f У виведенні відображається ім'я домену адрес IP
-F Дозволяє зчитувати інформацію не з мережного інтерфейсу, а із зазначеного файлу
-D Демонструє всі мережеві інтерфейси, які можна використовувати
-n Деактивує відображення доменних імен
-Z Задає користувача, під обліком якого будуть створені всі файли
-K Пропуск аналізу контрольних сум
-q Демонстрація короткої інформації
-H Дозволяє виявити заголовки 802.11s
-I Використовується під час захоплення пакетів у режимі монітора

Розібравши опції, трохи нижче ми перейдемо безпосередньо до їх застосування. А поки що буде розглянуто фільтри.

Фільтри

Як говорилося на початку статті, ви можете додавати в синтаксис tcpdump фільтри. Зараз будуть розглянуті найпопулярніші з них:

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

Приклади використання

Зараз будуть наведені варіанти синтаксису команди tcpdump, що часто використовуються. Всі їх перерахувати не вийде, тому що їх варіацій може бути безліч.

Перегляд списку інтерфейсів

Рекомендується кожному користувачеві перевірити список всіх його мережевих інтерфейсів, які можна відстежити. З наведеної вище таблиці ми знаємо, що для цього потрібно використовувати опцію -D, тому в терміналі виконайте таку команду:

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

Звичайне захоплення трафіку

Якщо потрібно відстежити один мережний інтерфейс, зробити це ви можете за допомогою опції -i. Не забудьте після введення вказати найменування інтерфейсу. Ось приклад виконання такої команди:

sudo tcpdump -i ppp0

Зверніть увагу: перед самою командою потрібно вписати "sudo", оскільки вона вимагає права суперкористувача.

Примітка: після натискання Enter в Терміналі безперервно відображатимуться перехоплені пакети. Щоб зупинити їхній потік, потрібно натиснути комбінацію клавіш Ctrl+C.

Якщо ви виконуєте команду без додаткових опцій та фільтрів, побачите наступний формат відображення відстежених пакетів:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags , seq 1:595, ack 1118, win 6494, options , length 594

Де кольором виділено:

  • синім – час отримання пакета;
  • зеленим – адреса відправника;
  • фіолетовим - адреса одержувача;
  • сірим - додаткова інформація про tcp;
  • червоний - розмір пакета (відображається в байтах).

Цей синтаксис має можливість виводу у вікні «Термінала»без використання додаткових опцій.

Захоплення трафіку з опцією -v

Як відомо з таблиці, опція -vдозволяє збільшити кількість інформації. Розберемо з прикладу. Перевіримо той самий інтерфейс:

sudo tcpdump -v -i ppp0

Тут можна помітити, що з'явився наступний рядок у висновку:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags , proto TCP (6) , length 52

Де кольором виділено:

  • помаранчевим – версія протоколу;
  • синім – тривалість життя протоколу;
  • зеленим – довжина заголовка поля;
  • фіолетовим - версія пакета tcp;
  • червоним – розмір пакету.

Також у синтаксис команди ви можете прописати опцію -vvабо -vvv, що дозволить ще більше збільшити обсяг інформації, що виводиться на екран.

Опція -w та -r

У таблиці опцій згадувалося про можливість зберігати всі дані, що виводяться в окремий файл, щоб пізніше їх можна було переглянути. За це відповідає опція -w. Користуватися їй досить просто, всього лише вкажіть її в команді, а потім впишіть назву майбутнього файлу з розширенням ".pcap". Розглянемо все на прикладі:

sudo tcpdump -i ppp0 -w file.pcap

Зверніть увагу: під час запису логів у файл на екрані Терміналу не відображається жодний текст.

Коли ви захочете переглянути записаний висновок, необхідно використовувати опцію -r, після якої написати назву раніше записаного файлу. Застосовується вона без інших опцій та фільтрів:

sudo tcpdump -r file.pcap

Обидві ці опції відмінно підійдуть у тих випадках, коли необхідно зберегти великі обсяги тексту для подальшого аналізу.

Фільтрування по IP

З таблиці фільтрів ми знаємо, що dstдозволяє вивести на екран консолі лише пакети, отримані адресою, що вказано у синтаксисі команди. Таким чином, дуже зручно переглядати пакети, отримані вашим комп'ютером. Для цього в команді потрібно лише вказати свою IP-адресу:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Як можна помітити, крім dst, у команді ми прописали також фільтр ip. Іншими словами, ми сказали комп'ютеру, щоб при відборі пакетів він звертав увагу на їхню IP адресу, а не на інші параметри.

За IP можна відфільтрувати і пакети, що відправляються. У прикладі наведемо знову наш IP. Тобто зараз ми відстежимо, які пакети надсилаються з нашого комп'ютера на інші адреси. Для цього потрібно виконати таку команду:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Як можна помітити, у синтаксисі команди ми змінили фільтр dstна srcтим самим сказавши машині, щоб вона шукала відправника по IP.

Фільтрування по HOST

За аналогією з IP у команді ми можемо вказати фільтр host, щоб відсіяти пакети з хостом, що цікавить. Тобто в синтаксисі замість IP-адреси відправника/отримувача потрібно буде вказувати його хост. Виглядає це так:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

На зображенні можна побачити, що в «Терміналі»відображаються лише ті пакети, які були надіслані з нашого IP на хост google.com. Як можна зрозуміти, замість хоста google, можна вписати будь-який інший.

Як і у випадку з фільтрацією по IP, у синтаксисі dstможна замінити на src, щоб побачити пакети, які відправляються на ваш комп'ютер:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Зверніть увагу: host host повинен стояти після dst або src, інакше команда видасть помилку. У випадку з фільтрацією IP, навпаки, dst і src стоять перед фільтром ip.

Застосування фільтра and та or

Якщо у вас виникає необхідність використовувати відразу кілька фільтрів в одній команді, то для цього потрібно застосовувати фільтр andабо or(Залежить від випадку). Вказуючи фільтри в синтаксисі і поділяючи їх цими оператором, ви змусите працювати їх як один. На прикладі це виглядає так:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

Із синтаксису команди видно, що ми хочемо вивести на екран «Термінала»всі пакети, які були надіслані на адресу 95.47.144.254 та пакети, отримані цією ж адресою. Також ви можете змінювати деякі змінні у цьому виразі. Наприклад, замість IP вказати HOST або замінити безпосередньо адреси.

Фільтр port та portrange

Фільтр portвідмінно підійде у випадках, коли необхідно отримати інформацію про пакети з певним портом. Так, якщо вам потрібно побачити лише відповіді або запити DNS, потрібно вказати порт 53:

sudo tcpdump -vv -i ppp0 port 53

Якщо ви хочете переглянути пакети http, потрібно ввести порт 80:

sudo tcpdump -vv -i ppp0 port 80

Крім іншого, є можливість відстежити одночасно діапазон портів. Для цього застосовується фільтр portrange:

sudo tcpdump portrange 50-80

Як можна помітити, у зв'язці з фільтром portrangeне обов'язково вказувати додаткові опції. Достатньо лише задати діапазон.

Фільтрування за протоколами

Ви також можете вивести на екран лише той трафік, який відповідає протоколу. Для цього потрібно використовувати як фільтр найменування цього самого протоколу. Розберемо на прикладі udp:

sudo tcpdump -vvv -i ppp0 udp

Як можна побачити на зображенні, після виконання команди в «Терміналі»відобразились лише пакети з протоколом udp. Відповідно, ви можете здійснити фільтрацію і за іншими, наприклад, arp:

sudo tcpdump -vvv -i ppp0 arp

або tcp:

sudo tcpdump -vvv -i ppp0 tcp

Фільтр net

Оператор netдопомагає відфільтрувати пакети, беручи за основу позначення їхньої мережі. Користуватися ним так само просто, як і рештою – потрібно в синтаксисі вказати атрибут net, після чого вписати адресу мережі. Ось приклад такої команди:

sudo tcpdump -i ppp0 net 192.168.1.1

Фільтрування за розміром пакета

Ми не розглянули ще два цікаві фільтри: lessі greater. З таблиці з фільтрами ми знаємо, що вони служать для виведення пакетів даних більше ( less) чи менше ( greater) розміру, вказаного після введення атрибуту.

Допустимо ми хочемо стежити лише за пакетами, які не перевищують позначку в 50 біт, тоді команда матиме такий вигляд:

sudo tcpdump -i ppp0 less 50

Тепер давайте відобразимо в «Терміналі»пакети, розмір яких більше 50 біт:

sudo tcpdump -i ppp0 greater 50

Як можна помітити, застосовуються вони однаково, різниця лише у назві фільтра.

Висновок

Після закінчення статті можна зробити висновок, що команда tcpdump- це відмінний інструмент, за допомогою якого можна відстежити будь-який пакет даних, що передається по інтернету. Але для цього недостатньо просто ввести саму команду в «Термінал». Досягти бажаного результату вдасться лише у випадку, якщо використовувати всілякі опції та фільтри, а також їх комбінації.

tcpdump – потужний аналізатор командного рядка та Libpcap, портативна бібліотека для захоплення мережевого трафіку. Tcpdump виводить опис вмісту пакетів на мережному інтерфейсі, які відповідають логічному виразу. Він також може бути запущений з ключем -w, який викликає його, щоб зберегти пакетні дані у файл для подальшого аналізу, та / або з -r прапором, який викликає його для читання зі збереженого файлу пакета. За допомогою цієї утиліти можна перехоплювати і аналізувати мережевий трафік який проходить через ПК на якому запущена дана програма.

Хотілося б поговорити в цій темі «установка та використання tcpdump» про встановлення tcpdump, а також як ним користуватися і для чого він потрібен.

За допомогою tcpdump можна:

  • Можна налагодити мережеві програми.
  • Можна налагоджувати мережу або мережеве обладнання в цілому.

Щоб встановити tcpdump на debian/ubuntu/linux mint, потрібно виконати:

# sudo apt-get install tcpdump

Для встановлення tcpdump на RedHat/CentOS/Fedora використовуйте:

# sudo yum install tcpdump

Для встановлення tcpdump на MacOS використовуйте.

# brew install tcpdump

Використання tcpdump.

Щоб перевірити, чи працює у нас tcpdump можна виконати команду:

# tcpdump -i eth0 port 80

Існує досить багато ключів для використання самої утиліти tcpdump, наведу список найпоширеніших:

Якщо потрібно дізнатися якими пакетами обмінюється 21 сервер (наприклад your_server_1 і your_server_2), то для цього служить команда:

# tcpdump host your_server_1 and your_server_2

Якщо потрібно відстежувати лише вихідні пакети з хоста, виконайте:

# tcpdump src host your_server

Якщо потрібно відстежувати лише вхідні пакети з хоста, виконайте:

# tcpdump dst host your_server

Також можна прослуховувати вихідні або вхідні пакети з сервера і по певному порту для цього просто додайте порт, який потрібно прослуховувати (в основному використовується 80, 8080).

список інтерфейсів, за якими tcpdumt можете слухати:

# tcpdump -D

Слухати інтерфейс eth0:

# tcpdump -i eth0

Слухати на будь-якому доступному інтерфейсі (Потрібно ядро ​​Linux версії 2.2 або вище):

# tcpdump -i any

Виведення всього на екран (все, що виконується програмою):

# tcpdump -v

Висновок багато чого на екран (все, що виконується програмою):

# tcpdump -vv

Висновок дуже багато всього на екран (все, що виконується програмою):

# tcpdump -vvv

Виводити не багато інформації коли йде захоплення пакетів (не як стандартний):

# tcpdump -q

Обмежити захоплення пакетів до 100:

# tcpdump -c 100

Записати всі дані (перехоплені пакети) у файл із ім'ям capture.cap:

# tcpdump -w capture.cap

Записати всі дані (перехоплені пакети) у файл із ім'ям capture.cap і вивести на екран у режимі реального часу:

# tcpdump -v -w capture.cap

Виведення пакетів із файлу capture.cap:

# tcpdump -r capture.cap

Виведення пакетів із файлу capture.cap використовуючи максимально багато інформації:

# tcpdump -vvv -r capture.cap

Виведення IP та порти замість доменів йде захоплення пакетів:

# tcpdump -n

Захоплення будь-яких пакетів, де хост призначення - 192.138.1.1. Виведення ІП та порти на екран:

# tcpdump -n dst host 192.138.1.1

# tcpdump -n src host 192.138.1.1

Захоплення будь-яких пакетів з хоста 192.138.1.1. Виведення ІП та порти на екран:

# tcpdump -n host 192.138.1.1

Захоплення пакетів де мережа 192.138.1.0/24. Виведення ІП та порти на екран:

# tcpdump -n dst net 192.138.1.0/24

# tcpdump -n src net 192.138.1.0/24

Захоплення пакетів із мережі 192.138.1.0/24. Виведення ІП та порти на екран:

# tcpdump -n net 192.138.1.0/24

Захоплення пакетів з порту 23. Виведення ІП та порти на екран:

# tcpdump -n dst port 23

Захоплення пакетів з портів 1 по 1023. Виведення ІП та порти на екран:

# tcpdump -n dst portrange 1-1023

Захоплювати тільки TCP пакети де destination на портах 1 по 1023. Виведення ІП та порти на екран:

# tcpdump -n tcp dst portrange 1-1023

Захоплювати тільки UDP пакети де destination на портах 1 по 1023. Виведення ІП та порти на екран:

# tcpdump -n udp dst portrange 1-1023

Захоплення пакетів з destination де ІП 192.138.1.1 та destination порт якого 23. Виведення на екран:

# tcpdump -n "dst host 192.138.1.1 and dst port 23"

Захоплення пакетів з destination де ІП 192.138.1.1 та destination по портах 80 або 443. Виводимо на екран:

# tcpdump -n "dst host 192.138.1.1 and (dst port 80 or dst port 443)"

Захоплення будь-яких пакетів ICMP:

# tcpdump -v icmp

Захоплення будь-яких пакетів ARP:

# tcpdump -v arp

Захоплення будь-яких ICMP або ARP пакетів:

# tcpdump -v "icmp or arp"

Захоплення будь-яких пакетів які broadcast або multicast:

# tcpdump -n "broadcast or multicast"

Захоплення великих пакетів (500 байт), а не стандартних 68б:

# tcpdump -s 500

Захоплення всіх байт даних у пакеті:

# tcpdump -s 0

Перегляд «важких пакетів»:

# tcpdump -nnvvXSs 1514

Захоплення пакетів ICMP з ping та pong:

# tcpdump -nnvXSs 0 -c2 icmp

Висновок без багатьох варіантів:

# tcpdump -nS

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

# tcpdump -nnvvS

Глибокий погляд на трафік, додає -X для корисного навантаження:

# tcpdump -nnvvXS

Перегляд важкого пакета і збільшує snaplength, захоплюючи весь пакет:

# tcpdump -nnvvXSs 1514

Ви також можете фільтрувати на основі певних частин пакету, а також об'єднати кілька умов в групи. Це корисно при пошуку тільки SYNs або РСТ, наприклад, і останній ще більш розширений ізоляцією трафіку.

Показати мені всі пакети URGENT (URG):

# tcpdump "tcp & 32!=0"

Показати мені всіACKNOWLEDGE (ACK) пакети:

# tcpdump "tcp & 16! = 0"

Показати мені всі PUSH (PSH) пакети:

# tcpdump "tcp & 8!=0"

Показати мені всі RESET (RST) пакети:

# tcpdump "tcp & 4!=0"

Показати мені всі SYNCHRONIZE (SYN) пакети:

# tcpdump "tcp & 2!=0"

Показати все FINISH (FIN) пакети:

# tcpdump "tcp & 1!=0"

Показати мені всі SYNCHRONIZE/ACKNOWLEDGE (SYNACK) пакети:

# tcpdump "tcp=18"

Захоплення TCP Flags використовуючи tcpflags:

# tcpdump "tcp & & tcp-syn! = 0"

Пакети з прапорами RST і SYN (перевірка):

# tcpdump "tcp = 6"

Трафік з 'Evil Bit"(перевірка):

# tcpdump "ip & 128! = 0"

На цьому я завершу свою статтю "установка та використання tcpdump", сподіваюся все ясно і зрозуміло.

Для UNIX-систем є безліч найрізноманітніших сніферів та аналізаторів трафіку зі зручним графічним інтерфейсом та багатим набором функцій. Але жоден з них не може зрівнятися у гнучкості, універсальності та поширеності зі старим як світ tcpdump. Ця утиліта входить до складу багатьох дистрибутивів Linux та всіх BSD-систем з коробки та зможе виручити тебе, коли інші кошти будуть недоступні.

Вступ

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

Tcpdump з'явився на світ майже 25 років тому в університеті Берклі, який досі активно розвивається і продовжує залишатися еталоном серед подібних інструментів для операційної системи UNIX. Розроблена спеціально для нього бібліотека захоплення пакетів libpcap сьогодні використовується майже кожним сніффером для UNIX-систем і багатьма аналогічними програмами для Windows.

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

Наодинці з консоллю

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

# tcpdump -i wlan0 -c 10 -n

Ключ -n вимикає перетворення IP-адрес на DNS-імена. Тепер спробуємо відстежити обмін тільки з конкретним хостом, наприклад, з домашнім роутером:

# tcpdump -i wlan0 -c 10 -n host 192.168.0.1 and port 53

Давай подивимося, що нам вивів tcpdump, на прикладі двох рядків, представлених на скріншоті «DNS-запит очима tcpdump». Можна легко зрозуміти, що це DNS-запит (порт 53) з хоста 192.168.0.101 хосту 192.168.0.1 та наступна за ним відповідь. Але що означають усі інші цифри та знаки?


Цифри 16:22:41.340105 - це час відправлення пакету, включаючи мільйонні частки секунди (так званий frac). Дві літери IP, як неважко здогадатися, ідентифікують використовуваний протокол мережного рівня, далі йдуть адреса: порт відправки та адреса: порт призначення пакета. Все, що йде після двокрапки, безпосередньо залежить від протоколу транспортного або прикладного рівня. З деякими протоколами tcpdump знайомий і вміє розшифровувати їх до зрозумілого виду людини, інші він залишає як є і просто наводить вміст пакета. У цьому випадку tcpdump розшифрував DNS-повідомлення та повернув рядок 49244+ A? ya.ru. (23) , що означає: надіслано запит (A?) адреси, асоційованого з ім'ям ya.ru., загальна довжина пакета за вирахуванням TCP/IP-заголовків склала 23 байт. Перша цифра – це ідентифікатор запиту.

У наступному рядку ми бачимо відповідь, формат подання якої практично аналогічний запиту, з тією лише різницею, що тепер після ідентифікатора запиту йде інформація про кількість знайдених записів (8/2/3) та самі записи (A 213.180.204.3, A 77.88.21.3 , А 87.250.250.3...).

В арсеналі tcpdump є підтримка багатьох протоколів, завдяки чому він може подати в читаному вигляді інформацію про протоколи TCP, UDP та ICMP, SMB/CIFS, NFS, AFS, AppleTalk. Але що, якщо tcpdump нічого не знає про протокол прикладного рівня або не може визначити його? У звичайній ситуації він просто виведе інформацію про пакет. Вона може виглядати приблизно так:

Flags [.], seq 3666073194:3666074622, ack 3281095139, win 2000, options , length 1428

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

  • flags - встановлені прапори. Позначаються символами S(SYN), F(FIN), P(PUSH) та R(RST), точка означає відсутність встановлених прапорів;
  • data-seqno - описує дані, що містяться в пакеті, в такому форматі: first:last, де first і last - номер послідовності першого і останнього байта даних, що передаються, nbytes;
  • ack – наступний номер послідовності (ISN + 1);
  • window – розмір вікна;
  • options - тут можуть бути вказані додаткові відомості, наприклад (максимальний розмір сегмента);
  • length – довжина пакета.

Всі ці дані можуть бути дуже корисними під час вивчення або налагодження протоколів та мережевих додатків, однак вони нічого нам не говорять про його вміст. Щоб побачити вміст пакета у шістнадцятковому форматі, слід застосувати прапорець -X:

# tcpdump -i wlan0 -c 10 -n -X host 192.168.0.1 and port 80

Цю функцію дуже зручно використовуватиме аналізу протоколів, у яких передача даних йде відкритим текстом, наприклад HTTP. Для бінарних протоколів та протоколів із шифруванням вона, звичайно ж, буде марною.
Крім того, для отримання додаткової інформації про пакет можна використовувати прапорець -v. Тоді після IP у дужках з'явиться докладна інформація про IP-пакет:

(tos 0x0, ttl 64, id 8339, offset 0, flags , proto UDP (17), length 51)

Загалом тут все досить прозаїчно. Спочатку йде тип обслуговування (TOS), далі життя пакета (TTL), ідентифікатор пакета, зміщення від початку першого пакета в ланцюжку, прапори, використовуваний прокол транспортного рівня (TCP, UDP, ICMP) і довжина.


Просунуті можливості

Ми вже розглянули більшість найважливіших можливостей tcpdump, але його функціональність набагато ширша. Наприклад, ми використовували оператори host і port для вказівки потрібних нам адреси та порту для фільтрації виводу, але що, якщо нам треба побачити лише пакети, що йдуть до вказаної адреси, але не виходять з неї? Для цього можна використовувати оператор src:

# tcpdump -i wlan0 -c 10 -n src 192.168.0.1

Існує і його зворотний варіант dst, призначений для вказівки адреси призначення. Як було показано вище, всі оператори можна комбінувати за допомогою оператора and (моніторинг мережного трафіку, за винятком SSH-сесії та DNS-запитів):

# tcpdump -i wlan0 port not 22 and port not 53

Також можна використовувати or (або) та except (не). Крім того, tcpdump розуміє діапазони портів:

# tcpdump -i wlan0 -c 10 -n portrange 21-23

Вміє відфільтровувати пакети за їх розміром:

# tcpdump -i wlan0 -c 10 -n > 32 and<= 128

І розуміє маски підмереж:

# tcpdump -i wlan0 c 10 -n src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Одна з найцікавіших можливостей tcpdump – це вміння фільтрувати пакети за змістом конкретних бітів або байтів у заголовках протоколів. Для цього використовується такий формат: proto, де proto - протокол, expr - усунення в байтах від початку заголовка пакета, а size - необов'язкове поле, що вказує на довжину даних (за замовчуванням 1 байт). Наприклад, щоб відфільтрувати лише пакети зі встановленим прапором SYN (ініціація TCP-рукостискання), слід використовувати такий запис:

# tcpdump "tcp==2"

Як це працює? Дуже просто. 13 байт TCP-заголовка містить прапори, рівно вісім штук, по біту на кожен. Під прапор SYN відведено другий біт. Наведений запис просто перевіряє факт встановлення цього біта. До речі, більш читаний вигляд цього запису виглядатиме так:

# tcpdump "tcp & tcp-syn! = 0"

Практичне використання

Утиліту tcpdump прийнято використовувати для двох цілей: для налагодження мережі, мережевих додатків та нових протоколів та для навчання основ TCP/IP. Ми підемо іншим шляхом і скористаємось можливостями tcpdump для виявлення фактів сканування хоста та проведення мережевих атак.

На рис. 1 показано, як виглядає класичний TCP-скан портів, виконаний утилітою Nmap, у логах tcpdump. Відомо, як Nmap з адреси 192.168.0.100 намагається встановити TCP-з'єднання з різними портами, посилаючи SYN-пакет (S у полі прапорів). Спочатку йде проба порту 8888, у відповідь приходить RST-пакет, а це означає, що порт не прослуховується жодним сервісом, далі проба порту 587 з тим самим результатом. Нарешті Nmap посилає SYN-пакет на 22-й порт (SSH) і отримує відповідь у вигляді пакету SYN-ACK:

192.168.0.100.43337 > 192.168.0.111.22: Flags [S], seq 2610024277, ... 192.168.0.111.22 > 192.168.0.100.433 2610024278, ... 192.168.0.100. 43337 > 192.168.0.111.22: Flags [.], ack 1, ...

Порт відкритий, і тепер Nmap може успішно закрити з'єднання за допомогою надсилання пакета RST і перейти до наступних портів. Однак він робить розумніший: посилає підтвердження прийому ACK-пакета і відразу переходить до наступних портів. Така поведінка дозволяє обійти деякі системи виявлення вторгнень, але людину, озброєну сніффером, так просто не проведеш.

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



Тепер розглянемо інший спосіб виявлення відкритих портів - SYN-сканування (nmap -sS). Такий вид скана прийнято називати прихованим, тому що під час його ніколи не встановлюється повне TCP-з'єднання, а отже інформація про факт з'єднання не потрапляє в логи. Висновок tcpdump для такого виду скана подано на рис. 2. Він дуже схожий на лог звичайного TCP-сканування, проте реакція сканера на відкриті порти тепер інша:

192.168.0.100.48585 > 192.168.0.111.22: Flags [S], seq 1679394613, ... 192.168.0.111.22 > 192.168.0.100.485 679394614, ... 192.168.0.100. 48585 > 192.168.0.111.22: Flags [R], seq 1679394614, ...

Видно, що після отримання схвального пакету SYN-ACK сканер не завершує встановлення з'єднання, а відразу обриває його, уникаючи потрапляння в логі. На рис. 3 можна побачити результат UDP-сканування. Тут все дуже просто, Nmap перебирає порти з можливими UDP-сервісами, посилаючи кожен з них пакет нульової довжини. Якщо порт закритий, ОС посилає відповідь ICMP unreachable:

16:41:48.798310 IP 192.168.0.100.61020 > 192.168.0.111.18869: UDP, length 0 16:41:48.798346 IP 192.168.0.1.1.1.1 168.0.100 udp port 18869 unreachable, length 36

Інакше порт вважається відкритим. Ще один метод сканування: null-сканування за допомогою відправлення пакетів, які не містять жодного встановленого прапора (nmap -sN). Реакція на такі пакети може бути різною залежно від ОС, але, як видно з наступного лістингу, Linux відповідає на них посилкою RST-пакетів:

192.168.0.100.39132 > 192.168.0.111.256: Flags , win 3072, length 0 192.168.0.111.256 > 192.168.0.100.39132:

Також атакуючий може застосовувати Xmas-сканування, при якому пакети мають встановлені прапори FIN, URG і PUSH (пакет світиться прапорами, як новорічна ялинка):

192.168.0.100.35331 > 192.168.0.111.5544: Flags , seq 3998959601, win 4096, urg 0, length 0 192.168.0.111.5534 > , seq 0, ack 3998959602

Як бачимо, реакція такі пакети ідентична. ACK-сканування (-sA) буде виглядати в логах tcpdump як відправлення безлічі пакетів із встановленим прапором ACK та відповідь на них у вигляді посилки пакетів RST. Однак, якщо в системі встановлено брандмауер, повідомлень у відповідь приходити не буде, і Nmap зможе зрозуміти, чи фільтрується порт.

За допомогою tcpdump можна також відстежити різні види флуду. Наприклад, класичний ICMP-флуд у логах виглядатиме так:

16:43:06.008305 IP 192.168.0.100 > 192.168.0.111: ICMP type-#68, length 1032 16:43:06.008383 IP 192.168.0.1.1 1:8. length 1032 16:43:06.008714 IP 192.168.0.100 > 192.168.0.111: ICMP type-#183, length 1032 16:43:06.008831 IP 192.168.0.100 > 192.168.0.111: IC

p align="justify"> Особливу важливість тут має поле, що містить час прийому пакета. Жодна нормальна програма не надсилатиме безліч ICMP-повідомлень за проміжок часу, що дорівнює одній тисячній секунді. Інші види флуду (наприклад, SYN) визначаються так само.

Взаємодія з іншими програмами

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

$ssh [email protected] tcpdump -w - "port! 22" | wireshark -k -i -

Тут ми використали опцію -w - для запису дампа у стандартний висновок і перенаправили його wireshark, що працює на локальній машині. Так само можна проаналізувати трафік за допомогою snort:

$ssh [email protected]"tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -

Перенаправивши виведення програми на вхід grep, можна знайти різні проблеми в роботі мережі, наприклад, виявити пакети з неправильною контрольною сумою, вивести інформацію про яку можна за допомогою прапора -vv:

# tcpdump -nnvv -r dump.cap tcp | grep-v "tcp sum ok" | wc –l

Адмінські штучки

Можливість фільтрації пакетів за даними, що містяться в заголовку, яку ми розглянули на початку першого розділу, дуже зручно використовувати для налагодження різних протоколів та пошуку проблем мережі. Наприклад, ми можемо застосувати її для вилову мережевих пакетів, що передаються за протоколом Cisco Discovery Protocol, за яким маршрутизатори Cisco обмінюються інформацією про топологію та стан мережі:

# tcpdump -nn -v -i eth0 -s 1500 -c 1 "ether == 0?2000"

Так само можна виловити всі пакети, що передаються за протоколом DHCP (DISCOVER, REQUEST, INFORM), щоб виявити проблеми підключення клієнтів:

# tcpdump -i eth0 -vvv -s 1500 "((port 67 або port 68) and (udp = 0x1))"

Або зловити пакети, що передаються в рамках POP3-автентифікації:

# tcpdump -i eth0 "tcp port pop3 and ip = 85 and ip = 83" -s 1500 -n

Мережевий grep

Сніффер tcpdump гарний своєю універсальністю і різноманітністю можливостей, проте для пошуку конкретних даних усередині пакетів, що передаються, його використовувати не так просто і зручно. З цим завданням набагато краще справляється ngrep, призначений для відображення мережних пакетів, що проходять, що задовольняють заданій масці.

Наприклад, щоб знайти параметри, що передаються методами GET і POST у рамках HTTP-сесії, можна використати таку команду:

# ngrep -l -q -d eth0 "^GET |^POST" tcp and port 80

Виявляємо ледарів:

# ngrep -i "game*|p0rn|adult" -W byline -d eth0 > slackers.txt

Аналізуємо SMTP-трафік на всіх мережевих інтерфейсах:

# ngrep -i "rcpt to|mail from" tcp port smtp

Опції tcpdump

Таблиця найбільш цікавих та корисних прапорів tcpdump.

  • -i [інтерфейс] - мережний інтерфейс, що прослуховується, для всіх слід вказати any.
  • -n - не перетворювати IP-адреси на DNS-імена.
  • -nn - не перетворювати IP-адреси та номери портів.
  • -X - показувати вміст пакета у текстовому та шістнадцятковому форматах.
  • -XX - те саме плюс вміст Ethernet-фрейму.
  • -v, -vv, -vvv - збільшити кількість інформації і пакетів (більше, ще більше, все).
  • -c [n] – показувати лише перші n пакетів.
  • -s [n] - кількість байтів, які відображаються для кожного пакета (можна зменшити для зручності читання або збільшити для отримання більшої інформації).
  • -S – показувати абсолютні номери TCP-послідовності (TCP sequence numbers).
  • -e - Показувати заголовки Ethernet-фреймів.
  • -q - Показувати менше інформації (для зручності читання).
  • -E – розшифрувати IPsec-трафік за допомогою вказаного ключа.
  • -w - зберегти дамп програми у файл, аргумент - використовується для вказівки stdout.

Висновки

У руках знаючого користувача tcpdump перетворюється на найпотужніший інструмент не лише налагодження, а й дослідження аномалій. Завдяки багатому набору операторів та прапорів за його допомогою можна витягнути з мережевого ефіру та дослідити те, що дійсно потрібно.

tcpdumpінструкція російською та приклади.

-Aзадає вихід кожного пакета (без заголовків канального рівня) у форматі ASCII. Цей режим зручний для збирання трафіку HTTP.

-c <число пакетов>задає завершення роботи програми після захоплення заданої кількості пакетів.

-C<размер файла>визначає необхідність перевірки розміру файлу захоплення перед записом у нього кожного нового пакета. Якщо розмір файлу перевищує значення параметра file_size, файл закривається
і створюється новий файл для запису пакетів. Для файлів захоплення використовується ім'я, задане параметром -w і починаючи з другого файлу до імені додається як
Суфікс номер файлу. Змінна file_size визначає розмір файлу в мільйонах байтів (не в мегабайтах = 1 048 576 байт).

-dзадає висновок дампа скомпільованого коду відповідності пакетів (packet-matching code) у зрозумілому людині форматі та завершення роботи програми.

-ddвиводить дамп коду відповідності у вигляді фрагмента C-програми.

-dddвиводить дамп коду відповідності у вигляді рядка десяткових значень, перед яким слідує рядок зі значенням лічильника.

-Dвиводить список мережевих інтерфейсів системи, із яких tcpdump може збирати пакети. Для кожного мережного інтерфейсу вказується ім'я та номер, за якими може йти
текстовий опис інтерфейсу. Ім'я та номер інтерфейсу можуть використовуватись з прапором -i для завдання збору пакетів з одного інтерфейсу.

Ця опція може бути дуже корисною для систем, що не дають інформації про наявні мережеві інтерфейси3.

Прапор -D не підтримується, якщо програма tcpdump була скомпільована зі старою версією libpcap, яка не підтримує функцію pcap_findalldevs().

-eвиводить заголовок канального рівня у кожному рядку дампа.

-Eзадає використання алгоритму та секрету spi@ipaddr для розшифрування пакетів IPsec ESP, спрямованих за адресою ipaddr і які містять and у полі Security Parameter Index значення
spi. Комбінація spi та адреси може бути повторена з використанням як роздільник коми або нового рядка. Зазначимо, що встановлення секрету для пакетів IPv4 ESP
В даний час підтримується.

Як алгоритми можуть використовуватися des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc або none. За промовчанням застосовується алгоритм des-cbc. Можливість дешифрування
пакетів забезпечується тільки у випадках, коли при компіляції tcpdump були включені опції підтримки криптографії.

Параметр secret містить ASCII-текст секретного ключа ESP. Якщо секрет починається з символів 0x, зчитуватиметься шістнадцяткове значення. Опція передбачає використання
ESP відповідно до RFC 2406, а не RFC 1827. Ця опція підтримується тільки для налагодження і використовувати її з реальними секретними ключами не слід, оскільки введений в
командному рядку ключ IPsec доступний іншим користувачам системы4.

Крім явної вказівки параметрів у командному рядку, їх можна задати у файлі опцій, який tcpdump читатиме при отриманні першого пакета ESP.

-fзадає виведення чужих адрес IPv4 в числовому форматі. Використання цієї опції дозволяє позбавитися проблем, що виникають на серверах Sun NIS при спробах трансляції
нелокальних адрес. Перевірка чужорідності адреси IPv4 здійснюється з використанням адреси і маски інтерфейсу, що прийняв пакет. Якщо адреса та маска інтерфейсу недоступні
(наприклад, при використанні unnumbered-інтерфейсів або при захопленні пакетів з усіх адрес в Linux з використанням фіктивного інтерфейсу any), ця опція буде працювати
некоректно.

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

-i<интерфейс> задає збирання пакетів із зазначеного інтерфейсу. Якщо інтерфейс не заданий, tcpdump шукає в системі список доступних інтерфейсів і вибирає активний пристрій з мінімальним.
номером (за винятком loopback).

У системах Linux, починаючи з ядра 2.2, підтримується фіктивний інтерфейс з ім'ям any, що забезпечує збір пакетів з усіх активних інтерфейсів системи. Зазначимо, що збір
пакетів з пристрою any здійснюється у звичайному (не promiscuous) режимі.

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

-lзадає буферизацію рядків stdout. Ця опція корисна у випадках, коли ви хочете переглядати дані під час збору пакетів. Наприклад, команди

tcpdump-l | tee dat

tcpdump -l > dat & tail -f dat

забезпечують запис пакетів у файл dat та одночасний виведення на консоль.

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

-m<файл> завантажує модуль визначень SMI MIB із зазначеного файлу. Ця опція може бути використана неодноразово для завантаження декількох модулів MIB.

-nвимикає перетворення адрес та номерів портів на символьні імена.

-Nзадає використання лише імен хостів, а чи не повних доменних імен. Наприклад, замість lhotze.bilim-systems.net під час використання цієї опції моя робоча станція буде
позначатися як lhotze.

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

-pвказує на програму, що інтерфейс не потрібно переводити в режим захоплення5. Опцію -p не можна використовувати разом із фільтром ether host (local-hw-addr) або ether broadcast.

-qзадає виведення мінімального обсягу інформації.

-Rпри установці цього прапора передбачається, що пакети ESP/AH використовують старий варіант специфікації6 і tcpdump не виводитиме поля replay prevention (захист від
відтворення). Оскільки специфікація ESP/AH не включає поля з номером версії, tcpdump не може визначити версію протоколу ESP/AH за заголовками пакетів.

-r<файл> задає читання даних із файлу, створеного раніше за допомогою команди tcpdump -w або за допомогою іншої програми, що підтримує формат tcpdump (наприклад, Ethereal). Якщо в
як ім'я файлу заданий символ - використовується потік даних від стандартного пристрою введення (stdin).

-Sзадає виведення абсолютних порядкових номерів TCP замість відносних.

-sзадає захоплення з кожного пакета snaplen байтів замість 68 байтів, що відбираються за замовчуванням7. Значення 68 підходить для протоколів IP, ICMP, TCP і UDP, але може призводити до втрати
протокольної інформації для деяких пакетів DNS та NFS. Втрата частини пакетів внаслідок малого розміру кадру захоплення (snapshot) вказується у вихідних даних полями виду
[|proto]’, де proto – ім'я протокольного рівня, у якому відбулося відсічення частини пакета8. Зазначимо, що збільшення кадру захоплення призведе до додаткових тимчасових
витрат на обробку пакетів і зменшення кількості пакетів, що буферизуються, що може призвести до втрати частини пакетів. Використовуйте мінімальне значення snaplen, яке дозволить
обійтися без втрати інформації про протокол, що вас цікавить. Установка snaplen = 0 спричинить захоплення повних пакетів.

-T<тип> визначає інтерпретацію пакетів, вибраних за допомогою фільтра, як пакетів зазначеного параметром типу. В даний час підтримуються типи aodv9, cnfp10, rpc11, rtp12, rtcp13,
snmp14, tftp15, vat16 та wb17.

-tвідключає виведення тимчасових міток у кожному рядку дампа.

-ttзадає висновок у кожному рядку дампа неформатованих тимчасових міток.

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

-ttttзадає виведення тимчасових міток у прийнятому за промовчанням форматі кожного рядка дампа.

-uвизначає виведення маніпуляторів (handle) NFS без декодування.

-Uзадає режим "буферизації на рівні пакетів" для файлів, які зберігаються за допомогою опції -w. У цьому режимі кожен пакет записується у вихідний файл, як тільки він буде захоплений
(Не чекаючи заповнення вихідного буфера). Прапор -U не підтримуватиметься, якщо програма tcpdump була скомпільована зі старою опцією libpcap, яка не підтримує функцію
pcap_dump_flush().

-vзадає виведення додаткової інформації під час захоплення файлів. До такої інформації може належати значення TTL (час життя), ідентифікація, загальний розмір, опції IP тощо.
Використання цього прапора також виконує додаткову перевірку цілісності пакетів за допомогою контрольних сум (наприклад, для протоколів IP та ICMP).

-vvзадає додаткове збільшення обсягу інформації, що виводиться (наприклад, повне декодування пакетів SMB, виведення додаткових полів відгуків NFS і т. п.).

-vvvзадає максимальний обсяг інформації, що виводиться (наприклад, повністю виводяться опції telnet SB ... SE). При використанні разом із ключем -X опції Telnet виводяться також у
шістнадцятковому поданні.

-w<файл> задає запис необроблених (raw) пакетів. Зібрані у файл пакети можна згодом переглядати за допомогою прапора -r або передавати для аналізу іншим програмам
(Наприклад, Ethereal). Якщо в якості імені файлу вказано символ, запис здійснюється на стандартний пристрій виведення (stdout).

-xзадає висновок шістнадцяткового дампа (без заголовка канального рівня) для кожного захопленого пакета. Обсяг інформації, що виводиться, визначається меншим із двох значень —
розмір пакета та значення параметра snaplen. Зазначимо, що при захопленні повних кадрів канального рівня дамп може включати байти заповнення, якщо пакет мережевого рівня
має мінімальний розмір.

-xxзадає висновок шістнадцяткового дампа для кожного пакета з включенням заголовків канального рівня.

-Xзадає виведення дампа в шістнадцятковому та ASCII-форматі без заголовків канального рівня. Ця опція може бути дуже зручною при аналізі нових протоколів.

-XXзадає виведення дампа в шістнадцятковому та ASCII-форматі з включенням заголовків канального рівня.

-y<тип> задає тип канального рівня, що використовується під час захоплення пакетів. Підтримувані значення можна переглянути за допомогою прапорця -L.

приклади.

  • Ловимо весь вихідний трафік

tcpdump -i re0 -n -nn -ttt dst host 192.168.1.2

  • Ловимо весь вихідний трафік крім нашої ssh сесії для дуже великого потоку даних виходить.

tcpdump -i re0 -n -nn -ttt 'dst host 192.168.1.110 and not (src host 192.168.1.2 and dst port 22)'

  • Перегляд спілкування dns

tcpdump -i re0 -n -nn -ttt 'host 192.168.1.110 and port 53'

  • Перегляд icmp пакетів

tcpdump -i re0 -n -nn -ttt 'ip proto \icmp'

  • Трафік, що переходить з мережі 10.7.20 із призначенням на мережі 10.7.0. або 10.7.24.

tcpdump -nvX src net 10.7.20.0.0/16 та dst net 10.7.0.0/8 or 10.7.24.0/16

  • Трафік, що йде з мережі 10.7.0.0 на порти призначення 22 або 4589:

tcpdump 'src 10.7.0.0 and (dst port 22 or 4589)'

  • Переглянути трафік на інтерфейсі:
  • подивитися трафік одного хоста:

tcpdump host 192.168.1.1

  • Переглянути трафік на порті:

tcpdump src port 80

  • Переглянути IP трафік на хост:

tcpdump ip host 192.168.1.2

  • Переглянути ARP трафік на хост:

tcpdump arp host 192.168.1.2

  • Дивимося RARP трафік на хост:

tcpdump rarp host 192.168.1.2

  • Дивимося трафік, окрім хоста pav253

tcpdump not host pav253

  • Дивимося трафік на pav253 та pav210

tcpdump host pav253 or host pav210

  • Дивимося вміст пакетів на інтерфейсі re0 на сайт

tcpdump -X -i re0 host сайт

  • icq трафік

tcpdump -X -i re0 port aol

  • Дивимося вміст пакетів на інтерфейсі tun0 на хост ya.ru, при цьому прочитати з кожного пакета по 1500 байт і не перетворювати IP на ім'я хоста

tcpdump -X -s 1500 -n -i re0 host сайт

  • Top активних дій

tcpdump -tn -c 10000 -i re0 tcp або udp | awk -F «.» ‘(print $1″.»$2″.»$3″.»$4)’ | \ sort | uniq-c | sort-nr | awk ‘$1 > 100’

  • Дивимося всі TCP пакети із прапором SYN (початок сесії).

tcpdump -i eth0 -nn tcp == 2 and src net 192.168.1.0/24

  • Перегляд syn і fin пакетів з поза

tcpdump 'tcp & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0'

  • Перегляд всі ipv4 http пакети з порту 80, крім syn / fin / ack даних

tcpdump 'tcp port 80 and (((ip - ((ip&0xf))<>2)) != 0)’

  • Переглянути тільки syn пакети