Dernière mise à jour de la page en August 2016.

Language libraries for the BOB API

Différences techniques en comparaison de SAM (pour le mieux ?)

BOB a des canaux séparés pour les commandes et les données. L'un, une douille canal commande d'application vers le routeur pour configurer. Le deuxième, les douilles de données d'application vers/depuis le routeur qui transportent seulement des données. Le canal de commandes est seulement nécessaire pour faire ou mettre la clé initiale de destination, et pour mettre la clé de destination vers les attaches de port. Tous les connexions sont exécutées en parallèle.

SAM a un connexion qui fait tout et vous devez faire l'analyse syntaxique de chaque paquet.

BOB ne retient pas de valeurs de paires de clés, ni non plus le routeur. Votre application détient les valeurs de paires de clés. Ceci est fait pour éviter une complexité supplémentaire dans le code de routeur, cela ajoute aussi à votre vie privée.

Le routeur de SAM stocke chaque paire de clés que ferez.

Celles-ci sont les différences importantes.

Aperçu

KEYS = paire de clés publique+privée, elles sont en BASE64

KEY = clé publique, aussi en BASE64

ERROR comme elle l'implique retourne le message "ERROR "+DESCRIPTION+"\n", où la DESCRIPTION est ce qui s'est mal passé.

OK retourne "OK", et si les données doivent être rendues, il est sur la même ligne.OK signifie que la commande est finie.

DATA ces lignes contiennent les informations que vous avez demandé. Il peut y avoir de multiples lignes DATA par requête.

NOTE : la commande d'aide est la SEULE commande qui a une exception aux règles ... elle peut en réalité ne rien retourner ! Ceci est intentionnel, sachant que l'aide est un HUMAIN et pas une commande d'APPLICATION.

Connection and Version

All BOB status output is by lines. Lines may be \n or \r\n terminated, depending on the system. On connection, BOB outputs two lines:

BOB version
OK

The current version is: 00.00.10

Note that previous versions used upper-case hex digits and did not conform to I2P versioning standards. It is recommended that subsequent versions use digits 0-9 only. 00.00.10

Version history

Version I2P Router Version Changes
00.00.10 0.9.8 current version
00.00.00 - 00.00.0F   development versions

Commands

VEUILLEZ PRENDRE NOTE : Pour des détails ACTUELS sur les commandes VEILLEZ utiliser la commande d'aide incorporée. Juste telnet à localhost 2827 et tapez help et vous pourrez obtenir la documentation complète sur chaque commande.

Les commandes ne seront jamais obsolètes ni changées, cependant de nouvelles commandes sont ajoutées de temps en temps.

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

Une configuré, toutes les douilles TCP peuvent et vont bloquer comme nécessaire, et il n'y a aucun besoin de messages supplémentaires vers/depuis le canal de commande. Ceci permet au routeur de marcher à pas mesurés le flux sans exploser avec OOM comme SAM le fait si il s'étrangle en tentant de pousser beaucoup de flux dans ou hors d'une douille -- cela ne peut pas se mettre à l'échelle quand vous avez beaucoup de connexions !

Ce qui est aussi agréable au sujet de cette interface particulière est que écrire quoi que ce soit à l'interface, est beaucoup beaucoup plus facile que SAM. Il n'y a aucun autre traitement à faire après la configuration. Sa configuration est si simple, que des outils très simples, comme nc (netcat) peuvent être utilisés pour pointer vers une certaine application. La valeur est là que l'on pourrait prévoir en haut et en bas pour une application, et ne pas avoir à changer l'application pour le faire, ou même avoir à arrêter cette application. Au lieu de cela, vous pouvez littéralement "déconnecter" la destination, et quand vous rebrancherez de nouveau, l'application TCP normale ne s'en souciera pas et ne le remarquera pas. Elle sera simplement trompée -- les destinations ne sont pas accessibles, et que rien n'entre.

Examples

Pour l'exemple suivant, nous ferons une configuration très simple de connexion loopback, avec deux destinations. La destination "bouche" sera le service CHARGEN depuis le démon superserveur INET. La destination "oreille" sera un port local auquel vous pouvez vous connecter via telnet, et observer le joli dégueulis de test d'ASCII.

DIALOGUE DE SESSION D'EXEMPLE - un simple telnet 127.0.0.1 2827 fonctionne
A = Application
C = La réponse de commande de 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

PRENEZ NOTE DE LA CLÉ DE DESTINATION CI-DESSUS, LA VÔTRE SERA DIFFÉRENTE !

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

À ce point, il n'y a pas eu d'erreur, une destination avec le surnom "bouche" est configurée. Quand vous contactez la destination fournie, vous vous connectez en réalité au service CHARGEN sur le 19/TCP.

Maintenant pour l'autre moitié, afin que nous puissions réellement contacter cette destination.

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!

Maintenant tout que nous avons à faire est d'utiliser telnet vers 127.0.0.1, port 37337 envoyer la clé de destination ou l'adresse d'hôte du carnet d'adresses que nous voulons contacter. Dans ce cas, nous voulons contacter la "bouche", tout ce que nous faisons est de coller dedans la clé et c'est parti.

NOTE : la commande "quit" dans le canal de commande ne débranche PAS les tunnels comme le fait 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
...

Après quelques km virtuels de ce vomissement, pressez Control-]

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

Voici ce qui est arrivé...

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

Vous pouvez connecter aux EEPSITES aussi !

$ 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!#(*&amp;%"> visitors. </body>
</html>
Connection closed by foreign host.
$

Assez cool n'est-ce pas ? Essayez aussi d'autres sites EEP bien connus si vous voulez, des inexistants, etc, pour obtenir une sensation de quel genre de sortie auquel s'attendre selon des situations différentes. Pour la plupart, il est vous est suggéré d'ignorer tous les messages d'erreur. Ils seraient vides de sens à l'application et sont seulement présentés pour le débogage humain.

Allons poser nos destinations maintenant que nous avons terminé avec elles.

D'abord, allons voir quels sont les surnoms de destination que nous avons.

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

Bien, les voilà. D'abord, enlevons "bouche".

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

Maintenant enlevons "oreille", notez que c'est ce qui arrive quand vous tapez trop vite, et vous affiche ce à quoi ressemble un message ERROR typique.

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!

Je vous embêterais pas à vous montrer un exemple de récepteur de fin d'un pont parce que c'est très simple. Il y a deux réglages possibles pour cela, et on les bascule avec la commande "quiet".

Le par défaut n'est PAS calme, et la première donnée à entrer dans votre douille d'écoute est la destination qui fait le contact. C'est une simple ligne consistant de l'adresse BASE64 suivie par un retour à la ligne. Tout ce qui arrive après cela est pour l'application pour consommer en réalité.

En mode calme, pensez à cela comme une connexion régulière à Internet. Pas du tout de données supplémentaires n'entrent. C'est comme si vous étiez connectés pleinement à l'Internet régulier. Ce mode permet une forme de transparence semblable à ce qui est disponible sur les pages de paramètres de tunnel dans la console routeur, afin que vous puissiez utiliser BOB pour le diriger vers la destination d'un serveur Web, par exemple, et que vous n'ayez pas à modifier du tout le serveur Web.

L'avantage avec l'utilisation de BOB pour ceci est comme discuté précédemment. Vous pourriez planifier des périodes de fonctionnement aléatoires pour l'application, rediriger vers une machine différente, etc. Une utilisation de ceci peut être quelque chose comme vouloir essayer de faire une gaffe router-to-destination upness guessing. Vous pourriez arrêter et démarrer la destination avec un processus totalement différent pour faire aléatoire des mises en service et hors service. De cette façon vous arrêteriez seulement la capacité de contacter un tel service, et ne pas avoir à se déranger à l'arrêter et le redémarrer. Vous pourriez rediriger et pointer vers une machine différente sur votre réseau local tandis que vous faites des mises à jour, ou pointez vers un ensemble de machines de secours selon ce qui fonctionne, etc, etc. Seule votre imagination limite ce que vous pourriez faire avec BOB.