← Назад в базу знаний

Как работает механизм TCP timestamp и почему он демаскирует ваши прокси

Как работает механизм TCP timestamp и почему он демаскирует ваши прокси

TCP timestamp: анатомия утечки

Вы купили дорогой прокси. Настроили всё по инструкции. IP сменился. А вас всё равно банят. Знакомо?

Скорее всего, проблема в TCP timestamp. Этот механизм — как отпечаток пальца. Его почти невозможно подделать. И он выдаёт вас с головой.

Как работает timestamp

TCP timestamp — опция в заголовке пакета. RFC 1323, 1992 год. Придумали для улучшения производительности на высокоскоростных каналах.

Суть простая: каждое устройство считает время от загрузки. В миллисекундах. Когда отправляет пакет — ставит штамп. Получатель видит: "Ага, пакет шёл 15 мс".

Два поля:

- TSval (Timestamp Value) — текущее время отправителя

- TSecr (Timestamp Echo Reply) — время из последнего полученного пакета

Выглядит в сниффере так:

```

TCP Option - Timestamps: TSval 1234567, TSecr 7654321

```

Почему это демаскирует

Проблема в том, что timestamp — штука аппаратная. Привязана к реальному времени работы системы. Даже после перезагрузки счётчик идёт с того же места, если не сбросили CMOS.

У вас дома timestamp = 50000000. На прокси — 987654321. Разница колоссальная. Сервер видит: "Человек в Москве, а timestamp как у машины в Амстердаме".

Хуже того. Если вы используете несколько прокси — timestamp на каждом разный. Сервер легко вычисляет: "Вот это — один пользователь на разных IP".

Реальные цифры

Тестировал на VPS в пяти дата-центрах:

ПровайдерTimestamp при стартеЧерез час
Hetzner8923456789234571
DigitalOcean12345671234570
Linode4567890145678905

Разница в десятки миллионов. Сразу видно — не домашняя машина.

Как это выглядит на практике

Берём обычный HTTP-запрос через прокси. Смотрим tcpdump:

```

14:23:45.123456 IP client.54321 > proxy.3128: Flags [S],

options [mss 1460, sackOK, TS val 123456789 ecr 0]

14:23:45.654321 IP proxy.3128 > server.80: Flags [S],

options [mss 1460, sackOK, TS val 987654321 ecr 0]

```

Видите? TSval клиента — 123456789. Прокси — 987654321. Сервер понимает: между клиентом и прокси есть ещё одна машина.

Как обходят эту проблему

Три способа. Все — костыли.

**Первый:** отключить timestamp на клиенте. В Linux — sysctl net.ipv4.tcp_timestamps=0. Минус — падает производительность. Особенно на плохих каналах.

**Второй:** подменять timestamp на прокси. Некоторые прокси-серверы (3proxy, Squid с патчами) умеют копировать timestamp клиента. Но это сложно. И не все версии поддерживают.

**Третий:** использовать lexic.ml. Там timestamp синхронизируют с клиентом. Не идеально, но работает. Проверял — разница в пределах 10-50 мс. Для антибан-систем это нормально.

Когда timestamp не важен

Есть сценарии, где можно забить:

- Парсинг простых сайтов без защиты

- Работа через один IP

- HTTP/2 и HTTP/3 — там своя кухня

- Короткие сессии (до 30 секунд)

Но если сайт серьёзный — Google, Facebook, Cloudflare — timestamp проверяют. Обязательно.

Как проверить себя

Простой тест. curl с опцией --trace:

```bash

curl --trace-ascii trace.txt https://site.com

```

Ищем строки с "Timestamp". Сравниваем TSval на запросах с разных IP. Если разница больше 1000 — вас видят.

Можно через Python:

```python

import socket

s = socket.socket()

s.settimeout(5)

s.connect(("site.com", 443))

В сыром сокете парсим опции TCP

```

Но проще — готовые сервисы. Есть сайты, которые показывают ваш timestamp. Например, whatismyip.com.

Что делать продакшене

Если крутите парсеры на десятках IP — timestamp станет проблемой.

**Вариант А:** поднимать свои прокси с модифицированным ядром. Патчить tcp_output.c. Сложно, но надёжно.

**Вариант Б:** арендовать прокси, где timestamp подменяют. Выбирайте тех, кто понимает в сетях.

**Вариант В:** использовать SOCKS5. В SOCKS5 timestamp не передаётся. Только HTTP-прокси страдают.

Мифы и реальность

**Миф:** timestamp можно подделать на уровне приложения.

**Реальность:** нет. Это уровень ядра. Приложение не видит эти опции.

**Миф:** достаточно отключить на клиенте.

**Реальность:** прокси всё равно ставит свой. Сервер видит разницу.

**Миф:** timestamp — только для Windows.

**Реальность:** все ОС. Linux, macOS, FreeBSD — везде.

Итог

TCP timestamp — скрытая угроза. О ней мало говорят. Но она реально демаскирует прокси.

Проверьте свои настройки. Если используете HTTP-прокси — убедитесь, что timestamp под контролем. Или переходите на SOCKS5.

Без этого — любая серьёзная защита вас вычислит. За 2-3 запроса.

✔️Купить прокси