> For the complete documentation index, see [llms.txt](https://spacecore.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://spacecore.gitbook.io/wiki/ua/network-and-security-configuration/tcpdump.md).

# Робота з TCPDump

Ця утиліта є корисним інструментом для перехоплення та збору пакетів, що приходять на сервер та йдуть з нього.<br>

## Установка TCPDump

Для Ubuntu/Debian:

```
apt install tcpdump
```

Для Red Hat / CentOS:

```
sudo yum install tcpdump
```

## Аргументи для команди

{% hint style="info" %}

* `-c` — завершує збір пакетів після досягнення встановленої кількості.
* `-C` — дозволяє встановити максимальний розмір файлу дампа, після досягнення якого буде створено новий файл.
* `-e` — відображає інформацію рівня з'єднання для кожного обробленого пакета.
* `-F` — виведення пакетів із зазначеного файлу, а не з інтерфейсу.
* `-f` — відображає доменне ім'я для кожної IP-адреси.
* `-G` — створює новий файл дампа після вказаного часу.
* `-H` — створює обмеження, що тільки заголовки 802.11s будуть оброблятися TCPDump.
* `-i` — ім'я інтерфейсу, з якого будуть збиратися пакети. Щоб використовувати всі інтерфейси сервера, вкажіть значення `any`.
* `-I` — увімкнення режиму моніторингу для вказаного інтерфейсу (для виявлення всіх проходячих пакетів).
* `-E` — використовується для дешифрування IPSEC трафіку (потрібно вказати ключ для дешифрування).
* `-K` — вимикає перевірку контрольних сум пакетів.
* `-L` — відображає підтримувані протоколи з'єднання для вказаного інтерфейсу.
* `-n` — вивід дампа без перетворення IP-адрес у доменні імена.
* `-nn` — вивід адрес разом із їх портами.
* `-q` — мінімізація інформації про пакети у виводі.
* `-tttt` — відображає часові мітки для кожного пакета у стандартному форматі.
* `-v`, `-vv`, `-vvv` — більш детальне відображення інформації про пакети.
* `-w` — ім'я файлу, у якому буде збережено дамп (за замовчуванням без цього аргументу дамп відображається у реальному часі без запису у файл).
  {% endhint %}

## Використання

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

```
tcpdump -D
```

<figure><img src="/files/9frYFykpQTJR1TAF7RNO" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
На наших віртуальних серверах (VDS) основний мережевий інтерфейс — це`ens3`
{% endhint %}

Щоб відобразити журнали нашого мережевого інтерфейсу в режимі реального часу, використовуйте команду:

```
tcpdump -i ens3
```

{% hint style="warning" %}
Не забувайте, що TCPDump вимагає прав root, тому слід виконувати ці команди від імені root або використовуючи `sudo`.
{% endhint %}

Після використання команди ми побачимо багато рядків, що біжать, для зупинки дампа використовуйте комбінацію клавіш Ctrl + C.

{% hint style="info" %}
Зібрані пакети даних мають приблизно такий вигляд:

`22:31:56.330185 IP fsn.spacecore.network.65383 > fsn.spacecore.network.ssh: Flags [P.], seq 7841:7905, ack 10730080, win 6145, length 64`

Але при використанні різних протоколів пакет може мати різні особливості всередині.&#x20;
{% endhint %}

Спробуйте побачити більше інформації про пакети, використовуючи аргумент `-v`:

```
tcpdump -i ens3 -v
```

{% hint style="info" %}
Тепер наші пакети мають більш масивну структуру такого типу:

`22:36:42.254306 IP (tos 0x0, ttl 122, id 61139, offset 0, flags [DF], proto TCP (6), length 104) fsn.spacecore.network.65383 > fsn.spacecore.network.ssh: Flags [P.], cksum 0x2699 (correct), seq 321:385, ack 1027616, win 6141, length 64`

У цьому випадку ви можете побачити більше інформації про протокол IP-адреси:

P (tos 0x0, ttl 122, id 61139, offset 0, flags \[DF], proto TCP (6)
{% endhint %}

## Аргументи для фільтрації

Не менш потужною особливістю є додатковий аргумент, який дозволяє фільтрувати різні типи пакетів за такими параметрами:

{% hint style="info" %}

* `host` — ім'я хоста.
* `ip` — IP-адреса.
* `port` — порт.
* `proto` — протокол.
* `net` — адреса мережі або підмережі.
* `src` — джерело.
* `dst` — одержувач.

Доступні протоколи: `tcp`, `udp`, `icmp`, `arp`, `rarp`, `decnet` тощо. Ці аргументи також можна комбінувати.
{% endhint %}

Наприклад, ми можемо переглянути всі пакети, які йдуть з нашого сервера до кінцевої адреси:

```
tcpdump dst 192.168.1.1
```

Навпаки, всі пакети, що надсилаються на наш сервер із джерела підмережі (ви також можете використовувати конкретну IP-адресу, як у прикладі вище):

```
tcpdump src net 192.168.1.1/24
```

Ви можете використовувати аргументи для знаходження пакетів потрібного розміру:

```
tcpdump less 48 // пакеты меньше 48 бит
tcpdump greater 128 // пакеты больше 128 бит
```

Припустимо, у вас є кілька серверів Garry's Mod на різних портах, і ви хочете перевірити, чи не піддаються вони зараз атаці DDoS. Для цього підійде команда:

```
tcpdump -nnv udp src portrange 27015-27025 -w garrysmod.dump
```

{% hint style="warning" %}
Зверніть увагу на зазначений діапазон портів.

Опція `-w` дозволяє зберегти дамп у файл `garrysmod.dump`.
{% endhint %}

## Розширені оператори

Крім того, TCPDump має оператори для створення різних комбінацій аргументів.

{% hint style="info" %}

* `AND` чи `&&` (оператор «І»)
* `OR` чи `||` (оператор «АБО»)
* `EXCEPT` чи `!` (оператор «ВИКЛЮЧЕННЯ»)
  {% endhint %}

Припустимо, ми хочемо вивести весь трафік запитів MySQL, які надсилає `192.168.1.1` на порт `3306` (до будь-яких адрес):

```
tcpdump -nnv src 192.168.1.1 and tcp dst port 3306
```

## Завершення

Дякуємо за ознайомлення! Ми детально розглянули TCPDump, який є дуже корисним інструментом, що є невід'ємною частиною роботи мережевих інженерів, а також обов'язково стане в нагоді звичайним користувачам.

Ви можете використовувати програму для читання пакетів на Windows за допомогою [WireShark](https://www.wireshark.org/).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://spacecore.gitbook.io/wiki/ua/network-and-security-configuration/tcpdump.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
