# Как установить tampermonkey и скрипт для дебага WebRTC

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

Для запуска пользовательских скриптов в Chrome удобно использовать расширение **Tampermonkey**.

Перейдите в магазин Chrome и установите расширение:

{% embed url="<https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo>" %}

После установки нажмите на значок расширений справа сверху и закрепите **Tampermonkey**.

{% hint style="info" %}
Расширение нужно только для запуска скрипта в браузере. Само по себе оно не устраняет утечки WebRTC.
{% endhint %}

## Как добавить скрипт вручную

Для этой инструкции используйте скрипт из Gist:

* [Скрипт для дебага WebRTC](https://gist.github.com/Kr1tos/26585898c08e5222d5edc3d6fad546be)

{% stepper %}
{% step %}
**Откройте Gist со скриптом**

Перейдите по ссылке на Gist.

Откройте файл со скриптом и полностью скопируйте его содержимое.
{% endstep %}

{% step %}
**Создайте новый скрипт в Tampermonkey**

Нажмите на иконку **Tampermonkey** и выберите **Create a new script**.

Удалите стандартный шаблон, который откроется в редакторе.
{% endstep %}

{% step %}
**Вставьте код скрипта**

Вставьте скопированный код из Gist в редактор Tampermonkey.

Сохраните изменения сочетанием **Ctrl + S** или кнопкой **File → Save**.
{% endstep %}

{% step %}
**Проверьте, что скрипт включен**

Убедитесь, что новый скрипт отображается в списке Tampermonkey и находится в статусе **Enabled**.
{% endstep %}
{% endstepper %}

## Как проверить, что скрипт работает

1. Убедитесь, что переключатель у скрипта включен.
2. Обновите нужную страницу.
3. Откройте DevTools через **F12**.
4. Перейдите во вкладку **Console**.
5. Удобно фильтровать вывод по меткам `\[TM]`, `\[WebRTC]` и `\[NET]`.

### Какие логи должны появиться

Сразу после запуска скрипта обычно появляются служебные сообщения:

```
[TM] Network hooks installed
[TM] WebRTC hook installed
```

Если страница создает `RTCPeerConnection`, в консоли появятся логи по WebRTC:

```
[WebRTC] created
config: { iceServers: [...] }
ICE servers: [...]
```

Во время сбора кандидатов будут видны локальные и удаленные кандидаты:

```
[WebRTC] local candidate raw: candidate:...
[WebRTC] local candidate parsed: { ip: "192.168.1.10", port: "52344", type: "host" }

[WebRTC] remote candidate raw: candidate:...
[WebRTC] remote candidate parsed: { ip: "185.123.45.67", port: "3478", type: "srflx" }
```

Если соединение дошло до выбора маршрута, скрипт покажет итоговый путь:

```
[WebRTC] SELECTED PATH (connectionstatechange)
candidate-pair: { ... }
local-candidate: { ip: "10.0.0.2", port: 54012, protocol: "udp", candidateType: "host" }
remote-candidate: { ip: "185.123.45.67", port: 3478, protocol: "udp", candidateType: "srflx" }
[WebRTC] REAL REMOTE ENDPOINT: { ip: "185.123.45.67", port: 3478, protocol: "udp", candidateType: "srflx" }
```

Если сайт отправляет WebRTC-данные через `fetch`, `xhr`, `WebSocket` или `sendBeacon`, скрипт тоже это покажет:

```
[NET][fetch] https://site.example/api
[NET] SDP detected
v=0
o=- 46117317 2 IN IP4 127.0.0.1
...

[NET][ws] wss://site.example/socket
[NET] ICE detected
{"candidate":"candidate:...","sdpMid":"0","sdpMLineIndex":0}
```

### На что смотреть в первую очередь

* `\[TM] WebRTC hook installed` — скрипт успешно загрузился.
* `\[WebRTC] created` — страница реально создала WebRTC-соединение.
* `\[WebRTC] local candidate parsed` — виден локальный кандидат.
* `\[WebRTC] remote candidate parsed` — виден удаленный кандидат.
* `\[WebRTC] REAL REMOTE ENDPOINT` — самый полезный лог. Он показывает конечную удаленную точку, которую выбрал WebRTC.

### Если логов мало

Этот скрипт добавляет две ручные команды в консоль:

```javascript
__dumpAllWebRTCSelectedPaths()
__dumpAllWebRTCStats()
```

Первая команда повторно выводит выбранные пути.

Вторая показывает полный снимок `candidate-pair`, `local-candidate`, `remote-candidate` и `transport`.

## Полезно проверить после установки

После запуска скрипта можно проверить поведение WebRTC через сервисы из статьи [Через что можно проверить утечку WebRTC](/nashi-produkty/about-udp/webrtc-leak-check-tools.md).

Если хотите понять сам механизм утечки, смотрите статью [Как работает утечка через WebRTC](/nashi-produkty/about-udp/how-webrtc-leak-works.md).


---

# 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://docs.proxyshard.com/nashi-produkty/about-udp/tampermonkey-webrtc-debug.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.
