> 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

{% hint style="danger" %}

### Дані застаріли

**База знань переїхала →** [**https://wiki.spacecore.pro/**](https://wiki.spacecore.pro/)

Ця вікі більше не оновлюється. Актуальні інструкції та статті — за новою адресою.
{% endhint %}

{% content-ref url="<https://wiki.spacecore.pro/>" %}
<https://wiki.spacecore.pro/>
{% endcontent-ref %}

***

Ця утиліта є корисним інструментом для перехоплення та збору пакетів, що приходять на сервер та йдуть з нього.<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`

Але при використанні різних протоколів пакет може мати різні особливості всередині.
{% 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/).
