# Работа с TCPDump

<figure><img src="/files/m4syFtavp6bUs2qsUYwi" alt=""><figcaption></figcaption></figure>

## Установка TCPDump <a href="#ustanovka-tcpdump" id="ustanovka-tcpdump"></a>

Для Ubuntu/Debian:

```
apt install tcpdump
```

Для **Red Hat** / **CentOS**:

```
sudo yum install tcpdump
```

## Аргументы для команды <a href="#argumenty-dlya-komandy" id="argumenty-dlya-komandy"></a>

{% hint style="info" %}
**-c** — завершает сбор пакетов после достижения установленного количества.

**-C** — позволяет установить максимальный размер файла дампа, после достижения которого будет создан новый файл.

**-e** — выводит информацию об уровне соединения для каждого обработанного пакета.

**-F** — вывод пакетов из заданного файла, а не интерфейса.

**-f** — отображает доменное имя для каждого IP-адреса.

**-G** — создает новый файл дампа через указанное время.

**-H** — создает ограничение, ввиду которого **TCPDump** будет обрабатывать только заголовки **802.11s**.

**-i** — имя интерфейса, с которого будут собираться пакеты. Для использования всех интерфейсов сервера укажите значение **any**.

**-I** — включает режим мониторинга для указанного интерфейса (для обнаружения всех проходящих пакетов).

**-E** — используется для расшифровки трафика **IPSEC** (необходимо указать ключ для расшифровки).

**-K** — отключает проверку контрольных сумм пакетов.

**-L** — вывод поддерживаемых протоколов подключения для указанного интерфейса.

**-n** — пропуск доменных имен в дампе.

**-nn** — вывод адресов вместе с их портами.

**-q** — минимализация выводимой информации о пакетах.

**-tttt** — отображает для каждого пакета временные метки в стандартном формате.

**-v, -vv, -vvv** — более подробный вывод информации о пакетах.

**-Z** — пользователь системы, от имени которого будет создаваться файл дампа.

**-w** — имя файла, в который будет сохранен дамп (по умолчанию без этого аргумента дамп выводится в реальном времени без записи в файл).
{% endhint %}

## Использование <a href="#ispolzovanie" id="ispolzovanie"></a>

Чтобы не засорять наш дамп лишними пакетами, следует выбрать конкретный интерфейс, с которого мы хотим собрать информацию, а не все. Посмотреть список всех интерфейсов можно при помощи данной команды:

```
tcpdump -D
```

<figure><img src="/files/AoSuIAiLgoPWcIXBYECZ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
На наших **виртуальных серверах** основным сетевым интерфейсом является **ens3**.
{% endhint %}

Для вывода логов нашего сетевого интерфейса в реальном времени используем команду:

```
tcpdump -i ens3
```

{% hint style="warning" %}
Не забывайте, что для **TCPDump** требуются права суперпользователя, поэтому данные команды следует выполнять от имени **root**, либо с использованием **sudo**.
{% endhint %}

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

{% hint style="info" %}
Собранные пакеты данных имеют примерно такой вид:

`22:31:56.330185 IP fsn.qwins.co.65383 > fsn.qwins.co.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.qwins.co.65383 > fsn.qwins.co.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 %}

## Аргументы фильтрации <a href="#argumenty-filtracii" id="argumenty-filtracii"></a>

Также не менее мощной функцией являются дополнительные аргументы, благодаря которым мы можем отсеивать разные типы пакетов по следующим параметрам:

{% 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 %}

## Расширенные операторы <a href="#rasshirennye-operatory" id="rasshirennye-operatory"></a>

Помимо всего прочего, в **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
```

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


---

# Agent Instructions: 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:

```
GET https://wiki.qwins.co/nastroika-seti-i-bezopasnost/rabota-s-tcpdump.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
