تم إنشاء هذه الترجمة باستخدام التعلم الآلي وقد لا تكون دقيقة بنسبة 100%. عرض النسخة الإنجليزية

I2PControl JSON-RPC

واجهة برمجة تطبيقات إدارة router عن بُعد عبر تطبيق I2PControl الويب

توثيق واجهة برمجة التطبيقات I2PControl

————-تحقق من إضافة الأشياء————--

I2PControl هو واجهة برمجة تطبيقات JSON-RPC 2.0 مدمجة مع router I2P (منذ الإصدار 0.9.39). يمكّن من المراقبة والتحكم المصادق عليه في router عبر طلبات JSON منظمة.

كلمة المرور الافتراضية: itoopie — هذه هي القيمة الافتراضية من المصنع ويجب تغييرها فوراً لأغراض الأمان.

1. نظرة عامة والوصول

التنفيذالنقطة الطرفية الافتراضيةالبروتوكولممكّن افتراضيًاالملاحظات
Java I2P (2.10.0+)http://127.0.0.1:7657/jsonrpc/HTTP❌ يجب تمكينه عبر تطبيقات الويب (وحدة تحكم الموجه)تطبيق ويب مدمج
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إصدار واجهة برمجة تطبيقات I2PControl الذي يطلبه العميل. استخدم 1.
PasswordطلبStringكلمة المرور المستخدمة للمصادقة مع I2PControl.
APIاستجابةlongإصدار واجهة برمجة التطبيقات الأساسي المُنفَّذ من قبل الخادم.
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.uptimelongمدة تشغيل الموجه بوحدة الميلي ثانية. قد تُرجع إصدارات i2pd الأقدم سلسلة نصية.
i2p.router.versionسلسلة نصيةإصدار الموجه الكامل.
i2p.router.net.statuslongرمز حالة الشبكة؛ انظر الجدول أدناه.
i2p.router.net.bw.inbound.1sdoubleعرض النطاق الوارد الحالي بالبايت في الثانية.
i2p.router.net.bw.inbound.15sdoubleمتوسط عرض النطاق الوارد على مدى 15 ثانية بالبايت في الثانية.
i2p.router.net.bw.outbound.1sdoubleعرض النطاق الصادر الحالي بالبايت في الثانية.
i2p.router.net.bw.outbound.15sdoubleمتوسط عرض النطاق الصادر على مدى 15 ثانية بالبايت في الثانية.
i2p.router.net.tunnels.participatinglongعدد الأنفاق التي يشارك فيها هذا الموجه.

تعداد رمز الحالة (i2p.router.net.status)

الكودالمعنى
0ناجح
1قيد الاختبار
2محجوب بواسطة جدار ناري
3مخفي
4تحذير: محجوب وسريع
5تحذير: محجوب وعامل تكرار
6تحذير: محجوب مع اتصال داخلي عبر TCP
7تحذير: محجوب مع تعطيل UDP
8خطأ في I2CP
9خطأ في توقيت الساعة
10خطأ في عنوان TCP الخاص
11خطأ في NAT متماثل
12خطأ: منفذ UDP قيد الاستخدام
13خطأ: لا توجد عقد نشطة، تحقق من الاتصال والجدار الناري
14خطأ: تم تعطيل UDP ولم يتم تعيين TCP

قاعدة البيانات الشبكية (NetDB) وحقول العقدة

المفتاحالنوعالوصف
i2p.router.netdb.knownpeerslongعدد الأقران المعروفين، باستثناء الراوتر المحلي.
i2p.router.netdb.activepeerslongعدد الأقران النشطين.
i2p.router.netdb.fastpeerslongعدد الأقران المصنّفين على أنهم سريعون.
i2p.router.netdb.highcapacitypeerslongعدد الأقران المصنّفين على أنهم عاليو السعة.
i2p.router.netdb.isreseedingbooleanما إذا كان إعادة التزود (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) — عرض النطاق الداخل بوحدة B/s :contentReference[oaicite:2]{index=2} - i2p.router.net.bw.outbound.1s, i2p.router.net.bw.outbound.15s (double) — عرض النطاق الخارج بوحدة B/s :contentReference[oaicite:3]{index=3} - i2p.router.net.status (long) — رمز الحالة الرقمي (انظر التعداد أدناه) :contentReference[oaicite:4]{index=4} - i2p.router.net.tunnels.participating (long) — عدد الأنفاق المشاركة :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


المعاملالنوعالوصف
StatStringاسم RateStat في الموجه.
Periodlongفترة المعدل بالميللي ثانية.
يُستخدم لجلب مقاييس المعدل (مثل عرض النطاق الترددي، نجاح 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


المعلمةالنتيجةالوصف
Restartnullيبدأ إعادة تشغيل فورية للراوتر.
RestartGracefulnullيعيد التشغيل بعد انتهاء صلاحية النفق المشارك.
Shutdownnullيبدأ إيقاف فوري للراوتر.
ShutdownGracefulnullيوقف التشغيل بعد انتهاء صلاحية النفق المشارك.
Reseednullيبدأ إعادة زرع الراوتر (reseed).
FindUpdatesقيمة منطقية أو سلسلة نصيةيعمل بشكل مقيد (Blocking). يبحث عن تحديث موقع للراوتر.
Updateسلسلة نصيةيعمل بشكل مقيد (Blocking). يبدأ تحديثًا موقعًا للراوتر ويعيد حالته النهائية.
تنفيذ الإجراءات الإدارية.
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.autoipalways، true، أو falseاختيار تلقائي للعنوان عبر NTCP.
i2p.router.net.ssu.portنص، 1–65535منفذ SSU؛ يتطلب التغيير إعادة التشغيل.
i2p.router.net.ssu.hostnameنصاسم المضيف الخارجي لـ SSU؛ يتطلب التغيير إعادة التشغيل.
i2p.router.net.ssu.autoipssu، local,ssu، upnp,ssu، أو local,upnp,ssuمصادر اكتشاف عنوان SSU.
i2p.router.net.ssu.detectedipnullالعنوان المكتشف لـ 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 الإعدادات المتقدمة


المعلمةالنوعالوصف
getStringيعيد إعدادًا واحدًا داخل كائن نتيجة get.
getAlln/aيعيد خريطة التهيئة الكاملة داخل getAll.
setMap<String, String>يقوم بتحديث الإعدادات المقدمة دون إزالة المفاتيح الأخرى.
seAllMap<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سلسلةالقيمة التي تُرجع كـ 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. إعدادات عنوان الاستماع (listen-address) ومنفذ الاستماع (listen-port) من الإضافة القديمة المستقلة غير نشطة في معالج جافا الحالي.

كلمة المرور الافتراضية: itoopie — هذه هي القيمة الافتراضية من المصنع ويجب تغييرها فوراً لأغراض الأمان.

5. رموز الخطأ

أكواد الأخطاء القياسية لـ JSON-RPC2

الكودالمعنى
-32700خطأ في تحليل JSON
-32600طلب غير صالح
-32601الطريقة غير موجودة
-32602معلمات غير صالحة
-32603خطأ داخلي

أكواد الأخطاء الخاصة بـ I2PControl

الكودالمعنى
-32001تم إدخال كلمة مرور غير صحيحة
-32002لم يتم تقديم رمز المصادقة
-32003رمز المصادقة غير موجود
-32004انتهت صلاحية رمز المصادقة المقدم وسيتم إزالته
-32005لم يتم تحديد إصدار واجهة برمجة تطبيقات I2PControl المستخدمة، مع أن ذلك مطلوب
-32006الإصدار المحدد من واجهة برمجة تطبيقات I2PControl غير مدعوم من قِبل I2PControl

كلمة المرور الافتراضية: itoopie — هذه هي القيمة الافتراضية من المصنع ويجب تغييرها فوراً لأغراض الأمان.

6. الاستخدام وأفضل الممارسات

  • قم دائماً بتضمين معامل Token (عدا عند المصادقة).
  • غيّر كلمة المرور الافتراضية (itoopie) عند الاستخدام الأول.
  • لـ Java I2P، تأكد من تمكين تطبيق I2PControl عبر WebApps.
  • كن مستعداً لاختلافات طفيفة: قد تكون بعض الحقول أرقاماً أو نصوصاً، حسب إصدار I2P.
  • قم بلف سلاسل الحالة الطويلة للحصول على مخرجات سهلة القراءة.

كلمة المرور الافتراضية: itoopie — هذه هي القيمة الافتراضية من المصنع ويجب تغييرها فوراً لأغراض الأمان.