————-vérifier ajout d’éléments————–
Documentation de l’API I2PControl
I2PControl est une API JSON-RPC 2.0 intégrée au router I2P (depuis la version 0.9.39). Elle permet la surveillance et le contrôle authentifiés du router via des requêtes JSON structurées.
Mot de passe par défaut :
itoopie— il s’agit du paramètre d’usine par défaut et doit être changé immédiatement pour la sécurité.
1. Vue d’ensemble et accès
| Implementation | Default Endpoint | Protocol | Enabled by Default | Notes |
|---|---|---|---|---|
| Java I2P (2.10.0+) | http://127.0.0.1:7657/jsonrpc/ | HTTP | ❌ Must be enabled via WebApps (Router Console) | Bundled webapp |
| i2pd (C++ implementation) | https://127.0.0.1:7650/ | HTTPS | ✅ Enabled by default | Legacy plugin behavior |
2. Format JSON-RPC
Toutes les requêtes suivent la structure JSON-RPC 2.0 :
{
"jsonrpc": "2.0",
"id": "1",
"method": "MethodName",
"params": {
/* named parameters */
}
}
Une réponse réussie inclut un champ result ; en cas d’échec, un objet error est retourné :
{
"jsonrpc": "2.0",
"id": "1",
"result": { /* data */ }
}
ou
{
"jsonrpc": "2.0",
"id": "1",
"error": {
"code": -32001,
"message": "Invalid password"
}
}
3. Flux d’authentification
Requête (Authentifier)
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/
Réponse réussie
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"Token": "a1b2c3d4e5",
"API": 1
}
}
Vous devez inclure ce Token dans toutes les requêtes suivantes dans les params.
4. Méthodes et points de terminaison
4.1 RouterInfo
Récupère les données de télémétrie clés concernant le router.
Exemple de requête
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/
Champs de réponse (result) Selon la documentation officielle (GetI2P) : - i2p.router.status (String) — un statut lisible par l’homme - i2p.router.uptime (long) — millisecondes (ou chaîne pour les anciennes versions d’i2pd) :contentReference[oaicite:0]{index=0} - i2p.router.version (String) — chaîne de version :contentReference[oaicite:1]{index=1} - i2p.router.net.bw.inbound.1s, i2p.router.net.bw.inbound.15s (double) — bande passante entrante en B/s :contentReference[oaicite:2]{index=2} - i2p.router.net.bw.outbound.1s, i2p.router.net.bw.outbound.15s (double) — bande passante sortante en B/s :contentReference[oaicite:3]{index=3} - i2p.router.net.status (long) — code de statut numérique (voir l’énumération ci-dessous) :contentReference[oaicite:4]{index=4} - i2p.router.net.tunnels.participating (long) — nombre de tunnels participants :contentReference[oaicite:5]{index=5} - i2p.router.netdb.activepeers, fastpeers, highcapacitypeers (long) — statistiques des pairs netDB :contentReference[oaicite:6]{index=6} - i2p.router.netdb.isreseeding (boolean) — indique si le réamorçage est actif :contentReference[oaicite:7]{index=7} - i2p.router.netdb.knownpeers (long) — total des pairs connus :contentReference[oaicite:8]{index=8}
Énumération des codes de statut (i2p.router.net.status)
| Code | Meaning |
|---|---|
| 0 | OK |
| 1 | TESTING |
| 2 | FIREWALLED |
| 3 | HIDDEN |
| 4 | WARN_FIREWALLED_AND_FAST |
| 5 | WARN_FIREWALLED_AND_FLOODFILL |
| 6 | WARN_FIREWALLED_WITH_INBOUND_TCP |
| 7 | WARN_FIREWALLED_WITH_UDP_DISABLED |
| 8 | ERROR_I2CP |
| 9 | ERROR_CLOCK_SKEW |
| 10 | ERROR_PRIVATE_TCP_ADDRESS |
| 11 | ERROR_SYMMETRIC_NAT |
| 12 | ERROR_UDP_PORT_IN_USE |
| 13 | ERROR_NO_ACTIVE_PEERS_CHECK_CONNECTION_AND_FIREWALL |
| 14 | ERROR_UDP_DISABLED_AND_TCP_UNSET |
4.2 GetRate
Utilisé pour récupérer les métriques de débit (par exemple bande passante, succès des tunnels) sur une fenêtre de temps donnée.
Exemple de requête
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/
Exemple de Réponse
{
"jsonrpc": "2.0",
"id": "3",
"result": {
"Rate": 12345.67
}
}
4.3 RouterManager
Effectuer des actions administratives.
Paramètres / méthodes autorisés - Restart, RestartGraceful - Shutdown, ShutdownGraceful - Reseed, FindUpdates, Update :contentReference[oaicite:10]{index=10}
Exemple de requête
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/
Réponse réussie
{
"jsonrpc": "2.0",
"id": "4",
"result": {
"Restart": null
}
}
4.4 NetworkSetting
Obtenir ou définir les paramètres de configuration réseau (ports, upnp, partage de bande passante, etc.)
Exemple de requête (obtenir les valeurs actuelles)
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/
Exemple de réponse
{
"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": true,
"RestartNeeded": false
}
}
Note : les versions d’i2pd antérieures à 2.41 peuvent retourner des types numériques au lieu de chaînes de caractères — les clients doivent gérer les deux. :contentReference[oaicite:11]{index=11}
4.5 Paramètres avancés
Permet de manipuler les paramètres internes du router.
Exemple de requête
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/
Exemple de réponse
{
"jsonrpc": "2.0",
"id": "6",
"result": {
"Set": {
"router.sharePercentage": "75",
"i2np.flushInterval": "6000"
}
}
}
5. Codes d’erreur
Codes d’erreur JSON-RPC2 standard
| Code | Meaning |
|---|---|
| -32700 | JSON parse error |
| -32600 | Invalid request |
| -32601 | Method not found |
| -32602 | Invalid parameters |
| -32603 | Internal error |
| Code | Meaning |
|---|---|
| -32001 | Invalid password provided |
| -32002 | No authentication token presented |
| -32003 | Authentication token doesn't exist |
| -32004 | The provided authentication token was expired and will be removed |
| -32005 | The version of the I2PControl API used wasn't specified, but is required to be specified |
| -32006 | The version of the I2PControl API specified is not supported by I2PControl |
6. Utilisation et bonnes pratiques
- Toujours inclure le paramètre
Token(sauf lors de l’authentification). - Changer le mot de passe par défaut (
itoopie) lors de la première utilisation. - Pour Java I2P, s’assurer que l’application web I2PControl est activée via WebApps.
- Se préparer à de légères variations : certains champs peuvent être des nombres ou des chaînes, selon la version d’I2P.
- Encapsuler les longues chaînes de statut pour un affichage convivial.