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

BOB - جسر أساسي مفتوح

واجهة برمجة تطبيقات مهجورة لإدارة الوجهات

تحذير - مهجور

غير مخصص للاستخدام في التطبيقات الجديدة. BOB، كما هو محدد هنا، يدعم نوع التوقيع DSA-SHA1 فقط. لن يتم توسيع BOB لدعم أنواع التوقيع الجديدة أو الميزات المتقدمة الأخرى. يجب على التطبيقات الجديدة استخدام SAMv3 .

تم إزالة دعم BOB من التثبيتات الجديدة لـ Java I2P اعتباراً من الإصدار 1.7.0 (2022-02). سيستمر في العمل في Java I2P المثبت أصلاً كإصدار 1.6.1 أو أقدم، حتى بعد التحديثات، لكنه غير مدعوم وقد يتعطل في أي وقت. BOB ما زال مدعوماً من قبل i2pd اعتباراً من 2025-05، لكن التطبيقات يجب أن تنتقل إلى SAMv3 للأسباب المذكورة أعلاه. راجع وثائق i2pd لأي إضافات على الـ API الموثق هنا والمدعومة من قبل i2pd.

في هذه المرحلة، تم دمج معظم الأفكار الجيدة من BOB في SAMv3، الذي يحتوي على المزيد من الميزات والاستخدام الواقعي. قد يعمل BOB لا يزال على بعض التثبيتات (انظر أعلاه)، لكنه لا يحصل على الميزات المتقدمة المتاحة لـ SAMv3 وهو غير مدعوم بشكل أساسي، باستثناء i2pd.

مكتبات اللغات لواجهة برمجة التطبيقات BOB

نظرة عامة

KEYS = زوج مفاتيح عام+خاص، هذه بتنسيق BASE64

KEY = المفتاح العام، أيضاً BASE64

ERROR كما هو مضمن يُرجع الرسالة "ERROR "+DESCRIPTION+"\n"، حيث أن DESCRIPTION هو ما حدث خطأ فيه.

OK ترجع "OK"، وإذا كان هناك بيانات لإرجاعها، فتكون في نفس السطر. OK تعني أن الأمر قد اكتمل.

تحتوي أسطر DATA على المعلومات التي طلبتها. قد يكون هناك عدة أسطر DATA لكل طلب.

ملاحظة: أمر المساعدة هو الأمر الوحيد الذي لديه استثناء من القواعد… يمكنه فعلياً عدم إرجاع أي شيء! هذا مقصود، حيث أن المساعدة هي أمر للإنسان وليس للتطبيق.

الاتصال والإصدار

جميع مخرجات حالة BOB تكون على شكل أسطر. قد تنتهي الأسطر بـ \n أو \r\n، حسب النظام. عند الاتصال، يخرج BOB سطرين:

BOB version
OK

الإصدار الحالي هو: 00.00.10

لاحظ أن الإصدارات السابقة استخدمت أرقام سادس عشر بأحرف كبيرة ولم تتوافق مع معايير الإصدارات في I2P. يُنصح بأن تستخدم الإصدارات اللاحقة الأرقام 0-9 فقط.

تاريخ الإصدارات

VersionI2P Router VersionChanges
00.00.100.9.8current version
00.00.00 - 00.00.0F development versions
## الأوامر

يرجى الملاحظة: للحصول على التفاصيل الحالية حول الأوامر يرجى استخدام أمر المساعدة المدمج. فقط اتصل عبر telnet إلى localhost 2827 واكتب help وستحصل على توثيق كامل لكل أمر.

الأوامر لا تُلغى أو تُغيّر أبداً، ولكن تُضاف أوامر جديدة من وقت لآخر.

COMMAND     OPERAND                             RETURNS
help        (optional command to get help on)   NOTHING or OK and description of the command
clear                                           ERROR or OK
getdest                                         ERROR or OK and KEY
getkeys                                         ERROR or OK and KEYS
getnick     tunnelname                          ERROR or OK
inhost      hostname or IP address              ERROR or OK
inport      port number                         ERROR or OK
list                                            ERROR or DATA lines and final OK
lookup      hostname                            ERROR or OK and KEY
newkeys                                         ERROR or OK and KEY
option      key1=value1 key2=value2...          ERROR or OK
outhost     hostname or IP address              ERROR or OK
outport     port number                         ERROR or OK
quiet                                           ERROR or OK
quit                                            OK and terminates the command connection
setkeys     KEYS                                ERROR or OK and KEY
setnick     tunnel nickname                     ERROR or OK
show                                            ERROR or OK and information
showprops                                       ERROR or OK and information
start                                           ERROR or OK
status      tunnel nickname                     ERROR or OK and information
stop                                            ERROR or OK
verify      KEY                                 ERROR or OK
visit                                           OK, and dumps BOB's threads to the wrapper.log
zap                                             nothing, quits BOB

بمجرد الإعداد، يمكن لجميع TCP sockets أن تتوقف حسب الحاجة وستفعل ذلك، ولا توجد حاجة لأي رسائل إضافية من/إلى قناة الأوامر. هذا يسمح للـ router بتنظيم سرعة التدفق دون الانفجار بـ OOM مثلما يفعل SAM حيث يختنق عند محاولة دفع العديد من التدفقات داخل أو خارج socket واحد – هذا لا يمكن أن يتوسع عندما يكون لديك الكثير من الاتصالات!

ما هو رائع أيضًا في هذه الواجهة المحددة هو أن كتابة أي شيء للتفاعل معها أسهل بكثير من SAM. لا توجد معالجة أخرى للقيام بها بعد الإعداد. تكوينها بسيط جداً، لدرجة أن الأدوات البسيطة جداً، مثل nc (netcat) يمكن استخدامها للإشارة إلى تطبيق ما. القيمة هناك هي أنه يمكن للمرء جدولة أوقات التشغيل والإيقاف لتطبيق ما، دون الحاجة إلى تغيير التطبيق للقيام بذلك، أو حتى الحاجة إلى إيقاف ذلك التطبيق. بدلاً من ذلك، يمكنك حرفياً “فصل” الوجهة، و"توصيلها" مرة أخرى. طالما تم استخدام نفس عناوين IP/المنافذ ومفاتيح الوجهة عند رفع الجسر، فإن تطبيق TCP العادي لن يهتم، ولن يلاحظ. سيتم خداعه ببساطة – الوجهات غير قابلة للوصول، وأنه لا شيء يأتي إلى الداخل.

أمثلة

للمثال التالي، سنقوم بإعداد اتصال loopback محلي بسيط جداً، مع وجهتين. الوجهة “mouth” ستكون خدمة CHARGEN من INET superserver daemon. الوجهة “ear” ستكون منفذ محلي يمكنك الاتصال إليه عبر telnet، ومشاهدة نص ASCII الاختباري الجميل وهو يتدفق.

مثال على حوار الجلسة

يعمل telnet بسيط 127.0.0.1 2827.

  • A = التطبيق
  • C = استجابة أمر BOB.
FROM    TO      DIALOGUE
C       A       BOB 00.00.10
C       A       OK
A       C       setnick mouth
C       A       OK Nickname set to mouth
A       C       newkeys
C       A       OK ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA

انتبه إلى مفتاح الوجهة أعلاه، مفتاحك سيكون مختلفاً!

FROM    TO      DIALOGUE
A       C       outhost 127.0.0.1
C       A       OK outhost set
A       C       outport 19
C       A       OK outbound port set
A       C       start
C       A       OK tunnel starting

في هذه النقطة، لم يكن هناك خطأ، تم إعداد وجهة بالاسم المستعار “mouth”. عندما تتصل بالوجهة المقدمة، فإنك تتصل فعلياً بخدمة CHARGEN على 19/TCP.

الآن للنصف الآخر، حتى نتمكن فعلياً من الاتصال بهذه الوجهة.

FROM    TO      DIALOGUE
C       A       BOB 00.00.10
C       A       OK
A       C       setnick ear
C       A       OK Nickname set to ear
A       C       newkeys
C       A       OK 8SlWuZ6QNKHPZ8KLUlExLwtglhizZ7TG19T7VwN25AbLPsoxW0fgLY8drcH0r8Klg~3eXtL-7S-qU-wdP-6VF~ulWCWtDMn5UaPDCZytdGPni9pK9l1Oudqd2lGhLA4DeQ0QRKU9Z1ESqejAIFZ9rjKdij8UQ4amuLEyoI0GYs2J~flAvF4wrbF-LfVpMdg~tjtns6fA~EAAM1C4AFGId9RTGot6wwmbVmKKFUbbSmqdHgE6x8-xtqjeU80osyzeN7Jr7S7XO1bivxEDnhIjvMvR9sVNC81f1CsVGzW8AVNX5msEudLEggpbcjynoi-968tDLdvb-CtablzwkWBOhSwhHIXbbDEm0Zlw17qKZw4rzpsJzQg5zbGmGoPgrSD80FyMdTCG0-f~dzoRCapAGDDTTnvjXuLrZ-vN-orT~HIVYoHV7An6t6whgiSXNqeEFq9j52G95MhYIfXQ79pO9mcJtV3sfea6aGkMzqmCP3aikwf4G3y0RVbcPcNMQetDAAAA
A       C       inhost 127.0.0.1
C       A       OK inhost set
A       C       inport 37337
C       A       OK inbound port set
A       C       start
C       A       OK tunnel starting
A       C       quit
C       A       OK Bye!

الآن كل ما نحتاج إليه هو استخدام telnet للاتصال بـ 127.0.0.1، المنفذ 37337، وإرسال مفتاح الوجهة أو عنوان المضيف من دفتر العناوين الذي نريد الاتصال به. في هذه الحالة، نريد الاتصال بـ “mouth”، كل ما نفعله هو لصق المفتاح وسيعمل.

ملاحظة: أمر “quit” في قناة الأوامر لا يقطع الاتصال بالـ tunnels مثل SAM.

$ telnet 127.0.0.1 37337
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh
"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk
...

بعد بضعة أميال افتراضية من هذا التدفق، اضغط Control-]

...
cdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK
defghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL
efghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=
telnet> c
Connection closed.

إليك ما حدث…

telnet -> ear -> i2p -> mouth -> chargen -.
telnet <- ear <- i2p <- mouth <-----------'

يمكنك الاتصال بمواقع I2P أيضاً!

$ telnet 127.0.0.1 37337
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
i2host.i2p
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Fri, 05 Dec 2008 14:20:28 GMT
Connection: close
Content-Type: text/html
Content-Length: 3946
Last-Modified: Fri, 05 Dec 2008 10:33:36 GMT
Accept-Ranges: bytes

<html>
<head>
  <title>I2HOST</title>
  <link rel="shortcut icon" href="favicon.ico">
</head>
...
<a href="http://sponge.i2p/">--Sponge.</a></pre>
<img src="/counter.gif" alt="!@^7A76Z!#(*&%"> visitors. </body>
</html>
Connection closed by foreign host.
$

رائع أليس كذلك؟ جرب بعض مواقع I2P المعروفة الأخرى إن أردت، أو مواقع غير موجودة، إلخ، للحصول على فكرة عن نوع المخرجات التي تتوقعها في مواقف مختلفة. في معظم الأحوال، يُنصح بتجاهل أي من رسائل الخطأ. فهي لن تكون ذات معنى للتطبيق، وهي معروضة فقط لأغراض التصحيح البشري.

التنظيف

لنضع وجهاتنا الآن بعد أن انتهينا منها جميعًا.

أولاً، دعونا نرى ما هي أسماء الوجهات المستعارة المتوفرة لدينا.

FROM    TO      DIALOGUE
A       C       list
C       A       DATA NICKNAME: mouth STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: not_set INHOST: localhost OUTPORT: 19 OUTHOST: 127.0.0.1
C       A       DATA NICKNAME: ear STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: 37337 INHOST: 127.0.0.1 OUTPORT: not_set OUTHOST: localhost
C       A       OK Listing done

حسناً، ها هي هناك. أولاً، دعنا نزيل “mouth”.

FROM    TO      DIALOGUE
A       C       getnick mouth
C       A       OK Nickname set to mouth
A       C       stop
C       A       OK tunnel stopping
A       C       clear
C       A       OK cleared

الآن لإزالة “ear”، لاحظ أن هذا ما يحدث عندما تكتب بسرعة كبيرة، ويُظهر لك كيف تبدو رسائل الخطأ النموذجية.

FROM    TO      DIALOGUE
A       C       getnick ear
C       A       OK Nickname set to ear
A       C       stop
C       A       OK tunnel stopping
A       C       clear
C       A       ERROR tunnel is active
A       C       clear
C       A       OK cleared
A       C       quit
C       A       OK Bye!

الوضع الصامت

لن أكلف نفسي عناء إظهار مثال على الطرف المستقبل للجسر لأنه بسيط جداً. هناك إعدادان محتملان له، ويتم التبديل بينهما باستخدام الأمر “quiet”.

الإعداد الافتراضي ليس هادئًا، والبيانات الأولى التي تصل إلى socket الاستماع الخاص بك هي الوجهة التي تقوم بإجراء الاتصال. إنه سطر واحد يتكون من عنوان BASE64 متبوعًا بسطر جديد. كل شيء بعد ذلك مخصص للتطبيق لاستهلاكه فعليًا.

في الوضع الهادئ، فكر فيه كاتصال إنترنت عادي. لا تأتي أي بيانات إضافية على الإطلاق. الأمر تماماً كما لو كنت متصلاً بشكل عادي بالإنترنت العادي. هذا الوضع يتيح شكلاً من أشكال الشفافية مشابه لما هو متاح في صفحات إعدادات tunnel في وحدة تحكم router، بحيث يمكنك استخدام BOB لتوجيه وجهة إلى خادم ويب، على سبيل المثال، ولن تحتاج إلى تعديل خادم الويب على الإطلاق.

مزايا BOB

الميزة من استخدام BOB لهذا الغرض كما ناقشنا سابقاً. يمكنك جدولة أوقات تشغيل عشوائية للتطبيق، إعادة التوجيه إلى جهاز مختلف، إلخ. قد يكون أحد استخدامات هذا شيئاً مثل الرغبة في محاولة إرباك تخمين حالة التشغيل بين router والوجهة. يمكنك إيقاف وتشغيل الوجهة بعملية مختلفة تماماً لجعل أوقات التشغيل والإيقاف عشوائية على الخدمات. بهذه الطريقة ستكون فقط توقف إمكانية الاتصال بمثل هذه الخدمة، ولن تحتاج إلى عناء إغلاقها وإعادة تشغيلها. يمكنك إعادة التوجيه والإشارة إلى جهاز مختلف على شبكتك المحلية أثناء قيامك بالتحديثات، أو الإشارة إلى مجموعة من أجهزة النسخ الاحتياطي حسب ما يعمل، إلخ، إلخ. فقط خيالك يحدد ما يمكنك فعله مع BOB.

Was this page helpful?