Документация API I2PControl
————-проверить добавить материал————--
I2PControl — это JSON-RPC 2.0 API, встроенный в I2P router (начиная с версии 0.9.39). Он обеспечивает аутентифицированный мониторинг и управление router через структурированные JSON-запросы.
Пароль по умолчанию:
itoopie— это заводская настройка по умолчанию, которая должна быть изменена немедленно для обеспечения безопасности.
1. Обзор и доступ
| Реализация | Эндпоинт по умолчанию | Протокол | Включено по умолчанию | Примечания |
|---|---|---|---|---|
| Java I2P (2.10.0+) | http://127.0.0.1:7657/jsonrpc/ | HTTP | ❌ Должно быть включено через WebApps (Router Console) | Веб-приложение в комплекте |
| i2pd (реализация на C++) | https://127.0.0.1:7650/ | HTTPS | ✅ Включено по умолчанию | Поведение устаревшего плагина |
В случае Java I2P вам необходимо перейти в Router Console → WebApps → I2PControl и включить его (настроить автоматический запуск). После активации все методы требуют предварительной аутентификации и получения токена сессии.
2. Формат JSON-RPC
{
"jsonrpc": "2.0",
"id": "1",
"method": "MethodName",
"params": {
/* named parameters */
}
}
Все запросы следуют структуре JSON-RPC 2.0:
{
"jsonrpc": "2.0",
"id": "1",
"result": { /* data */ }
}
Успешный ответ включает поле result; при неудаче возвращается объект error:
{
"jsonrpc": "2.0",
"id": "1",
"error": {
"code": -32001,
"message": "Invalid password"
}
}
или
3. Процесс аутентификации
Запрос (Аутентификация)
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "Authenticate",
"params": {
"API": 1,
"Password": "itoopie"
}
}' \
http://127.0.0.1:7657/jsonrpc/
Успешный ответ
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"Token": "a1b2c3d4e5",
"API": 1
}
}
| Поле | Направление | Тип | Описание |
|---|---|---|---|
API | Запрос | long | Версия API I2PControl, запрашиваемая клиентом. Используйте 1. |
Password | Запрос | String | Пароль, используемый для аутентификации в I2PControl. |
API | Ответ | long | Основная версия API, реализованная сервером. |
Token | Ответ | String | Токен аутентификации, используемый в последующих запросах. |
Вы должны включать этот Token во все последующие запросы в params.
4. Методы и конечные точки
4.1 RouterInfo
Получает ключевую телеметрию о router.
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "2",
"method": "RouterInfo",
"params": {
"Token": "a1b2c3d4e5",
"i2p.router.version": "",
"i2p.router.status": "",
"i2p.router.net.status": "",
"i2p.router.net.tunnels.participating": "",
"i2p.router.net.bw.inbound.1s": "",
"i2p.router.net.bw.outbound.1s": ""
}
}' \
http://127.0.0.1:7657/jsonrpc/
Пример запроса
Перечисление кодов состояния (i2p.router.net.status)
| Ключ | Тип | Описание |
|---|---|---|
i2p.router.status | Строка | Свободный формат, перевод статуса маршрутизатора, предназначенный для отображения. |
i2p.router.uptime | long | Время работы маршрутизатора в миллисекундах. В более старых версиях i2pd может возвращаться строка. |
i2p.router.version | Строка | Полная версия маршрутизатора. |
i2p.router.net.status | long | Код сетевого статуса; см. таблицу ниже. |
i2p.router.net.bw.inbound.1s | double | Текущая входящая пропускная способность в байтах в секунду. |
i2p.router.net.bw.inbound.15s | double | Средняя входящая пропускная способность за 15 секунд в байтах в секунду. |
i2p.router.net.bw.outbound.1s | double | Текущая исходящая пропускная способность в байтах в секунду. |
i2p.router.net.bw.outbound.15s | double | Средняя исходящая пропускная способность за 15 секунд в байтах в секунду. |
i2p.router.net.tunnels.participating | long | Количество туннелей, в которых участвует этот маршрутизатор. |
Перечисление кода состояния (i2p.router.net.status)
| Код | Значение |
|---|---|
| 0 | OK |
| 1 | ТЕСТИРОВАНИЕ |
| 2 | ЗА БРАНДМАУЭРОМ |
| 3 | СКРЫТЫЙ |
| 4 | ПРЕДУПРЕЖДЕНИЕ_БРАНДМАУЭР_И_БЫСТРЫЙ |
| 5 | ПРЕДУПРЕЖДЕНИЕ_БРАНДМАУЭР_И_FLOODFILL |
| 6 | ПРЕДУПРЕЖДЕНИЕ_БРАНДМАУЭР_С_ВХОДЯЩИМ_TCP |
| 7 | ПРЕДУПРЕЖДЕНИЕ_БРАНДМАУЭР_С_ОТКЛЮЧЕННЫМ_UDP |
| 8 | ОШИБКА_I2CP |
| 9 | ОШИБКА_РАСХОЖДЕНИЯ_ВРЕМЕНИ |
| 10 | ОШИБКА_ПРИВАТНЫЙ_TCP_АДРЕС |
| 11 | ОШИБКА_СИММЕТРИЧНЫЙ_NAT |
| 12 | ОШИБКА_ПОРТ_UDP_ЗАНЯТ |
| 13 | ОШИБКА_НЕТ_АКТИВНЫХ_ПИРОВ_ПРОВЕРЬТЕ_СОЕДИНЕНИЕ_И_БРАНДМАУЭР |
| 14 | ОШИБКА_UDP_ОТКЛЮЧЕН_И_TCP_НЕ_НАСТРОЕН |
Поля сети и участников
| Ключ | Тип | Описание |
|---|---|---|
i2p.router.netdb.knownpeers | long | Количество известных пиров, исключая локальный маршрутизатор. |
i2p.router.netdb.activepeers | long | Количество активных пиров. |
i2p.router.netdb.fastpeers | long | Количество пиров, классифицированных как быстрые. |
i2p.router.netdb.highcapacitypeers | long | Количество пиров, классифицированных как высокой ёмкости. |
i2p.router.netdb.isreseeding | boolean | Выполняется ли повторная загрузка (reseed). |
Поля ответа (result) Согласно официальной документации (GetI2P): - i2p.router.status (String) — понятный для человека статус - i2p.router.uptime (long) — миллисекунды (или строка для более старых i2pd) :contentReference[oaicite:0]{index=0} - i2p.router.version (String) — строка версии :contentReference[oaicite:1]{index=1} - i2p.router.net.bw.inbound.1s, i2p.router.net.bw.inbound.15s (double) — входящая пропускная способность в Б/с :contentReference[oaicite:2]{index=2} - i2p.router.net.bw.outbound.1s, i2p.router.net.bw.outbound.15s (double) — исходящая пропускная способность в Б/с :contentReference[oaicite:3]{index=3} - i2p.router.net.status (long) — числовой код статуса (см. enum ниже) :contentReference[oaicite:4]{index=4} - i2p.router.net.tunnels.participating (long) — количество участвующих tunnel :contentReference[oaicite:5]{index=5} - i2p.router.netdb.activepeers, fastpeers, highcapacitypeers (long) — статистика узлов netDB :contentReference[oaicite:6]{index=6} - i2p.router.netdb.isreseeding (boolean) — активна ли пересинхронизация :contentReference[oaicite:7]{index=7} - i2p.router.netdb.knownpeers (long) — общее количество известных узлов :contentReference[oaicite:8]{index=8} |
4.2 GetRate
| Параметр | Тип | Описание |
|---|---|---|
Stat | Строка | Название RateStat маршрутизатора. |
Period | long | Период измерения в миллисекундах. |
| Используется для получения метрик скорости (например, пропускная способность, успешность tunnel) за заданный временной интервал. |
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "3",
"method": "GetRate",
"params": {
"Token": "a1b2c3d4e5",
"Stat": "bw.combined",
"Period": 60000
}
}' \
http://127.0.0.1:7657/jsonrpc/
Пример запроса
{
"jsonrpc": "2.0",
"id": "3",
"result": {
"Result": 12345.67
}
}
Пример ответа
4.3 RouterManager
| Параметр | Результат | Описание |
|---|---|---|
Restart | null | Запускает немедленную перезагрузку маршрутизатора. |
RestartGraceful | null | Перезагружает после истечения срока действия участвующих туннелей. |
Shutdown | null | Инициирует немедленное выключение маршрутизатора. |
ShutdownGraceful | null | Выключает после истечения срока действия участвующих туннелей. |
Reseed | null | Запускает повторную инициализацию маршрутизатора (reseed). |
FindUpdates | boolean или String | Блокирующий. Ищет подписанное обновление маршрутизатора. |
Update | String | Блокирующий. Запускает подписанное обновление маршрутизатора и возвращает его финальный статус. |
| Выполнять административные действия. |
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "4",
"method": "RouterManager",
"params": {
"Token": "a1b2c3d4e5",
"Restart": true
}
}' \
http://127.0.0.1:7657/jsonrpc/
Разрешённые параметры / методы - Restart, RestartGraceful - Shutdown, ShutdownGraceful - Reseed, FindUpdates, Update :contentReference[oaicite:10]{index=10}
{
"jsonrpc": "2.0",
"id": "4",
"result": {
"Restart": null
}
}
Пример запроса
4.4 NetworkSetting
Успешный ответ
| Ключ | Принимаемое значение | Описание |
|---|---|---|
i2p.router.net.ntcp.port | Строка, 1–65535 | Порт NTCP; для применения изменения требуется перезапуск. |
i2p.router.net.ntcp.hostname | Строка | Имя хоста NTCP; для применения изменения требуется перезапуск. |
i2p.router.net.ntcp.autoip | always, true или false | Автоматический выбор адреса NTCP. |
i2p.router.net.ssu.port | Строка, 1–65535 | Порт SSU; для применения изменения требуется перезапуск. |
i2p.router.net.ssu.hostname | Строка | Внешнее имя хоста SSU; для применения изменения требуется перезапуск. |
i2p.router.net.ssu.autoip | ssu, local,ssu, upnp,ssu или local,upnp,ssu | Источники обнаружения адреса SSU. |
i2p.router.net.ssu.detectedip | null | Обнаруженный адрес SSU (только для чтения). |
i2p.router.net.upnp | Строка | Настройка UPnP. |
i2p.router.net.bw.share | Строка, 0–100 | Процент пропускной способности, доступной для участия в туннелях. |
i2p.router.net.bw.in | Строка, неотрицательное целое число | Ограничение входящей пропускной способности в КиБ/с. |
i2p.router.net.bw.out | Строка, неотрицательное целое число | Ограничение исходящей пропускной способности в КиБ/с. |
i2p.router.net.laptopmode | Строка | Настройка режима ноутбука. |
| Получить или установить параметры конфигурации сети (порты, upnp, распределение пропускной способности и т.д.) |
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "5",
"method": "NetworkSetting",
"params": {
"Token": "a1b2c3d4e5",
"i2p.router.net.ntcp.port": null,
"i2p.router.net.ssu.port": null,
"i2p.router.net.bw.share": null,
"i2p.router.net.upnp": null
}
}' \
http://127.0.0.1:7657/jsonrpc/
Пример запроса (получение текущих значений)
{
"jsonrpc": "2.0",
"id": "5",
"result": {
"i2p.router.net.ntcp.port": "1234",
"i2p.router.net.ssu.port": "5678",
"i2p.router.net.bw.share": "50",
"i2p.router.net.upnp": "true",
"SettingsSaved": false,
"RestartNeeded": false
}
}
Пример ответа
Примечание: версии i2pd до 2.41 могут возвращать числовые типы вместо строк — клиенты должны обрабатывать оба варианта. :contentReference[oaicite:11]{index=11}
4.5 Расширенные настройки
| Параметр | Тип | Описание |
|---|---|---|
get | Строка | Возвращает один параметр внутри объекта результата get. |
getAll | н/д | Возвращает полную конфигурационную карту внутри getAll. |
set | Map<String, String> | Обновляет предоставленные параметры, не удаляя другие ключи. |
setAll | Map<String, String> | Разрушительная операция: заменяет все параметры и удаляет неуказанные ключи. |
| Позволяет управлять внутренними параметрами router. |
Пример запроса
curl -s -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "6",
"method": "AdvancedSettings",
"params": {
"Token": "a1b2c3d4e5",
"set": {
"router.sharePercentage": "75",
"i2np.flushInterval": "6000"
}
}
}' \
http://127.0.0.1:7657/jsonrpc/
Пример ответа
{
"jsonrpc": "2.0",
"id": "6",
"result": {}
}
Стандартные коды ошибок JSON-RPC2
| Параметр | Тип | Описание |
|---|---|---|
Echo | String | Значение, возвращаемое как Result. |
{
"jsonrpc": "2.0",
"id": "7",
"method": "Echo",
"params": {
"Token": "a1b2c3d4e5",
"Echo": "hello"
}
}
{
"jsonrpc": "2.0",
"id": "7",
"result": {
"Result": "hello"
}
}
Специфические коды ошибок I2PControl
Управляет самим I2PControl. Текущий обработчик на Java поддерживает изменение паролей.
| Параметр | Тип | Описание |
|---|---|---|
i2pcontrol.password | Строка | Устанавливает новый пароль I2PControl и отзывает существующие токены аутентификации. |
Результат содержит SettingsSaved. Если пароль был изменён, в результате также содержится "i2pcontrol.password": null. Настройки адреса и порта прослушивания из устаревшего автономного плагина неактивны в текущем Java-обработчике. |
Пароль по умолчанию:
itoopie— это заводская настройка по умолчанию, которая должна быть изменена немедленно для обеспечения безопасности.
5. Коды ошибок
Стандартные коды ошибок JSON-RPC2
| Код | Значение |
|---|---|
| -32700 | Ошибка разбора JSON |
| -32600 | Недопустимый запрос |
| -32601 | Метод не найден |
| -32602 | Недопустимые параметры |
| -32603 | Внутренняя ошибка |
Коды ошибок, специфичные для I2PControl
| Код | Значение |
|---|---|
| -32001 | Указан неверный пароль |
| -32002 | Не предоставлено токен аутентификации |
| -32003 | Токен аутентификации не существует |
| -32004 | Предоставленный токен аутентификации истек и будет удалён |
| -32005 | Версия используемого I2PControl API не указана, хотя должна быть указана |
| -32006 | Указанная версия I2PControl API не поддерживается I2PControl |
Пароль по умолчанию:
itoopie— это заводская настройка по умолчанию, которая должна быть изменена немедленно для обеспечения безопасности.
6. Использование и лучшие практики
- Всегда включайте параметр
Token(кроме случаев аутентификации). - Измените пароль по умолчанию (
itoopie) при первом использовании. - Для Java I2P убедитесь, что веб-приложение I2PControl включено через WebApps.
- Будьте готовы к небольшим различиям: некоторые поля могут быть числами или строками, в зависимости от версии I2P.
- Переносите длинные строки статуса для удобного отображения.
Пароль по умолчанию:
itoopie— это заводская настройка по умолчанию, которая должна быть изменена немедленно для обеспечения безопасности.